语音信号滤波去噪使用flattopwin窗设计的FIR滤波器.docx
- 文档编号:8209520
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:19
- 大小:384.75KB
语音信号滤波去噪使用flattopwin窗设计的FIR滤波器.docx
《语音信号滤波去噪使用flattopwin窗设计的FIR滤波器.docx》由会员分享,可在线阅读,更多相关《语音信号滤波去噪使用flattopwin窗设计的FIR滤波器.docx(19页珍藏版)》请在冰豆网上搜索。
语音信号滤波去噪使用flattopwin窗设计的FIR滤波器
吹管音乐滤波去噪——使用flattopwin窗设计的FIR滤波器
学生姓名:
黄珺指导老师:
高明
摘要本课程设计主要使用Flattopwin窗设计的FIR滤波器对吹管音乐信号进行滤波去噪。
课程设计的的平台为MATLAB。
采集一段吹管音乐,绘制波形并观察其频谱,给定相应技术指标,用窗函数法设计一个满足指标的FIR滤波器,对该吹管音乐信号进行滤波去噪处理。
根据滤波后的时域图和原始音乐信号时域图的比较,以及滤波后信号的频谱图和原始吹管音乐频谱图的比较,最后回放滤波后吹管音乐,滤波后的吹管音乐信号与原始吹管音乐信号一样清晰,成功地实现了滤波,达到了设计的要求。
关键词课程设计;滤波去噪;FIR滤波器;Flattopwin窗;MATLAB
1引言
本课程设计是采用Flattopwin窗设计的FIR滤波器对吹管音乐进行滤波去噪。
通过课程设计了解FIR滤波器设计的原理和步骤,掌握用Matlab语言设计滤波器的方法,了解DSP对FIR滤波器的设计及编程方法。
通过观察吹管音乐滤波前后的时域波形的比较,加深对滤波器作用的理解。
通过对比滤波前后波形图的比较和放滤波前后吹管音乐的对比,可以看出滤波器对有用信号无失真放大具有重大意义。
1.1课程设计目的
熟悉Matlab语言环境,掌握Matlab语言的编程规则,利用Flattopwin窗函数设计法来设计符合要求的FIR滤波器来实现吹管音乐的滤波去噪。
并绘制滤波前后的时域波形和频谱图。
根据图形分析判断滤波器设计的正确性。
通过本次课程设计熟悉利用Flattopwin窗函数法设计FIR滤波器的过程。
增强自己独立解决问题的能力,提高自己的动手能力。
加深对理论知识联系实际问题的理解。
为以后的工作奠定坚实的基础。
1.2课程设计要求
录制一段吹管音乐,绘制观察波形及频谱图。
根据Flattopwin的性能指标合理设计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所示:
名称
滤波器
过渡带宽
最小阻带衰减
名称
滤波器
过渡带宽
最小阻带衰减
矩形
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.1常见窗函数性能表
2.3FLATTOPWIN窗
w=Flattopwin(L)返回L-点Flattopwin窗口中列向量。
Flattopwin窗的滤波器的过渡带宽为19.6π/M,最小阻带衰减108db。
定义式:
时间波形和幅度谱:
图2.2时间波形
图2.3幅度谱
3设计步骤
3.1设计流程图
根据设计的要求,首先从网上下载一段音乐信号,对音乐信号加入噪声干扰,再利用Flattopwin窗设计合理的FIR滤波器。
最后用滤波器对干扰后的语音信号进行滤波去噪。
具体设计流程图如下图3.1所示:
NO
YES
图3.1设计流程图
3.2录制音乐信号
在网上下载一段
音乐,再利用视频转换器将其转换成**.
格式,且为单声道,再将此.
格式音乐控制在5秒内,以减少设计中的误差。
然后在Matlab软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数,采集完成后在信号中加入一个单频噪声,绘制原音乐信号和加噪后的音乐信号的时域和频域的波形图。
具体调用如下:
[x,fs,bits]=wavread('g:
\yinyue.wav');%输入参数为文件的全路径和文件名,输出的第一个参数是每个样本的值,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;%计算频谱频率范围
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]);
运行程序后我们所得的波形图如图3.3所示:
图3.3干扰前后信号时域图与频谱图的比较
3.3滤波器设计
滤波器的设计就是要找到一组能满足特定滤波要求的系数向量a和b,其中b为系统函数的分子系数,a为系统函数分母系数。
在本次的课程设计中我所采用的就是利用Flattopwin窗函数来设计FIR滤波器。
具体调用如下:
>>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]);
程序中用到的二个函数定义
函数IDEAL_LP.M定义:
functionhd=ideal_lp(wc,M);
%理想低通滤波器计算
%--------------------------------
%[hd]=ideal_lp(wc,M)
%hd=0toM-1之间的理想脉冲响应
%wc=截止频率(弧度)
%M=理想滤波器的长度
%
alpha=(M-1)/2;
n=[0:
1:
(M-1)];
m=n-alpha+eps;
hd=sin(wc*m)./(pi*m);
函数FREQZ_M.M定义:
function[db,mag,pha,grd,w]=freqz_m(b,a);
%freqz子程序的改进版本
%------------------------------------
%[db,mag,pha,grd,w]=freqz_m(b,a);
%db=[0到pi弧度]区间内的相对振幅(db)
%mag=[0到pi弧度]区间内的绝对振幅
%pha=[0到pi弧度]区间内的相位响应
%grd=[0到pi弧度]区间内的群迟延
%w=[0到pi弧度]区间内的501个频率样本向量
%b=Ha(z)的分子多项式系数(对FIRb=h)
%a=Ha(z)的分母多项式系数(对FIR:
a=[1])
%
[H,w]=freqz(b,a,1000,'whole');
H=(H(1:
1:
501))';w=(w(1:
1:
501))';
mag=abs(H);
db=20*log10((mag+eps)/max(mag));
pha=angle(H);
%pha=unwrap(angle(H));
grd=grpdelay(b,a,w);
%grd=diff(pha);
%grd=[grd
(1)grd];
%grd=[0grd(1:
1:
500);grd;grd(2:
1:
501)0];
%grd=median(grd)*500/pi;
得到的波形图如图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);%计算频谱取前一半
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]);
得到的滤波前后音乐信号的时域波形图和频谱图对比图如图3.5所示:
图3.5滤波前后音乐信号的时域波形图和频谱图对比图
3.5结果分析
在MATLAB中,经过sound(x,fs,bits)函数,对经过Flattopwin窗设计的FIR滤波器之后的音乐信号进行回放,可以听出滤波之后的音乐信号跟原始音乐信号一样清晰,完全滤除掉了噪声的干扰,通过下面语句来进行音乐信号回放比较:
>>sound(y_fil,fs,bits);播放滤波后的音乐信号
所得结果证明了用Flattopwin窗设计的FIR滤波器和音乐信号去噪设计是成功的。
4出现的问题及解决方法
在本次课程设计中我遇到的问题如下:
1、在录音时,没有将录音的属性改为wav的格式,当在Matlab软件平台上调用时,出现无法调用的提示,不知道如何将音乐信号截断成自己所需的长度。
2、对在开始录制音乐信号并将其导入MATLAB中的时候出现过错误原因是我所下载的音乐信号是双音频信号,利用Flattopwin窗函数设计FIR滤波器的设计步骤很生疏。
3、在在最后对加噪音乐信号进行滤波并绘图的时也出现了错误,绘制出最后的滤波信号的频谱图时纵坐标出现了负值,但是原信号的频谱图中却没有,采用Flattopwin窗函数设计的FIR滤波器时得不到理想的滤波器,因而信号的恢复不是特别理想。
针对以上问题,相应的解决方案如下:
1、通过与同学讨论发现,不能直接更改文件后缀,应用转换器将其转换为wav格式,
向同学学习如何截取音乐。
2、在老师的指导下我将音乐信号变成了单声道信号,自己上网查阅资料,或向图书馆借阅资料,掌握利用Flattopwin窗函数设计FIR滤波器的方法和步骤。
3、对滤波的信号进行fft变换之后取绝对值,通过过不断设置参数的值,最终达到最理想的值,设计出理想的滤波器,使信号得到理想恢复。
5结束语
本次的课程设计,我的任务是利用Flattopwin窗函数设计FIR滤波器对吹管音乐信号滤波去噪。
在本次课程设计之前,我对Flattopwin窗函数完全没有了解,因此在看到这个题目时,我是一头雾水。
但是通过自己翻阅资料和询问同学,我掌握了用Flattopwin窗函数设计FIR滤波器的方法步骤,了解了窗函数的基本设计流程。
经过这两周的课程设计,我学会了很多东西。
在此我要感谢学校为我们提供这次课程设计的机会,感谢老师对我的悉心指导,也感谢同学对我的帮助。
这次的课程设计让我理论联系实际,不仅巩固了我们的理论知识,还提高了我的动手能力,经过这两周的课程设计经过为期两周的课程设计,这次课程设计比较的简单,根据老师给出的模板,再结合以前学过的知识,并在同学和老师的帮助下我顺利的完成了任务。
不同于在教室里上的理论,这次的课程设计需要将我们平时所学习的知识运用到实践之中,将知识学以致用。
因为是以所学理论为基础,所以在课程设计的过程中,我又重温滤波器、窗函数等知识,更加熟悉了MATLAB的操作。
课程设计是我们运用所学知识,动手实践的一个很好的机会。
它既可以帮助我们加深对所学知识的理解,又能提高我们运用知识,联系实际,动手实践的能力。
而且在设计过程中可能用到我们没学过的知识,需要我们去查阅资料获取相关信息,这又提高了我们查找信息和学习新知识的能力。
在实物的调试与检测过程中,又会遇到许多意想不到的问题,需要我们去分析原因和解决问题。
也体会到真正的去独立地完成一件事情是很困难的,同学以及老师的帮助和提醒是必须的。
通过这次课程设计,我拓宽了知识面,锻炼了实际操作能力,综合素质也得到了提高,进一步加深了了我们对专业的认识和激发了我们对专业的兴趣。
虽然课程设计结束了,但是我们的学习还没结束,对知识的进一步学习还需要继续,很开心成功地完成了这次设计。
参考文献
[1]张志涌.精通MATLAB6.5版[M].北京:
北京航空航天大学出版社,2003.
[2]约翰·G·普罗克斯.数字信号处理[M].西安:
西安交通大学出版社,2009.
[3]张小虹.信号系统与数字信号处理[M].第1版.西安:
西安电子科技出版社,2002.
[4]谢德芳.数字信号处理[M].北京:
科学出版社,2005.
[5]郝建军.数字通信[M].第2版.北京:
北京邮电大学出版社,2010.
[6]张威.MATLAB基础与编程入门[M].西安:
西安电子科技大学出版社,2010.
附录一:
音乐信号滤波去噪——使用FLARTOPWIN滤波器
%程序功能:
在Matlab中,用窗口设计法设计FIR滤波器
%程序作者:
赵伯政
%最后修改日期:
2012-3-4
%程序一:
>>[x,fs,bits]=wavread(yinyue.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');%画原始音乐
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语音 信号 滤波 使用 flattopwin 设计 FIR 滤波器