Engee documentation
Notebook

Notch filtering

The Notch-Peak Filter unit filters each channel of the input signal by time, using a preset center frequency and bandwidth.

In our case, the following settings are used:

  1. 200 Hz bandwidth,
  2. The center frequency of the peak/cutout is 7350 Hz.
  3. The sampling frequency of the input signal is 22050 Hz.

A recorded noisy audio signal is fed to the input of this filter, and at the output we receive a filtered signal.

Let's move on to the implementation of this project: we will define auxiliary functions and build a model.

Let's define the player's function.

In [ ]:
Pkg.add(["WAV"])
In [ ]:
using WAV;
using .EngeeDSP;

function audioplayer(patch, fs, Samples_per_audio_channel);
    s = vcat((EngeeDSP.step(load_audio(), patch, Samples_per_audio_channel))...);
    buf = IOBuffer();
    wavwrite(s, buf; Fs=fs);
    data = base64encode(unsafe_string(pointer(buf.data), buf.size));
    display("text/html", """<audio controls="controls" {autoplay}>
    <source src="data:audio/wav;base64,$data" type="audio/wav" />
    Your browser does not support the audio element.
    </audio>""");
    return s
end 
[ Info: Precompiling WAV [8149f6b0-98f6-5db9-b78f-408fbbb8ef88]
Out[0]:
audioplayer (generic function with 1 method)

Let's connect the auxiliary function of launching the model.

In [ ]:
function run_model( name_model)
    
    Path = (@__DIR__) * "/" * name_model * ".engee"
    
    if name_model in [m.name for m in engee.get_all_models()] # Проверка условия загрузки модели в ядро
        model = engee.open( name_model ) # Открыть модель
        model_output = engee.run( model, verbose=true ); # Запустить модель
    else
        model = engee.load( Path, force=true ) # Загрузить модель
        model_output = engee.run( model, verbose=true ); # Запустить модель
        engee.close( name_model, force=true ); # Закрыть модель
    end
    sleep(5)
    return model_output
end
Out[0]:
run_model (generic function with 1 method)

Let's build and run the model.

image.png
In [ ]:
run_model("NotchPeak_filter") # Запуск модели.

After running the model, we can see which frequencies have been filtered.

image.png

Now let's listen to the input and output signals.

In [ ]:
audioplayer("$(@__DIR__)/MysterySig.wav", 24000, 256);
In [ ]:
audioplayer("$(@__DIR__)/output.wav", 24000, 256);

Conclusion

As we can hear from the recordings and see from the model, the filter works correctly and allows you to get rid of extraneous noise in the original audio signal.