2016-12-03 1426 views
1

我正在設計一個濾波器來消除一段音頻中的噪音。我發現噪聲頻率位於頻譜中的745至1965赫茲,但我不知道如何使多個陷波濾波器去除這兩個特定頻率如何在MATLAB中製作多陷波濾波器?

這是我的代碼。我只能刪除音頻中的一個頻率。有沒有什麼辦法讓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); 

回答

0

正如您已經提到的,您必須將兩個過濾器進行卷積以合併它們。這可以使用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); 

bode plot of designed filter

+1

太感謝你了,我只是想CONV功能比較濾波後的信號,它的作品! –