Как сделать фильтр нескольких меток в MATLAB?

Я разрабатываю фильтр для удаления шума из фрагмента аудио. Я обнаружил, что шумовые частоты расположены в спектре на частотах 745 и 1965 Гц, но я не знаю, как сделать фильтр с несколькими надрезами для удаления этих двух конкретных частот.

Это мой код Я могу удалить только одну частоту в аудио. Есть ли способ сделать свертку двух фильтров в MATLAB?

%Reading first sample file
[x1,fs1] = audioread('sample.wav');

%Creating the time span for the file
t1=(0:length(x1)-1)/fs1;

%Creating the frequency span for the file
k1 = 0:length(x1)-1;
f1=k1*fs1/length(x1);
wg=[744.5*2/fs1 745.5*2/fs1 ];

%Creating  filter
[b1,a1] = butter(2,wg,'stop'); 

%Performing filtering on file
x1f = filter(b1,a1,x1);

1 ответ

Решение

Как вы уже упоминали, вы должны объединить два фильтра, чтобы объединить их. Это можно сделать с помощью conv функция.

% Design first filter
wg1 = [744.5*2/fs1, 745.5*2/fs1];
[b1,a1] = butter(2,wg1,'stop');

% Design second filter
wg2 = [1964.5*2/fs1, 1965.5*2/fs1];
[b2,a2] = butter(2,wg2,'stop');

% Convolve filters
a0 = conv(a1, a2);
b0 = conv(b1, b2);

% Plot filter
freqz(b0, a0, 4096, fs1);

Боде участок разработанного фильтра

Другие вопросы по тегам