《拉弦音乐滤波去噪--使用NUTTALLWIN设计的FIR滤波器》 第16页 共18页
%程序名称:滤波器的设计
%程序功能:用FIR滤波器原型,再用NUTTALLWIN窗函数设计法将其离散化为数字滤波器。 %程序作者:王培乙 %最后修改日期:2012-2-29
fpd=2000;fsd=2050;fsu=2150;fpu=2200;Rp=1;As=40; % 带阻滤波器设计指标
fcd=(fpd+fsd)/2;fcu=(fpu+fsu)/2;df=min((fsd-fpd),(fpu-fsu)); % 计算上下边带中心频率,和频率间隔
wcd=fcd/fs*2*pi;wcu=fcu/fs*2*pi;dw=df/fs*2*pi; % 将Hz为单位的模拟频率换算为rad为单位的数字频率 wsd=fsd/fs*2*pi;wsu=fsu/fs*2*pi;
M=ceil(15.4*pi/dw)+1; % 计算汉宁窗设计该滤波器时需要的阶数 n=0:M-1; % 定义时间范围 w_ham=NUTTALLWIN(M);
hd_bs=ideal_lp(wcd,M)+ideal_lp(pi,M)-ideal_lp(wcu,M); % 调用自编函数计算理想带阻滤波器的脉冲响应
h_bs=w_ham'.*hd_bs; % 用窗口法计算实际滤波器脉冲响应
[db,mag,pha,grd,w]=freqz_m(h_bs,1); % 调用自编函数计算滤波器的频率特性; subplot(2,2,1);plot(w/pi,db);title('滤波器幅度响应图');xlabel('w/pi');ylabel('幅度mag');
axis([0.05,0.15,-60,10]);
line([0,0.6],[0,0],'color','r','LineStyle','--','LineWidth',2); line([0,0.6],[-40,-40],'color','r','LineStyle','--','LineWidth',2);
line([wsd/pi,wsd/pi],[-130,10],'color','r','LineStyle','--','LineWidth',2); line([wsu/pi,wsu/pi],[-130,10],'color','r','LineStyle','--','LineWidth',2);
subplot(2,2,2);plot(w/pi,mag);title('滤波器幅度响应图');xlabel('w/pi');ylabel('幅度mag');
axis([0.05,0.15,0,1.40]);
《拉弦音乐滤波去噪--使用NUTTALLWIN设计的FIR滤波器》 第17页 共18页 subplot(2,2,3);plot(w/pi,pha);title('滤波器相位响应图');xlabel('w/pi');ylabel('相位pha');
subplot(2,2,4);stem(n,h_bs);title('滤波器脉冲响应图');xlabel('n');ylabel('h(n)');
附录3:信号滤波处理源程序
%程序名称:语音信号滤波
%程序功能:用设计好的滤波器对语音信号进行滤波,并画出滤波前后语音信号的时域波形和频谱对比图 %程序作者:
%最后修改日期:2012-2-29
y_fil=fftfilt(h_bs,y);% 用设计好的滤波器对y进行滤波
Y_fil=abs(fft(y_fil));Y_fil=Y_fil(1:length(Y_fil)/2);% 计算频谱取前一半 sound (y_fil,fs,bits); %音乐信号回放 figure;
subplot(3,2,1);plot(t,x);grid on;
title('原始拉弦音乐信号');xlabel('时间(t)');ylabel('幅度'); subplot(3,2,2);plot(f,X);grid on; axis([0,3000,0,2000]);
title('原始拉线音乐信号幅度谱');xlabel('频率(f)');ylabel('幅度谱'); subplot(3,2,3);plot(t,y);grid on;
title('加干扰后的音乐信号');xlabel('时间(t)');ylabel('幅度'); subplot(3,2,4);plot(f,Y);grid on; axis([0,3000,0,4000]);
title('加干扰后的音乐信号幅度谱');xlabel('频率(f)');ylabel('幅度谱'); subplot(3,2,5);plot(t,y_fil);grid on;
title('滤波后的音乐信号');xlabel('时间(t)');ylabel('幅度'); subplot(3,2,6);plot(f,Y_fil);grid on; axis([0,3000,0,2000]);
《拉弦音乐滤波去噪--使用NUTTALLWIN设计的FIR滤波器》 第18页 共18页 title('滤波后的音乐信号幅度谱');xlabel('频率(f)');ylabel('幅度谱');