赵伯政 《语音信号去噪—使用FLATTOPWIN窗设计的FIR滤波器》 第11页,共17页
5 结束语
本次的课程设计,我的任务是利用Flattopwin窗函数设计FIR滤波器对音乐信号滤波去噪。在本次课程设计之前,我对Flattopwin窗函数完全没有了解,因此在看到这个题目时,我是一头雾水。但是通过自己翻阅资料和询问同学,我掌握了用Flattopwin窗函数设计FIR滤波器的方法步骤,了解了窗函数的基本设计流程。经过这两周的课程设计,我学会了很多东西。
我们通信工程专业是个实践性很强的专业,而我们在校大部分的学习时间都是花在理论学习上面,实践的机会很少。因而我对很多所学的理论知识如何跟实践联系的概念很模糊,这次的课程设计给了我这个机会,加深了我对理论联系实际的理解,增强了自己独立分析问题和解决问题的能力,开阔了自己的思维。
还有让我看到了自己的不足,自己对本专业的相关知识掌握的还很少,还有很多知识都没掌握,还让我认识到解决问题的方法、途径很多,做事要开阔自己的思维,看待问题要从多个角度看。
在此我要感谢学校为我们提供这次课程设计的机会,感谢老师对我的悉心指导,也感谢同学对我的帮助。这次的课程设计让我理论联系实际,不仅巩固了我们的理论知识,还提高了我的动手能力,在这次课程设计中我所学到的知识是我的财富,让我终身受益。
赵伯政 《语音信号去噪—使用FLATTOPWIN窗设计的FIR滤波器》 第12页,共17页
参考文献
[1]张志涌.精通MATLAB 6.5版[M].北京:北京航空航天大学出版社,2003. [2]约翰·G·普罗克斯.数字信号处理[M].西安:西安交通大学出版社,2009. [3]张小虹.信号系统与数字信号处理[M].第1版.西安:西安电子科技出版社,2002. [4]谢德芳.数字信号处理[M].北京:科学出版社,2005.
[5]郝建军.数字通信[M].第2版.北京:北京邮电大学出版社,2010.
[6]张威.MATLAB 基础与编程入门[M].西安:西安电子科技大学出版社,2010.
赵伯政 《语音信号去噪—使用FLATTOPWIN窗设计的FIR滤波器》 第13页,共17页
附录一: 音乐信号滤波去噪——使用FLARTOPWIN滤波器
%程序功能:在Matlab中,用窗口设计法设计FIR滤波器 %程序作者:赵伯政 %最后修改日期:2012-3-4
%程序一:
>> [x,fs,bits]=wavread('录音.wav');%读取音乐信号 >> sound(x,fs,bits);%播放音乐信号 >> N=length(x);%计算音乐信号的长度 >> fn=2200; % 单频噪声频率
>> t=0:1/fs:(N-1)/fs; % 计算时间范围,样本数除以采样频率 >> x=x(:,1)'; y=x+sin(fn*2*pi*t);
>> plot(t,x); xlabel('t ins');ylabel('x');%画原始音乐信号的时域波形图
sound(y,fs,bits);%播放干扰后的音乐信号,应该可以明显听出有尖锐的单频啸叫声
%程序二:
>> X=abs(fft(x));Y=abs(fft(y)); % 对原始信号和加噪信号进行fft变换,取幅度谱 >> X=X(1:N/2); Y=Y(1:N/2);% 截取前半部分 >> deltaf=fs/N; % 计算频谱的谱线间隔 >> f=0:deltaf:fs/2-deltaf; % 计算频谱频率范围 figure(2)
>> subplot(2,2,1);plot(t,x);xlabel('时间(t)');ylabel('幅度'); title('原始音乐信号'); >> subplot(2,2,2);plot(f,X);xlabel('频率(f)');ylabel('幅度谱');title('原始音乐信号幅度谱');axis([0,8000,0,600]);
>> subplot(2,2,3);plot(t,y);xlabel('时间(t)');ylabel('幅度');title('加干扰后的音乐信号'); >> subplot(2,2,4);plot(f,Y);xlabel('频率(f)');ylabel('幅度谱');title('加干扰后的音乐信号幅度谱');axis([0,8000,0,600]);
%程序三:
赵伯政 《语音信号去噪—使用FLATTOPWIN窗设计的FIR滤波器》 第14页,共17页
>> fpd=2100;fsd=2150;fsu=2250;fpu=2300;Rp=1;As=20;% 带阻滤波器设计指标 >> 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(6.1*pi/dw)+1; % 计算窗设计该滤波器时需要的阶数 >> n=0:M-1; % 定义时间范围
>> w_par=(Flattopwin (M)); % 产生M阶的Flattopwin窗 >> hd_bs=ideal_lp(wcd,M)+ideal_lp(pi,M)-ideal_lp(wcu,M); % 调用自编函数计算理想带阻滤波器的脉冲响应
>> h_bs=w_par'.*hd_bs; % 用窗口法计算实际滤波器脉冲响应
>> [db,mag,pha,grd,w]=freqz_m(h_bs,1);% 调用自编函数计算滤波器的频率特性 figure(3)
subplot(2,2,1);plot(w,db);title('滤波器幅度响应图');xlabel('w/pi');ylabel('db'); axis([0,0.5,-30,10]);
>> line([0,0.5],[-As,-As],'color','r','linestyle','--','LineWidth',2); >> line([0,0.5],[-Rp,-Rp],'color','r','linestyle','--','LineWidth',2); >> line([wsd,wsd],[-30,10],'color','r','linestyle','--','LineWidth',2); >> line([wsu,wsu],[-30,10],'color','r','linestyle','--','LineWidth',2);
>> subplot(2,2,2);plot(w,mag);title('滤波器幅度响应图');xlabel('w/pi');ylabel('幅度mag'); axis([0,1,-0.5,1.5]);
>> subplot(2,2,3);plot(w,pha);title('滤波器相位响应图');xlabel('w/pi');ylabel('相位pha'); axis([0,3,-4,4]);
>> subplot(2,2,4);stem(n,h_bs);title('滤波器脉冲响应图');xlabel('n');ylabel('h(n)'); axis([0,3000,0,1]); %程序四:
>> y_fil=filter(h_bs,1,y);% 用设计好的滤波器对y进行滤波 >> Y_fil=fft(y_fil);Y_fil=Y_fil(1:N/2); % 计算频谱取前一半
赵伯政 《语音信号去噪—使用FLATTOPWIN窗设计的FIR滤波器》 第15页,共17页
figure(4)
>> subplot(3,2,1);plot(t,x);xlabel('时间(t)');ylabel('幅度'); title('原始音乐信号'); >> subplot(3,2,2);plot(f,X);xlabel('频率(f)');ylabel('幅度谱');title('原始音乐信号幅度谱');axis([0,8000,0,600]);
>> subplot(3,2,3);plot(t,y);xlabel('时间(t)');ylabel('幅度');title('加干扰后的音乐信号'); >> subplot(3,2,4);plot(f,Y);xlabel('频率(f)');ylabel('幅度谱');title('加干扰后的音乐信号幅度谱');axis([0,8000,0,600]);
>> subplot(3,2,5);plot(t, y_fil);xlabel('时间(t)');ylabel('幅度'); title('滤波后音乐信号'); >> subplot(3,2,6);plot(f,Y_fil);xlabel('频率(f)');ylabel('幅度谱');title('滤波后音乐信号幅度谱');axis([0,8000,0,600]);