语音信号滤波去噪 - 使用flattopwin窗设计的FIR滤波器

更新时间:2024-01-11 08:44:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

赵伯政 《语音信号去噪—使用FLATTOPWIN窗设计的FIR滤波器》 第1页,共17页

语音信号滤波去噪——使用FLATTOPWIN窗设计的FIR滤波器

学生姓名:赵伯政 指导老师:胡双红

摘 要 本课程设计主要使用Flattopwin窗设计的FIR滤波器对音乐信号进行滤波去噪。课程设计的的平台为MATLAB。采集一段音乐信号,绘制波形并观察其频谱,给定相应技术指标,用窗函数法设计一个满足指标的FIR滤波器,对该音乐信号进行滤波去噪处理。根据滤波后的时域图和原始音乐信号时域图的比较,以及滤波后信号的频谱图和原始音乐信号频谱图的比较,最后回放滤波后音乐信号,滤波后的音乐信号与原始音乐信号一样清晰,成功地实现了滤波,达到了设计的要求。

关键词 课程设计;滤波去噪;FIR滤波器;Flattopwin窗;MATLAB

1 引 言

本课程设计是采用Flattopwin窗设计的FIR滤波器对语音信号进行滤波去噪。通过课程设计了解FIR滤波器设计的原理和步骤,掌握用Matlab语言设计滤波器的方法,了解DSP对FIR滤波器的设计及编程方法。通过观察音乐信号滤波前后的时域波形的比较,加深对滤波器作用的理解。通过对比滤波前后波形图的比较和放滤波前后音乐信号的对比 ,可以看出滤波器对有用信号无失真放大具有重大意义。

1.1 课程设计目的

熟悉Matlab语言环境,掌握Matlab语言的编程规则,利用Flattopwin窗函数设计法来设计符合要求的FIR滤波器来实现语音信号的滤波去噪。并绘制滤波前后的时域波形和频谱图。根据图形分析判断滤波器设计的正确性。通过本次课程设计熟悉利用

赵伯政 《语音信号去噪—使用FLATTOPWIN窗设计的FIR滤波器》 第2页,共17页

Flattopwin窗函数法设计FIR滤波器的过程。增强自己独立解决问题的能力,提高自己的动手能力。加深对理论知识联系实际问题的理解。为以后的工作奠定坚实的基础。

1.2 课程设计要求

录制一段语音信号,绘制观察波形及频谱图。根据Flattopwin的性能指标合理设计FIR滤波器,对语音信号加入干扰,再用滤波器对干扰语音信号进行滤波去噪,比较滤波前后的频谱图并进行分析。再回放语音信号对比原语音信号。看滤波器是否对语音信号进行了滤波去噪。

1.3课程设计平台

MATLAB名字由MATrix和LABoratory两词的前3个字母组合而成。20世纪70年代后期,时任美国新墨西哥大学计算机科学系主任的Cleve Moler教授出于减轻学生编程负担的动机,为学生设计了一组调用LINPACK和EISPACK库程序的“通俗易用”的接口,此即用FORTRAN编写的萌芽状态的MATLAB[1]。

MATLAB软件包括五大通用功能:数值计算功能(Nemeric);符号运算功能(Symbolic);数据可视化功能(Graphic);数据图形文字统一处理功能(Notebook)和建模仿真可视化功能(Simulink)。其中,符号运算功能的实现是通过请求MAPLE内核计算并将结果返回到MATLAB命令窗口。该软件有三大特点:一是功能强大;二是界面友善、语言自然;三是开放性强。目前,Mathworks公司已推出30多个应用工具箱。MATLAB在线性代数、矩阵分析、数值及优化、数理统计和随机信号分析、电路与系统、系统动力学、信号和图像处理、控制理论分析和系统设计、过程控制、建模和仿真、通信系统、以及财政金融等众多领域的理论研究和工程设计中得到了广泛应用。

MATLAB在信号与系统中的应用主要包括符号运算和数值计算仿真分析。由于信号与系统课程的许多内容都是基于公式演算,而MATLAB借助符号数学工具箱提供的符号运算功能能基本满足信号与系统课程的需求。例如,解微分方程、傅里叶正反变换、拉普拉斯正反变换、z正反变换等。MATLAB在信号与系统中的另一主要应用是数值计算与仿真分析,主要包括函数波形绘制、函数运算、冲激响应与阶跃响应仿真分析、信号的时域分析、信号的频谱分析、系统的S域分析、零极点图绘制等内容。数值计算仿真分析可以帮助学生更深入理解信号与系统的理论知识,并为将来使用MATLAB进行信号处理领域的各种分析和实际应用打下基础[2]。

赵伯政 《语音信号去噪—使用FLATTOPWIN窗设计的FIR滤波器》 第3页,共17页

2 基本理论

2.1 FIR滤波器

FIR滤波器:有限长单位冲激响应滤波器,是数字信号系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。因此,FIR滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。

FIR数字滤波器设计的基本步骤如下: (1)确定指标

在设计一个滤波器之前,必须首先根据工程实际的需要确定滤波器的技术指标。在很多实际应用中,数字滤波器常常被用来实现选频操作。因此,指标的形式一般在频域中给出幅度和相位响应。幅度指标主要以两种方式给出。第一种是绝对指标。它提供对幅度响应函数的要求,一般应用于FIR滤波器的设计。第二种指标是相对指标。它以分贝值的形式给出要求。 (2)逼近

确定了技术指标后,就可以建立一个目标的数字滤波器模型。通常用理想的数字滤波器模型。之后,利用数字滤波器的设计方法,设计出一个实际滤波器模型来逼近给定的目标。

(3)性能分析和计算机仿真

上两步的结果是得到以差分或冲激响应描述的滤波器。根据这个描述就可以分析其频率特性和相位特性,以验证设计结果是否满足指标要求;或者利用计算机仿真实现设计的滤波器,再分析滤波结果来判断。

FIR滤波器的设计问题实际上是确定能满足所要求的转移序列或脉冲响应的常数的问题,设计方法主要有窗函数、频率响应法和等波纹最佳逼近法等。

2.2 窗口设计法

窗口设计法是一种通过截断和计权的方法使无限长非因果序列成为有限长脉冲响应序列的设计方法。通常在设计滤波器之前,应该先根据具体的工程应用确定滤波器的技术指标。在大多数实际应用中,数字滤波器常常被用来实现选频操作,所以指标的形

赵伯政 《语音信号去噪—使用FLATTOPWIN窗设计的FIR滤波器》 第4页,共17页

式一般为在频域中以分贝值给出的相对幅度响应和相位响应。

窗口设计法步骤如下:

(1)根据过渡带宽及阻带衰减要求,选择窗函数的类型并估计窗口长度N。窗函数的类型可根据最小阻带衰减AS独立选择。

(2)根据待求滤波器的理想频率响应求出理想单位脉冲响应hd(n)。 (3)由性能指标确定窗函数W(n)和长度N。

(4)求得实际滤波器的单位脉冲响应h(n), h(n)即为所设计FIR滤波器系数向量b(n)。

h(n)?hd(n).W(n) (2.1)

图2.1 常见窗函数性能表

名称 滤波器 最小阻带过渡带宽 衰减 1.8π/M 6.1π/M 6.2π/M 6.6π/M 11π/M 5.8π/M 15.4π/M 21dB 25dB 44dB 51dB 74dB 51.5dB 108dB 名称 滤波器 最小阻带衰过渡带宽 减 6.6π/M 19.6π/M 5.8π/M 3.6π/M 16.1π/M 15.2π/M 2.4π/M 56dB 108dB 60dB 40dB 109dB 113dB 22dB 常见的窗函数性能表如下图2.1所示:

矩形 巴特利特 汉宁 汉明 布莱克曼 BOHMANWIN NUTTALLWIN PARZENWIN FLATTOPWIN GAUSSWIN BARTHANNWIN BLACKMANHARRIS CHEBWIN TUKEYWIN

赵伯政 《语音信号去噪—使用FLATTOPWIN窗设计的FIR滤波器》 第5页,共17页

2.3 FLATTOPWIN窗

w=Flattopwin (L) 返回L-点Flattopwin窗口中列向量。Flattopwin窗的滤波器的过渡带宽为19.6π/M,最小阻带衰减108db。

定义式:?(n)?a0?a1cos(时间波形和幅度谱:

2?n4?n6?n8?n)?a2cos()?a3cos()?a4cos() NNNN

赵伯政 《语音信号去噪—使用FLATTOPWIN窗设计的FIR滤波器》 第6页,共17页

3 设计步骤

3.1 设计流程图

根据设计的要求,首先自己录制一段语音信号,对语音信号加入噪声干扰,再利用Flattopwin窗设计合理的FIR滤波器。最后用滤波器对干扰后的语音信号进行滤波去噪。具体设计流程图如下图3.1所示:

开始 录制段语音信号,命名为“录音.wav”,绘制出其时域波形 和频谱图。

加入噪声干扰,绘制干扰后的

利用Flattopwin窗设计合理的 FIR滤波器。 时域波形和频谱图。

比较滤波前后的时域波形和频谱 图,并回放语音信号,验证是否 达到去噪效果。 将干扰后的语音信号通过自己设计的滤波器,进行滤波去噪。 NO 是否达到去噪 效果?

YES 结束

图3.1设计流程图 3.2 录制音乐信号

从电脑上录制一段语音信号,并命名为“录音.wav”。在Matlab平台下调用wavread函数可采集到语音信号。

赵伯政 《语音信号去噪—使用FLATTOPWIN窗设计的FIR滤波器》 第7页,共17页

运行程序后得到的波形图如图3.2所示:

图3.2 原始音乐信号时域波形图

画出语音信号的时域波形;然后对语音号进行快速傅里叶变换,得到信号的频谱特性,并将原始音乐信号的波形图与加干扰后的波形图进行比较

运行程序后我们所得的波形图如图3.3所示:

图3.3 干扰前后信号时域图与频谱图的比较

3.3 滤波器设计

滤波器的设计就是要找到一组能满足特定滤波要求的系数向量a和b,其中b为系统函数的分子系数,a为系统函数分母系数。在本次的课程设计中我所采用的就是利用

赵伯政 《语音信号去噪—使用FLATTOPWIN窗设计的FIR滤波器》 第8页,共17页

Flattopwin窗函数来设计FIR滤波器。

图3.4设计的滤波器图形

3.4 信号滤波处理

滤波器设计完成后,在MATLAB平台上用函数filter实现滤波, 得到的滤波前后音乐信号的时域波形图和频谱图对比图如图3.5所示:

图3.5 滤波前后音乐信号的时域波形图和频谱图对比图

3.5 结果分析

在MATLAB中,经过sound(x,fs,bits)函数,对经过Flattopwin窗设计的FIR滤波器之后的音乐信号进行回放,可以听出滤波之后的信号跟原始信号一样清晰,完全滤除掉

赵伯政 《语音信号去噪—使用FLATTOPWIN窗设计的FIR滤波器》 第9页,共17页

了噪声的干扰,通过下面语句来进行语音信号回放比较: >> sound (y_fil,fs,bits); 播放滤波后的音乐信号 >> sound(x,fs,bits);

所得结果证明了用Flattopwin窗设计的FIR滤波器和音乐信号去噪设计是成功的。

赵伯政 《语音信号去噪—使用FLATTOPWIN窗设计的FIR滤波器》 第10页,共17页

4出现的问题及解决方法

在本次课程设计中我遇到的问题如下: 1、不知道如何将音乐信号截断成自己所需的长度。

2、对利用Flattopwin窗函数设计FIR滤波器的设计步骤很生疏。

3、在采用Flattopwin窗函数设计的FIR滤波器时得不到理想的滤波器,因而信号的恢复不是特别理想。

针对以上问题,相应的解决方案如下: 1、向同学学习如何截取音乐。

2、自己上网查阅资料,或向图书馆借阅资料,掌握利用Flattopwin窗函数设计FIR滤波器的方法和步骤。

3、通过不断设置参数的值,最终达到最理想的值,设计出理想的滤波器,使信号得到理想恢复。

赵伯政 《语音信号去噪—使用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]);

赵伯政 《语音信号去噪—使用FLATTOPWIN窗设计的FIR滤波器》 第16页,共17页

附录二:

函数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)的分子多项式系数(对FIR b=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 = [0 grd(1:1:500); grd; grd(2:1:501) 0]; % grd = median(grd)*500/pi;

赵伯政 《语音信号去噪—使用FLATTOPWIN窗设计的FIR滤波器》 第17页,共17页

附录三:

函数IDEAL_LP.M定义: function hd = ideal_lp(wc,M); % 理想低通滤波器计算 % -------------------------------- % [hd] = ideal_lp(wc,M)

% hd = 0 to M-1之间的理想脉冲响应 % wc = 截止频率(弧度) % M = 理想滤波器的长度 %

alpha = (M-1)/2; n = [0:1:(M-1)]; m = n - alpha + eps; hd = sin(wc*m) ./ (pi*m);

本文来源:https://www.bwwdw.com/article/akko.html

Top