cutcutcodec.core.filter.audio.wiener

Implement the denoising wiener filter.

Classes

FilterAudioWiener(in_streams[, level, band])

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

Details

class cutcutcodec.core.filter.audio.wiener.FilterAudioWiener(in_streams: Iterable[StreamAudio], level: Real = 1.0, band: Real | None = None)[source]

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

Wiener filtter pipeline

Attributes

levelfloat

The denoising level in [0, 1] (readonly).

bandfloat or None

The frequency resolution in Hz (readonly).

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.5*fl_0 + 0.2*sin(2*pi*100*t) + 0.1*sin(2*pi*200*t) + 0.1*sin(2*pi*400*t)",
...     "0.5*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.1134)
>>> torch.mean((frame_signal - frame_denoised)**2)
tensor(0.0156)
>>>

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.

levelfloat, default = 1.0

The denoised level, 0 for the minimum and 1 for the optimal denoised ratio.

bandfloat, optional

The absolute frequency resolution (in Hz) for the estimation of the psd, normalized then transmitted to cutcutcodec.core.signal.psd.welch().