吹管音乐滤波去噪使用TUKEYWIN设计的FIR滤波器要点.docx
《吹管音乐滤波去噪使用TUKEYWIN设计的FIR滤波器要点.docx》由会员分享,可在线阅读,更多相关《吹管音乐滤波去噪使用TUKEYWIN设计的FIR滤波器要点.docx(16页珍藏版)》请在冰豆网上搜索。
吹管音乐滤波去噪使用TUKEYWIN设计的FIR滤波器要点
吹管音乐滤波去噪
—使用TUKEYWIN设计的FIR滤波器
学生姓名:
指导老师:
摘要本课程设计主要内容是设计利用窗口设计法选择TUKEYWIN窗设计一个FIR滤波器,对一段含噪吹管音乐信号进行滤波去噪处理并根据滤波前后的波形和频谱分析滤波性能。
本课程设计仿真平台为MATLAB7.0,开发工具是M语言编程。
首先下载一段吹管音乐信号,并人为加入一单频噪声,然后对信号进行频谱分析以确定所加噪声频率,并设计滤波器进行滤波去噪处理,最后比较滤波前后的波形和频谱并进行分析。
由分析结果可知,滤波器后的语音信号与原始信号基本一致,即设计的FIR滤波器能够去除信号中所加单频噪声,达到了设计目的。
关键词滤波去噪;FIR滤波器;TUKEYWIN窗;MATLAB
1引言
本课程设计主要解决在含噪情况下对吹管音乐信号的滤波去噪处理,处理时采用的是利用窗口设计法选择Tukeywin窗设计的FIR滤波器。
通过课程设计了解FIR滤波器设计的原理和步骤,掌握用Matlab语言设计滤波器的方法及编程。
通过观察音乐信号滤波前后的时域波形的比较,加深对滤波器作用的理解。
1.1课程设计目的
熟悉Matlab语言环境,掌握Matlab语言的编程规则,利用TUKEYWIN窗函数设计法来设计符合要求的FIR滤波器来实现音乐信号的滤波去噪。
并绘制滤波前后的时域波形和频谱图。
根据图形分析判断滤波器设计的正确性。
通过本次课程设计熟悉利用TUKEYWIN窗函数法设计FIR滤波器的过程。
增强自己独立解决问题的能力,提高自己的动手能力。
加深对理论知识联系实际问题的理解。
为以后的工作奠定坚实的基础。
1.2课程设计要求
(1)滤波器指标必须符合工程实际。
(2)设计完后应检查其频率响应曲线是否满足指标。
(3)处理结果和分析结论应该一致,而且应符合理论。
(4)独立完成课程设计并按要求编写课程设计报告书。
1.3课程设计平台
MATLAB软件包括五大通用功能:
数值计算功能(Nemeric);符号运算功能(Symbolic);数据可视化功能(Graphic);数据图形文字统一处理功能(Notebook)和建模仿真可视化功能(Simulink)。
其中,符号运算功能的实现是通过请求MAPLE内核计算并将结果返回到MATLAB命令窗口。
该软件有三大特点:
一是功能强大;二是界面友善、语言自然;三是开放性强。
目前,Mathworks公司已推出30多个应用工具箱。
MATLAB在线性代数、矩阵分析、数值及优化、数理统计和随机信号分析、电路与系统、系统动力学、信号和图像处理、控制理论分析和系统设计、过程控制、建模和仿真、通信系统、以及财政金融等众多领域的理论研究和工程设计中得到了广泛应用。
MATLAB在信号与系统中的应用主要包括符号运算和数值计算仿真分析。
由于信号与系统课程的许多内容都是基于公式演算,而MATLAB借助符号数学工具箱提供的符号运算功能能基本满足信号与系统课程的需求。
例如,解微分方程、傅里叶正反变换、拉普拉斯正反变换、z正反变换等。
MATLAB在信号与系统中的另一主要应用是数值计算与仿真分析,主要包括函数波形绘制、函数运算、冲激响应与阶跃响应仿真分析、信号的时域分析、信号的频谱分析、系统的S域分析、零极点图绘制等内容。
数值计算仿真分析可以帮助学生更深入理解信号与系统的理论知识,并为将来使用MATLAB进行信号处理领域的各种分析和实际应用打下基础[1]。
2设计原理
窗函数设计法的基本思想是用FIRDF逼近希望的滤波特性。
设希望逼近的滤波器的频率响应函数为
,其单位脉冲响应用
表示。
为了设计简单方便,通常选择
为具有片段常数特性的理想滤波器。
因此
是无限长非因果序列,不能直接作为FIRDF的单位脉冲响应。
窗函数设计法就是截取
为有限长的一段因果序列,并用合适的窗函数进行加权作为FIRDF的单位脉冲响应
[2]。
2.1FIR滤波器
FIR滤波器是有限长单位脉冲响应数字滤波器的简称,FIR滤波器的最大优点是可以实现线性相位滤波。
FIR滤波器满足了在数字通信和图像传输与处理等应用场合对线性相位的要求,FIR滤波器是全零点滤波器,硬件和软件实现结构简单,不用考虑稳定性问题。
当幅频特性指标相同(不考虑相位特性)时,FIR滤波器的阶数比IIRDF的阶数高得多。
所以在要求线性相位滤波的应用场合,一般都用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.3Tukeywin窗
w=tukeywin(M)在数组w中产生M点的Tukeywin窗函数。
由上面查表可知:
Tukeywin窗的滤波器的过渡带宽为2.4π/M,最小阻带衰减22db。
利用
可绘制出Tukeywin窗函数波形如下:
N=128;
t=tukeywin(N);
wvtool(t);
图2-2Tukeywin窗函数波形
3设计步骤
3.1设计流程图
根据设计的要求,首先从网上下载一段音乐信号,对音乐信号加入噪声干扰,再利用Tukeywin窗设计合理的FIR滤波器。
最后用滤波器对干扰后的音乐信号进行滤波去噪。
具体设计流程图如下图3.1所示:
NO
YES
图3-1音乐信号滤波去噪流程图
3.2录制语音信号
在网上下载一段
音乐,再利用视频转换器将其转换成.
格式,且为单声道,再将此.
格式音乐控制在3秒内,以减少设计中的误差。
然后在Matlab软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数,采集完成后在信号中加入一个单频噪声,绘制原音乐信号和加噪后的音乐信号的时域和频域的波形图。
具体调用如下:
[x,fs,bits]=wavread('g:
\数字信号\meilideshenhua.wav');%输入参数为文件的全路径和文件名,输出的第一个参数是每个样本的值,fs是生成该波形文件时的采样率,bits是波形文件每样本的编码位数。
sound(x,fs,bits);%按指定的采样率和每样本编码位数回放
N=length(x);%计算信号x的长度
fn=2100;%单频噪声频率,此参数可改
t=0:
1/fs:
(N-1)/fs;%计算时间范围,样本数除以采样频率
x=x(:
1)';y=x+0.1*sin(fn*2*pi*t);
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;%计算频谱频率范围
得到的波形图如图3.2所示:
图3-2原始音乐信号与加噪后的音乐信号时域、频域波形图
3.3滤波器设计
在此用窗函数法设计一个带阻的
滤波器。
此处给出各滤波器的性能指标:
,As=20dB,Ap=1dB,其截止频率在单频噪声干扰附近。
再进行加窗设计,利用Matlab中的函数freqz画出各滤波器的频率响应。
具体调用如下:
fpd=2000;fsd=2050;fsu=2150;fpu=2200;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(2.4*pi/dw)+1;%计算TUKEYWIN窗设计该滤波器时需要的阶数
n=0:
M-1;%定义时间范围
w_tuk=tukeywin(M);%产生M阶的TUKEYWIN窗
hd_bs=ideal_lp(wcd,M)+ideal_lp(pi,M)-ideal_lp(wcu,M);%调用自编函数计算理想带阻滤波器的脉冲响应
h_bs=w_tuk'.*hd_bs;%用窗口法计算实际滤波器脉冲响应
[db,mag,pha,grd,w]=freqz_m(h_bs,1);%调用自编函数计算滤波器的频率特性
得到的波形图如图3.3所示:
图3-3滤波器波形图
注:
滤波器的设计指标
,图中可以明显地看到利用
窗函数所设计的滤波器基本上可以达到滤波效果。
3.4信号滤波处理
用自己设计的各滤波器分别对采集的信号进行滤波,在Matlab中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。
在同一张大图里分别绘制原始信号x,加噪信号x’,滤波去噪信号y的时域波形和频谱,以便比较和分析。
滤波程序如下:
y_fil=fftfilt(h_bs,y);%用设计好的滤波器对y进行滤波
Y_fil=fft(y_fil);Y_fil=Y_fil(1:
N/2);%计算频谱取前一半
得到的波形图如图3.4所示:
图3.4滤波前后音乐信号的时域波形图和频谱图对比图
注:
从图中可以看出滤波后的信号的幅度有所减小,说明加噪信号通过滤波器之后不可能毫无变化,也就是说参数的设置以及窗函数的选择都会影响滤波后信号的质量。
3.5结果分析
在Matlab中,函数sound可以对经过tukeywin窗设计的FIR滤波器之后的音乐信号进行回放。
其调用格式:
sound(y_fil,fs,bits);可以感觉滤波前后的声音有变化,那尖锐的噪声明显减小。
但是所设计的滤波器并不是理想的滤波器,并且由于tukeywin窗所设计的滤波器本身的性能局限,所以在回放滤波后的音乐的时候还可以听到一些噪声。
但从滤波器的波形图中也可以明显地看到滤波器的设计满足所定义的指标,从另一个方面也可以断言滤波器的设计成功。
与相同信源不同滤波方法(Nuttallwin窗)的同学的滤波器相对比,可以看出由于其衰减偏小,所以性能也较差。
与不相同信源(拉弦音乐)相同滤波方法的同学的滤波器相对比,可以看出其滤波效果基本相近。
4出现的问题及解决方法
1、在录音时,没有将录音的属性改为wav的格式,当在Matlab软件平台上调用时,出现无法调用的提示,最后通过与同学讨论发现,不能直接更改文件后缀,应用转换器将其转换为wav格式。
2、在开始录制音乐信号并将其导入MATLAB中的时候出现过错误,原因是我所下载的音乐信号是双音频信号,不符合要求,在老师的指导下我将音乐信号变成了单声道信号,再次导入的时候MATLAB不再报错。
3、在最后对加噪音乐信号进行滤波并绘图的时也出现了错误,绘制出最后的滤波信号的频谱图时纵坐标出现了负值,但是原信号的频谱图中却没有,回头检查了一遍程序想到幅度值只有正值,想到是不是忘记加绝对值符号了,在对滤波的信号进行fft变换之后未取绝对值,改正之后再运行程序就不会再出错。
4、在滤波处理时,在加入单频噪声部分噪声频率设置为2200,但滤波器参数设置部分最高带阻为2200,导致滤波处理后不能滤除噪声信号,而后来将其改为2100,才达到了效果。
5结束语
本次的课程设计,我的任务是利用Tukeywin窗函数设计FIR滤波器对音乐信号滤波去噪。
在本次课程设计之前,我对Tukeywin窗函数完全没有了解,因此在看到这个题目时,我是一头雾水。
但是通过自己翻阅资料和询问同学,我掌握了用Tukeywin窗函数设计FIR滤波器的方法步骤,了解了窗函数的基本设计流程。
经过这两周的课程设计经过为期两周的课程设计,这次课程设计比较的简单,根据老师给出的模板,再结合以前学过的知识,并在同学和老师的帮助下我顺利的完成了任务。
不同于在教室里上的理论,这次的课程设计需要将我们平时所学习的知识运用到实践之中,将知识学以致用。
因为是以所学理论为基础,所以在课程设计的过程中,我又重温滤波器、窗函数等知识,更加熟悉了MATLAB的操作。
虽说总体上是比较的简单,但是也会出现一些错误,分析并总结这些错误主要是语句上的一些用法出现错误,以及没有及时地掌握老师所提醒的部分。
但是最后还是在老师的帮助下,解决了这些问题。
课程设计是我们运用所学知识,动手实践的一个很好的机会。
它既可以帮助我们加深对所学知识的理解,又能提高我们运用知识,联系实际,动手实践的能力。
而且在设计过程中可能用到我们没学过的知识,需要我们去查阅资料获取相关信息,这又提高了我们查找信息和学习新知识的能力。
在实物的调试与检测过程中,又会遇到许多意想不到的问题,需要我们去分析原因和解决问题。
也体会到真正的去独立地完成一件事情是很困难的,同学以及老师的帮助和提醒是必须的。
通过这次课程设计,我拓宽了知识面,锻炼了实际操作能力,综合素质也得到了提高,进一步加深了了我们对专业的认识和激发了我们对专业的兴趣。
虽然课程设计结束了,但是我们的学习还没结束,对知识的进一步学习还需要继续,很开心成功地完成了这次设计。
参考文献
[1]维纳.K英格尔,约翰.G普罗克斯.数字信号处理(MATLAB版).西安:
西安交通大学出版社,2007
[2]程佩青.数字信号处理教程.北京:
清华大学出版社,2002
[3]张圣勤.MATLAB7.0实用教程.北京:
机械工业出版社,2008
[4]张志涌.精通MATLAB6.5版[M].北京:
北京航空航天大学出版社,2003.
[5]谢德芳.数字信号处理[M].北京:
科学出版社,2005.
[6]张小虹.信号系统与数字信号处理[M].第1版.西安:
西安电子科技出版社,2002.
附录1:
吹管音乐滤波去噪——使用TUKEYWIN窗设计的FIR滤波器
程序一:
%放出原音频
[x,fs,bits]=wavread('h:
\数字信号\meilideshenhua.wav');
%输入参数为文件的全路径和文件名,
%输出的第一个参数是每个样本的值,
%fs是生成该波形文件时的采样率,
%bits是波形文件每样本的编码位数。
sound(x,fs,bits);%按指定的采样率和每样本编码位数回放
程序二:
%原音乐信号和加噪后的音乐信号的时域和频域的波形图绘制
N=length(x);%计算信号x的长度
fn=2100;%单频噪声频率,此参数可改
t=0:
1/fs:
(N-1)/fs;%计算时间范围,样本数除以采样频率
x=x(:
1)';y=x+0.1*sin(fn*2*pi*t);
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;%计算频谱频率范围
subplot(2,2,1);plot(t,x);
xlabel('时间(t)');ylabel('幅度');title('原始音乐信号');
axis([0,2.5,-1.5,1.5]);gridon;
subplot(2,2,2);plot(f,X);
xlabel('频率(f)');ylabel('幅度谱');title('原始音乐信号幅度谱');
axis([0,3000,0,3000]);gridon;
subplot(2,2,3);plot(t,y);
xlabel('时间(t)');ylabel('幅度');title('加干扰后的音乐信号');
axis([0,2.5,-1.5,1.5]);gridon;
subplot(2,2,4);plot(f,Y);
xlabel('频率(f)');ylabel('幅度谱');title('加干扰后的音乐信号幅度谱');
axis([0,3000,0,3000]);gridon;
程序三:
%带阻滤波器设计
fpd=2000;fsd=2050;fsu=2150;fpu=2200;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(2.4*pi/dw)+1;%计算Tukeywin窗设计该滤波器时需要的阶数
n=0:
M-1;%定义时间范围
w_tuk=tukeywin(M);%产生M阶的Tukeywin窗
hd_bs=ideal_lp(wcd,M)+ideal_lp(pi,M)-ideal_lp(wcu,M);
%调用自编函数计算理想带阻滤波器的脉冲响应
h_bs=w_tuk'.*hd_bs;%用窗口法计算实际滤波器脉冲响应
[db,mag,pha,grd,w]=freqz_m(h_bs,1);%调用自编函数计算滤波器的频率特性
subplot(2,2,1);plot(w/pi,db);
title('FIR滤波器的幅度响应图');
xlabel('w/pi');ylabel('db');
line([0,0.5],[-1,-1],'Color','r','LineWidth',2,'LineStyle','--');
line([0,0.5],[-20,-20],'Color','r','LineWidth',2,'LineStyle','--');
line([wsd/pi,wsd/pi],[-30,15],'Color','r','LineWidth',2,'LineStyle','--');
line([wsu/pi,wsu/pi],[-30,15],'Color','r','LineWidth',2,'LineStyle','--');
axis([0.050.15-3015]);gridon;
subplot(2,2,2);plot(w/pi,mag);
title('FIR滤波器的幅度响应图');
xlabel('w/pi');ylabel('幅度mag');
axis([00.301.5]);gridon;
subplot(2,2,3);plot(w/pi,pha);
title('滤波器相位响应图');
xlabel('w/pi');ylabel('相位pha');
axis([01-44]);gridon;
subplot(2,2,4);stem(n,h_bs);
title('滤波器脉冲响应图');
xlabel('n');ylabel('h(n)');
axis([0100000.7]);gridon;
程序四:
%对信号进行滤波
y_fil=fftfilt(h_bs,y);%用设计好的滤波器对y进行滤波
Y_fil=abs(fft(y_fil));Y_fil=Y_fil(1:
N/2);%计算频谱取前一半
subplot(3,2,1);plot(t,x);
title('原始音乐信号时间x');gridon;
xlabel('时间:
t');ylabel('幅度');
axis([0,2.5,-1.5,1.5]);
subplot(3,2,2);plot(f,X);
title('原始音乐信号幅度谱X');
xlabel('频率:
f');ylabel('幅度');
axis([0250002500]);gridon;
subplot(3,2,3);plot(t,y);
title('加干扰音乐信号时间x1');gridon;
xlabel('时间t');ylabel('幅度');
axis([0,2.5,-1.5,1.5]);
subplot(3,2,4);plot(f,Y);
title('加干扰后的音乐信号幅度谱X1');
xlabel('频率f');ylabel('幅度');
axis([0250002500]);gridon;
subplot(3,2,5);plot(t,y_