音乐信号滤波去噪使用parzenwin窗设计的FIR滤波器.docx
- 文档编号:11009814
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:18
- 大小:114.48KB
音乐信号滤波去噪使用parzenwin窗设计的FIR滤波器.docx
《音乐信号滤波去噪使用parzenwin窗设计的FIR滤波器.docx》由会员分享,可在线阅读,更多相关《音乐信号滤波去噪使用parzenwin窗设计的FIR滤波器.docx(18页珍藏版)》请在冰点文库上搜索。
音乐信号滤波去噪使用parzenwin窗设计的FIR滤波器
音乐信号滤波去噪——使用parzenwin窗设计的FIR滤波器
学生姓名:
****指导老师:
黄红兵
摘要本课程设计主要使用Parzenwin窗设计的FIR滤波器对音乐信号进行滤波去噪。
课程设计的的平台为MATLAB。
采集一段音乐信号,绘制波形并观察其频谱,给定相应技术指标,用窗函数法设计一个满足指标的FIR滤波器,对该音乐信号进行滤波去噪处理。
根据滤波后的时域图和原始音乐信号时域图的比较,以及滤波后信号的频谱图和原始音乐信号频谱图的比较,最后回放滤波后音乐信号,滤波后的音乐信号与原始音乐信号一样清晰,成功地实现了滤波,达到了设计的要求。
关键词课程设计;FIR滤波器;音乐信号;滤波去噪;Parzenwin窗设计;MATLAB
1引言
本课程设计是采用Parzenwin窗设计的FIR滤波器对语音信号进行滤波去噪。
通过课程设计了解FIR滤波器设计的原理和步骤,掌握用Matlab语言设计滤波器的方法,。
通过观察音乐信号滤波前后的时域波形的比较,加深对滤波器作用的理解。
通过对比滤波前后波形图的比较和放滤波前后音乐信号的对比,可以看出滤波器对有用信号无失真放大具有重大意义。
1.1课程设计目的
熟悉Matlab语言环境,掌握Matlab语言的编程规则,利用Parzenwin窗函数设计法来设计符合要求的FIR滤波器来实现音乐信号的滤波去噪。
并绘制滤波前后的时域波形和频谱图。
根据图形分析判断滤波器设计的正确性。
通过本次课程设计熟悉利用Parzenwin窗函数法设计FIR滤波器的过程。
增强自己独立解决问题的能力,提高自己的动手能力。
加深对理论知识联系实际问题的理解。
为以后的工作奠定坚实的基础。
1.2课程设计要求
下载一段音乐信号,绘制观察波形及频谱图。
根据Parzenwin的性能指标合理设计FIR滤波器,对音乐信号加入干扰,再用滤波器对干扰音乐信号进行滤波去噪,比较滤波前后的频谱图并进行分析。
再回放音乐信号对比原音乐信号。
看滤波器是否对音乐信号进行了滤波去噪。
1.3课程设计平台
MATLAB名字由MATrix和LABoratory两词的前3个字母组合而成。
20世纪70年代后期,时任美国新墨西哥大学计算机科学系主任的CleveMoler教授出于减轻学生编程负担的动机,为学生设计了一组调用LINPACK和EISPACK库程序的“通俗易用”的接口,此即用FORTRAN编写的萌芽状态的MATLAB[1]。
MATLAB软件包括五大通用功能:
数值计算功能(Nemeric);符号运算功能(Symbolic);数据可视化功能(Graphic);数据图形文字统一处理功能(Notebook)和建模仿真可视化功能(Simulink)。
其中,符号运算功能的实现是通过请求MAPLE内核计算并将结果返回到MATLAB命令窗口。
该软件有三大特点:
一是功能强大;二是界面友善、语言自然;三是开放性强。
目前,Mathworks公司已推出30多个应用工具箱。
MATLAB在线性代数、矩阵分析、数值及优化、数理统计和随机信号分析、电路与系统、系统动力学、信号和图像处理、控制理论分析和系统设计、过程控制、建模和仿真、通信系统、以及财政金融等众多领域的理论研究和工程设计中得到了广泛应用。
MATLAB在信号与系统中的应用主要包括符号运算和数值计算仿真分析。
由于信号与系统课程的许多内容都是基于公式演算,而MATLAB借助符号数学工具箱提供的符号运算功能能基本满足信号与系统课程的需求。
例如,解微分方程、傅里叶正反变换、拉普拉斯正反变换、z正反变换等。
MATLAB在信号与系统中的另一主要应用是数值计算与仿真分析,主要包括函数波形绘制、函数运算、冲激响应与阶跃响应仿真分析、信号的时域分析、信号的频谱分析、系统的S域分析、零极点图绘制等内容。
数值计算仿真分析可以帮助学生更深入理解信号与系统的理论知识,并为将来使用MATLAB进行信号处理领域的各种分析和实际应用打下基础[2]。
2基本理论
2.1FIR滤波器
FIR滤波器:
有限长单位冲激响应滤波器,是数字信号系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。
因此,FIR滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。
FIR数字滤波器设计的基本步骤如下:
(1)确定指标
在设计一个滤波器之前,必须首先根据工程实际的需要确定滤波器的技术指标。
在很多实际应用中,数字滤波器常常被用来实现选频操作。
因此,指标的形式一般在频域中给出幅度和相位响应。
幅度指标主要以两种方式给出。
第一种是绝对指标。
它提供对幅度响应函数的要求,一般应用于FIR滤波器的设计。
第二种指标是相对指标。
它以分贝值的形式给出要求。
(2)逼近
确定了技术指标后,就可以建立一个目标的数字滤波器模型。
通常用理想的数字滤波器模型。
之后,利用数字滤波器的设计方法,设计出一个实际滤波器模型来逼近给定的目标。
(3)性能分析和计算机仿真
上两步的结果是得到以差分或冲激响应描述的滤波器。
根据这个描述就可以分析其频率特性和相位特性,以验证设计结果是否满足指标要求;或者利用计算机仿真实现设计的滤波器,再分析滤波结果来判断。
FIR滤波器的设计问题实际上是确定能满足所要求的转移序列或脉冲响应的常数的问题,设计方法主要有窗函数、频率响应法和等波纹最佳逼近法等。
2.2窗口设计法
窗口设计法是一种通过截断和计权的方法使无限长非因果序列成为有限长脉冲响应序列的设计方法。
通常在设计滤波器之前,应该先根据具体的工程应用确定滤波器的技术指标。
在大多数实际应用中,数字滤波器常常被用来实现选频操作,所以指标的形式一般为在频域中以分贝值给出的相对幅度响应和相位响应。
窗口设计法步骤如下:
(1)根据过渡带宽及阻带衰减要求,选择窗函数的类型并估计窗口长度N。
窗函数的类型可根据最小阻带衰减AS独立选择。
(2)根据待求滤波器的理想频率响应求出理想单位脉冲响应hd(n)。
(3)由性能指标确定窗函数W(n)和长度N。
(4)求得实际滤波器的单位脉冲响应h(n),h(n)即为所设计FIR滤波器系数向量b(n)。
(2.1)
常见的窗函数性能表如下图2.1所示:
图2.1常见窗函数性能表
名称
滤波器
过渡带宽
最小阻带衰减
名称
滤波器
过渡带宽
最小阻带衰减
矩形
1.8π/M
21dB
PARZENWIN
6.6π/M
56dB
巴特利特
6.1π/M
25dB
FLATTOPWIN
19.6π/M
108dB
汉宁
6.2π/M
44dB
GAUSSWIN
5.8π/M
60dB
汉明
6.6π/M
51dB
BARTHANNWIN
3.6π/M
40dB
布莱克曼
11π/M
74dB
BLACKMANHARRIS
16.1π/M
109dB
BOHMANWIN
5.8π/M
51.5dB
CHEBWIN
15.2π/M
113dB
NUTTALLWIN
15.4π/M
108dB
TUKEYWIN
2.4π/M
22dB
2.3PARZENWIN窗
w=parzenwin(n)返回N-点Parzen(日内瓦莱-普桑)窗口中列向量。
Parzenwin窗分段立方米近似高斯窗口。
Parzenwin窗的滤波器的过渡带宽为6.6π/M,最小阻带衰减56db。
3设计步骤
3.1设计流程图
根据设计的要求,首先从网上下载一段音乐信号,对音乐信号加入噪声干扰,再利用Parzenwin窗设计合理的FIR滤波器。
最后用滤波器对干扰后的音乐信号进行滤波去噪。
具体设计流程图如下图3.1所示:
NO
YES
图3.1设计流程图
3.2录制音乐信号
从网上下载一段音乐信号,并命名为“jt.wav”。
其采样率fs为8000HZ,在Matlab平台下调用wavread函数可采集到下载的音乐信号。
具体调用如下:
>>[x,fs,bits]=wavread('c:
\MATLAB\WORK\jt.wav');%读取音乐信号
运行后得出fs=8000,bits=16。
输出的第一个参数x是每个样本的值,fs是生成该波形文件时的采样率,bits是波形文件每样本的编码位数。
>>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('tins');ylabel('x');画原始音乐信号的时域波形图
>>sound(y,fs,bits);%播放干扰后的音乐信号,应该可以明显听出有尖锐的单频啸叫声
运行程序后得到的波形图如图3.2所示:
图3.2原始音乐信号时域波形图
画出语音信号的时域波形;然后对语音号进行快速傅里叶变换,得到信号的频谱特性,并将原始音乐信号的波形图与加干扰后的波形图进行比较,实现程序如下:
>>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;%计算频谱频率范围
>>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]);
运行程序后我们所得的波形图如图3.3所示:
图3.3干扰前后信号时域图与频谱图的比较
3.3滤波器设计
滤波器的设计就是要找到一组能满足特定滤波要求的系数向量a和b,其中b为系统函数的分子系数,a为系统函数分母系数。
在本次的课程设计中我所采用的就是利用Parzenwin窗函数来设计FIR滤波器。
设计的程序如下:
>>fpd=2100;fsd=2150;fsu=2250;fpu=2300;Rp=1;As=55;%带阻滤波器设计指标
>>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.6*pi/dw)+1;%计算汉宁窗设计该滤波器时需要的阶数
>>n=0:
M-1;%定义时间范围
>>w_par=(parzenwin(M));%产生M阶的Parzenwin窗
>>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);%调用自编函数计算滤波器的频率特性
>>subplot(2,2,1);plot(w,db);title('滤波器幅度响应图');xlabel('w/pi');ylabel('db');
axis([0,1,-150,50]);
>>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]);
运行程序后所得到设计的滤波器的图形如图3.4所示:
图3.4设计的滤波器图形
3.4信号滤波处理
滤波器设计完成后,在MATLAB平台上用函数filter实现滤波,滤波程序如下:
>>y_fil=filter(h_bs,1,y);%用设计好的滤波器对y进行滤波
>>Y_fil=fft(y_fil);Y_fil=Y_fil(1:
N/2);%计算频谱取前一半
>>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);xlabel('时间(t)');ylabel('幅度');title('滤波后音乐信号');
>>subplot(3,2,6);plot(f,Y_fil);xlabel('频率(f)');ylabel('幅度谱');title('滤波后音乐信号幅度谱');axis([0,8000,0,600]);
得到的滤波前后音乐信号的时域波形图和频谱图对比图如图3.5所示:
图3.5滤波前后音乐信号的时域波形图和频谱图对比图
3.5结果分析
在MATLAB中,经过sound(x,fs,bits)函数,对经过Parzenwin窗设计的FIR滤波器之后的音乐信号进行回放,可以听出滤波之后的信号跟原始信号一样清晰,完全滤除掉了噪声的干扰,通过下面语句来进行语音信号回放比较:
>>sound(y_fil,fs,bits);播放滤波后的音乐信号
>>sound(x,fs,bits);
所得结果证明了用Parzenwin窗设计的FIR滤波器和音乐信号去噪设计是成功的。
4出现的问题及解决方法
在本次课程设计中我遇到的问题如下:
1、不知道如何将音乐信号截断成自己所需的长度。
2、对利用Parzenwin窗函数设计FIR滤波器的设计步骤很生疏。
3、在采用Parzenwin窗函数设计的FIR滤波器时得不到理想的滤波器,因而信号的恢复不是特别理想。
针对以上问题,相应的解决方案如下:
1、向同学学习如何截取音乐。
2、自己上网查阅资料,或向图书馆借阅资料,掌握利用Parzenwin窗函数设计FIR滤波器的方法和步骤。
3、通过不断设置参数的值,最终达到最理想的值,设计出理想的滤波器,使信号得到理想恢复。
5结束语
本次的课程设计,我的任务是利用Parzenwin窗函数设计FIR滤波器对音乐信号滤波去噪。
在本次课程设计之前,我对Parzenwin窗函数完全没有了解,因此在看到这个题目时,我是一头雾水。
但是通过自己翻阅资料和询问同学,我掌握了用Parzenwin窗函数设计FIR滤波器的方法步骤,了解了窗函数的基本设计流程。
经过这两周的课程设计,我学会了很多东西。
我们通信工程专业是个实践性很强的专业,而我们在校大部分的学习时间都是花在理论学习上面,实践的机会很少。
因而我对很多所学的理论知识如何跟实践联系的概念很模糊,这次的课程设计给了我这个机会,加深了我对理论联系实际的理解,增强了自己独立分析问题和解决问题的能力,开阔了自己的思维。
还有让我看到了自己的不足,自己对本专业的相关知识掌握的还很少,还有很多知识都没掌握,还让我认识到解决问题的方法、途径很多,做事要开阔自己的思维,看待问题要从多个角度看。
在此我要感谢学校为我们提供这次课程设计的机会,感谢老师对我的悉心指导,也感谢同学对我的帮助。
这次的课程设计让我理论联系实际,不仅巩固了我们的理论知识,还提高了我的动手能力,在这次课程设计中我所学到的知识是我的财富,让我终身受益。
参考文献
[1]张志涌.精通MATLAB6.5版[M].北京:
北京航空航天大学出版社,2003.
[2]约翰·G·普罗克斯.数字信号处理[M].西安:
西安交通大学出版社,2009.
[3]张小虹.信号系统与数字信号处理[M].第1版.西安:
西安电子科技出版社,2002.
[4]谢德芳.数字信号处理[M].北京:
科学出版社,2005.
附录一:
音乐信号滤波去噪——使用parzenwin窗设计的FIR滤波器
%程序功能:
在Matlab中,用窗口设计法设计FIR滤波器
%程序作者:
****
%最后修改日期:
2011-3-4
%程序一:
>>[x,fs,bits]=wavread('c:
\MATLAB\WORK\jt.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('tins');ylabel('x');
>>sound(y,fs,bits);
%程序二:
>>X=abs(fft(x));Y=abs(fft(y));
>>X=X(1:
N/2);Y=Y(1:
N/2);
>>deltaf=fs/N;
>>f=0:
deltaf:
fs/2-deltaf;
>>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]);
%程序三:
>>fpd=2100;fsd=2150;fsu=2250;fpu=2300;Rp=1;As=55;
>>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;
>>wsd=fsd/fs*2*pi;wsu=fsu/fs*2*pi;
>>M=ceil(6.6*pi/dw)+1;
>>n=0:
M-1;
>>w_par=(parzenwin(M));
>>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);
>>subplot(2,2,1);plot(w,db);title('滤波器幅度响应图');xlabel('w/pi');ylabel('db');gridon;
axis([0.2,0.4,-60,5]);
>>subplot(2,2,2);plot(w,mag);title('滤波器幅度响应图');xlabel('w/pi');ylabel('幅度mag');gridon;axis([0,0.5,0,1]);
>>subplot(2,2,3);plot(w,pha);title('滤波器相位响应图');xlabel('w/pi');ylabel('相位pha');gridon;axis([0,2,-4,4]);
>>subplot(2,2,4);stem(n,h_bs);title('滤波器脉冲响应图');xlabel('n');ylabel('h(n)');gridon;
axis([0,3000,0,1]);
%程序四:
>>y_fil=filter(h_bs,1,y);
>>Y_fil=fft(y_fil);Y_fil=Y_fil(1:
N/2);
>>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);xlabel('时间(t)');ylabel('幅度');title('滤波后音乐信号');
>>subplot(3,2,6);plot(f,Y_fil);xlabel('频率(f)');ylabel('幅度谱');title('滤波后音乐信号幅度谱');axis([0,8000,0,600]);
附录二:
函数FREQZ_M.M定义:
function[db,mag,pha,grd,w]=freqz_m(b,a);
%freqz子程序的改进版本
%-----------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 音乐 信号 滤波 使用 parzenwin 设计 FIR 滤波器
![提示](https://static.bingdoc.com/images/bang_tan.gif)