基于Matlab的butterworth滤波器设计 – 1

用这个参加了一个小比赛,整个滤波器由一个关键词的提出,到设计,再到成型,遇到了很多问题,但也解决了很多问题,学到了不少东西。

程序涉及的wav文件
http://cid-c9a008b70a75b1fd.skydrive.live.com/browse.aspx/Butterworth%20Filter

[a,fs,bits] = wavread(‘give_money.wav’); % 1.wav is the original audio file
give_money = fft(a,262144); % length(a) = 142884,thus we use a larger value 262144 which is the value of 2^18
subplot(2,2,1);
plot(0:length(give_money)-1,abs(give_money));
xlabel(‘Original Singnal FFT’)

[b,fs,bits] = wavread(‘give_money_noised.wav’); % 2.wav is an audio file with noise
give_money_noised = fft(b,131072); % length(b) = 107604,thus we use a larger value 131072 which is the value of 2^17
subplot(2,2,2);
plot(0:length(give_money_noised)-1,abs(give_money_noised));
xlabel(‘Noised Signal FFT’)
rp = 1;
rs = 15;
wp = 0.0211;
ws = 0.1093; % check this parameter descriptions below
[N,wc] = buttord(wp,ws,rp,rs);
[B,A] = butter(N,wc);
give_money_export = filter(B,A,b);
subplot(2,2,3);
n = 0:length(give_money_export)-1;
stem(n,give_money_export,’.’);
xlabel(‘Filtered Signal In Time-Domain’);
subplot(2,2,4);
give_money_ex = fft(give_money_export,131072); % length(give_money_export) = 97902,thus we use a larger value 131072 which is the value of 2^17
subplot(2,2,4);
plot(0:length(give_money_ex)-1,abs(give_money_ex));
xlabel(‘Export Signal FFT’)

wavwrite(give_money_export,fs,bits,’give_money_filtered.wav’) % create a filtered file,so that we can compare with the original one

Leave a comment