cutcutcodec.core.filter.audio.wiener.FilterAudioWiener

class cutcutcodec.core.filter.audio.wiener.FilterAudioWiener(in_streams: Iterable[StreamAudio])[source]

Denoised a signal for a given stationary noise spectral density estimation.

Examples

>>> import torch
>>> from cutcutcodec.core.filter.audio.add import FilterAudioAdd
>>> from cutcutcodec.core.filter.audio.equation import FilterAudioEquation
>>> from cutcutcodec.core.filter.audio.subclip import FilterAudioSubclip
>>> from cutcutcodec.core.filter.audio.wiener import FilterAudioWiener
>>> from cutcutcodec.core.generation.audio.equation import GeneratorAudioEquation
>>> from cutcutcodec.core.generation.audio.noise import GeneratorAudioNoise
>>> _ = torch.manual_seed(0)
>>> (noise,) = FilterAudioEquation(
...     GeneratorAudioNoise(0).out_streams,
...     "0.4*fl_0 + 0.2*sin(2*pi*100*t) + 0.1*sin(2*pi*200*t) + 0.1*sin(2*pi*400*t)",
...     "0.4*fr_0 + 0.2*cos(2*pi*100*t) + 0.1*cos(2*pi*200*t) + 0.1*cos(2*pi*400*t)",
... ).out_streams
>>> (signal,) = GeneratorAudioEquation("0.5*sin(2*pi*440*t)", "0.5*cos(2*pi*440*t)").out_streams
>>> (real_signal,) = FilterAudioAdd([signal, noise]).out_streams
>>> (noise_slice,) = FilterAudioSubclip([noise], 0, 10).out_streams  # select the 10 first sec
>>> (denoised,) = FilterAudioWiener([noise_slice, real_signal]).out_streams
>>> frame_denoised = denoised.snapshot(10, 48000, 768000)
>>> frame_signal = signal.snapshot(10, 48000, 768000)
>>> torch.mean((frame_signal - real_signal.snapshot(10, 48000, 768000))**2)
tensor(0.0834)
>>> torch.mean((frame_signal - frame_denoised)**2)
tensor(0.0148)
>>>

Initialise and create the class.

Parameters

in_streamstyping.Iterable[StreamAudio]

The concatenation of the noise stream and the audio streams to be denoised. Transmitted to cutcutcodec.core.classes.filter.Filter.

classmethod default()[source]

Provide a minimalist example of an instance of this node.