光谱分类器
此示例显示了光谱分类器的模型。
这个模型,在Engee开发,演示了使用
用于实现数字的块和掩模系统
信号处理算法。 这种方法可以实现高效的数据处理和分析
,在设计复杂系统时提供灵活性和便利性。
光谱分类器
用于隔离和识别信号的频率分量,
这是识别和分析各种类型的关键要素
的信号。 在这个例子中,语音变成了这样的信号。
通过改变参数-频带宽度和
阈值-您可以使算法适应特定要求,增加
结果的准确性。
实现的模型如下图所示。

辅助功能
In [ ]:
Pkg.add("WAV")
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
using FFTW
# Расчёт спектра сигнала
function compute_spectrum(signal, fs)
n = length(signal)
spectrum = abs.(fft(signal)) / n
freqs = (0:n-1) .* (fs / n)
spectrum[1:Int(n/2)], freqs[1:Int(n/2)] # Вернуть половину спектра (для удобства)
end
using WAV;
using .EngeeDSP;
function audioplayer(patch, Samples_per_audio_channel);
s, fs = wavread(patch);
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
Out[0]:
运行模型并分析结果
让我们听听输入信号并分析其频谱。
In [ ]:
signal = audioplayer("$(@__DIR__)/speech_dft_8k.wav", 256);
gr()
spectrum_inp, freqs_inp = compute_spectrum(signal, 8000)
plot(freqs_inp, spectrum_inp, xlabel="Frequency (Hz)", ylabel="Amplitude")
Out[0]:
此音频包含语音记录。 有用频率在1MHz以内。
让我们尝试使用我们的模型对它们进行分类。
首先,让我们设置我们的块的设置。
In [ ]:
fs = 8000; # Частота дискретизации
framesize = 2048; # Размер сегмента анализа
nfft = 1024; # Размер FFT
df = fs/nfft; # Ширина бина FFT
f1 = 200; # Нижняя граница первой полосы (Гц)
f2 = 1900; # Верхняя граница первой полосы (Гц)
f3 = 2000; # Нижняя граница второй полосы (Гц)
f4 = 3500; # Верхняя граница второй полосы (Гц)
indx1 = round(Int,f1/df); # Индексы в массиве выходных данных FFT
indx2 = round(Int,f2/df);
indx3 = round(Int,f3/df);
indx4 = round(Int,f4/df);
现在让我们运行模型并分析结果。
In [ ]:
run_model("simple_classifier") # Запуск модели.
Out[0]:
In [ ]:
Speech = collect(simout["simple_classifier/V/Speech"])
V_on_UV = collect(simout["simple_classifier/V/V/UV"])
plot(V_on_UV.time, V_on_UV.value, seriestype=:steppost, label="V/UV")
plot!(Speech.time, Speech.value, label="signal")
Out[0]:
正如我们所看到的,区域已经从信号中选择
符合光谱的
特征设置在
我们块的掩模设置。
结论
在这个例子中
、光谱分类器模型及可能性
分析了其在音频信号处理中的应用.
