基于语音信号去噪处理的FIR滤波器设计.docx
- 文档编号:9808782
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:22
- 大小:149.54KB
基于语音信号去噪处理的FIR滤波器设计.docx
《基于语音信号去噪处理的FIR滤波器设计.docx》由会员分享,可在线阅读,更多相关《基于语音信号去噪处理的FIR滤波器设计.docx(22页珍藏版)》请在冰点文库上搜索。
基于语音信号去噪处理的FIR滤波器设计
摘要
本次课程设计的题目是基于语音信号去噪处理的FIR滤波器设计,主要是利用MATLAB设计一个FIR数字带通滤波器,对一段噪声环境下的语音信号进行滤波。
在设计过程中,首先要录制一段语音信号,并对录制好的信号进行时域和频域分析;然后对原始的语音信号进行加噪处理,对加噪后的信号进行分析,绘出时域和频域的分析图;最后利用设计出的FIR带通滤波器,针对语音信号的性质选取一种适合的窗函数设计滤波器进行滤波,最后对仿真结果进行分析。
关键词:
FIR带通滤波器;语音信号;MATLAB仿真;加噪;滤波
前言
在信号处理过程中,所处理的信号往往混有噪音,从接收到的信号中消除或减弱噪音是信号传输和处理中十分重要的问题。
根据有用信号和噪音信号的不同特性,提取有用信号的过程称为滤波。
实现滤波功能的系统被称为滤波器。
在近代电信设备和各类控制系统中,数字滤波器应用极为广泛。
语音处理是最早应用数字滤波器的领域之一,也是最早推动数字信号处理理论发展的领域之一。
该领域主要包括5个方面的内容:
第一,语音信号分析。
即对语音信号的波形特性,统计特性,模型参数等进行分析计算。
第二,语音合成。
即利用专用硬件或在通用计算机上运行软件来产生语音。
第三,语音识别。
即利用专用硬件或计算机识别人的讲话,或者识别说话的人。
第四,语音增强。
即从噪音或者干扰中提取被掩盖的语音信号。
第五,语音编码。
主要用于语音数据的压缩,目前已经建立了一系列语音编码国际标准,大量用于通信和音频处理。
MATLAB是一种面向科学和工程计算的语言,它集数值分析、矩阵运算、信号处理和图形显示于一体,具有编程效率高、调试手段丰富、扩充能力强等特点。
MATLAB的信号处理工具箱具有强大的函数功能,它不仅可以用来设计数字滤波器,还可以使设计达到最优化,是数字滤波器设计的强有力工具。
第一章基本原理
1.1语音处理中的采样原理
因为录制的语音信号是模拟信号,要想使用数字滤波器对叠加了噪声的信号进行滤波,则在设计数字滤波器之前首先要进行模数转换,将模拟信号转换为数字信号。
在进行模数转换的过程中,当最高采样频率fs大于信号中最高频率f的2倍时,即:
fsmax≥2fmax,采样之后的数字信号可以完整地保留原始信号中的信息,一般实际应用中保证采样频率为信号最高频率的5~10倍;采样定理又称奈奎斯特定理。
频带为F的连续信号f(t)可用一系列离散的采样值f(t1),f(t1±Δt),f(t1±2Δt),...来表示,只要这些采样点的时间间隔Δt≤1/2F,便可根据各采样值完全恢复原来的信号f(t)。
这是时域采样定理的一种表述方式。
时域采样定理的另一种表述方式是:
当时间信号函数f(t)的最高频率分量为fm时,f(t)的值可由一系列采样间隔小于或等于1/2fm的采样值来确定,即采样点的重复频率f≥2fm。
采样频率,也称为采样速度或者采样率,定义了每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。
采样频率的倒数是采样周期或者叫采样时间,它是采样之间的时间间隔。
通俗的讲采样频率是指计算机每秒钟采集多少个声音样本,是描述声音文件的音质、音调,衡量声卡、声音文件的质量标准。
采样位数和采样率对于音频接口来说是最为重要的两个指标,也是选择音频接口的两个重要标准。
无论采样频率如何,理论上来说采样的位数决定了音频数据最大的力度范围。
每增加一个采样位数相当于力度范围增加了6dB。
采样位数越多则捕捉到的信号越精确[1]。
1.2数字滤波器的设计
数字滤波器(Digital Filter,简称为DF)是指用来对输入信号进行滤波的硬件和软件。
所谓数字滤波器,是指输入、输出均为数字信号,通过一定运算关系改变输入信号所含频率成分的相对比例或者滤除某些频率成分的器件。
数字滤波器和模拟滤波器相比,因为信号的形式和实现滤波的方式不同,数字滤波器具有比模拟滤波器精度高、稳定、体积小、重量轻、灵活、不要求阻抗匹配等优点。
一般用两种方法来实现数字滤波器:
一是采用通用计算机,把滤波器所要完成的运算编成程序通过计算机来执行,也就是采用计算机软件来实现;二是采用实际专用的数字处理硬件。
数字滤波器根据其冲击响应函数的时域特性,可分为两种,即无限冲击响应IIR滤波器和有限冲击响应FIR滤波器。
IIR滤波器的特性是,具有无限持续时间冲击响应。
这种滤波器一般需要用递归模型来实现,因而有时也称之为递归滤波器。
FIR滤波器的冲击响应只能延续一定的时间,在工程实际中可以采用递归的方法来实现,也可以采用非递归的方式来实现。
数字滤波器的设计方法有多种,如双线性变换法,窗函数法,插值逼近法和切比雪夫逼近法等等。
随着MATLAB软件尤其是MATLAB信号处理工作的不断完善,不仅数字滤波器的计算机辅助设计有了可能,而且还可以使设计达到最优化[2]。
数字滤波器的设计基本步骤如下:
(1)确定指标
在设计一个滤波器之前,必须首先根据工程实际的需要确定滤波器的技术指标。
在很多实际应用中,数字滤波器常常被用来实现选频操作。
因此,指标的形式一般在频域中给出幅度和相位响应。
幅度指标主要用以下两种方式给出。
第一种是绝对指标。
它提供对幅度响应函数的要求,一般应用于FIR滤波器的设计。
第二种指标是相对指标。
它以分贝值的形式给出要求。
运用线性相位响应指标进行滤波器设计具有如下优势:
①只包含实数算法,不涉及复数运算。
②不存在延时失真,只有固定数量的延迟。
③长度为N的滤波器,计算量为N/2数量级。
(2)逼近
确定了技术指标后,就可以建立一个目标的数字滤波器模型。
通常采用理想的数字滤波器模型。
之后,利用数字滤波器的设计方法,设计出一个实际滤波器模型来逼近给定的目标。
(3)性能分析和计算机仿真
上两步的结果是得到以差分或者系统函数或者冲击响应描述的滤波器。
根据这个描述就可以分析器频率特性和相位特性,以验证设计结果是否满足指标要求:
或者利用计算机仿真实现设计的滤波器,再分析滤波器结果来判断[3]。
1.3窗函数法
数字滤波器可以理解为是一个计算程序或算法,将代表输入信号的数字时间序列转化为代表输出信号的数字时间序列,并在转化过程中,使信号按预定的形式变化。
数字滤波器有多种分类,根据数字滤波器冲激响应的时域特征,可将数字滤波器分为两种,即无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。
FIR数字滤波器的单位脉冲响应是有限长序列。
它的设计问题实质上是确定能满足所要求的转移序列或脉冲响应的常数问题,设计方法主要有窗函数法、频率采样法和等波纹最佳逼近法等[2]。
用窗函数设计滤波器首先要对滤波器提出性能指标。
一般是给定一个理想的频率响应,使所设计的FIR滤波器的频率响应去逼近所要求的理想的滤波器的响应。
窗函数法设计的任务在于寻找一个可实现(有限长单位脉冲响应)的传递函数。
用一定宽度窗函数截取无限脉冲响应序列获得有限长的脉冲响应序列[4]。
主要设计步骤为:
(1)通过傅里叶逆变换获得理想滤波器的单位脉冲响应
。
从时域出发,截取有限长的一段冲击响应作为H(z)的系数,冲击响应长度N就是系统函数H(z)的阶数。
只要N足够长,截取的方法合理,总能满足频域的要求。
一般这种时域设计、频域检验的方法要反复几个回合才能成功。
要设计一个线性相位的FIR数字滤波器,首先要求理想频率响应
。
是w的周期函数,周期为
,可以展开成傅氏级数:
(1-1)
其中
是与理想频响对应的理想单位抽样响应序列。
但不能用来作为设计FIRDF用的h(n),因为
一般都是无限长、非因果的,物理上无法实现。
为了设计出频响类似于理想频响的滤波器,可以考虑用h(n)来近似
[5]。
窗函数的基本思想:
先选取一个理想滤波器(它的单位抽样响应是非因果、无限长的),再截取(或加窗)它的单位抽样响应得到线性相位因果FIR滤波器,这种方法的重点是选择一个合适的窗函数和理想滤波器[6]。
(2)由性能指标确定窗函数W(n)和窗口长度N。
设x(n)是一个长序列,w(n)是长度为N的窗函数,用w(n)截断x(n),得到N点序列xn(n),即
(1-2)
在频域上则有
(1-3)
(3)求得实际滤波器的单位脉冲响应h(n),h(n)即为所设计FIR滤波器系数向量。
(1-4)
由此可见,窗函数w(n)不仅仅会影响原信号x(n)在时域上的波形,而且也会影响到频域内的形状[4]。
第二章FIR带通滤波器设计
2.1FIR滤波器简介
数字滤波器包括FIR(有限单位脉冲响应)滤波器与IIR(无限单位脉冲响应)滤波器两种。
在现代信号处理技术中,例如数据传输、雷达接收以及一些要求较高的电子系统,都越来越多地要求信道具有线性的相位特性。
在这方面,FIR滤波器具有独到的优点,它可以在幅度特性随意设计的同时,保证精确、严格的线性相位特性[5]。
FIR滤波器的单位脉冲响应h(n)是有限长的(0≤n≤N-1),其z变换为
的(N-1)阶多项式:
(2-1)
可得FIR滤波器的系统差分方程为:
(2-2)
因此,FIR滤波器又称为卷积滤波器。
FIR滤波器的频率响应表达式为:
(2-3)
信号通过FIR滤波器不失真条件是在通带内具有恒定的幅频特性和线性相位特性。
理论上可以证明:
当FIR滤波器的系数满足下列中心对称条件:
(2-4)
或者
(2-5)
时,滤波器设计在逼近平直幅频特性的同时,还能获得严格的线性相位特性。
线性相位FIR滤波器的相位滞后和群延迟在整个频带上是相等且不变的。
对于一个N阶的线性相位FIR滤波器,群延迟为常数,即滤波后的信号简单地延迟常数个时间步长。
这一特性使通带频率内信号通过滤波器后仍保持原有波形形状而无相位失真
[7]。
FIR滤波器的设计任务是选择有限长度的h(n),使传输函数
满足技术要求。
FIR滤波器的设计方法有多种,如窗函数法、频率采样法及其它各种优化设计方法,本次设计使用窗函数法设计FIR带通滤波器。
2.2FIR带通滤波器设计要求
利用MATLAB仿真软件系统结合窗函数法设计一个数字带通FIR滤波器。
设计要求:
(1)用所设计的滤波器对受噪声影响的信号进行滤波,画出滤波后语音信号的时域波形图和频谱图;
(2)对滤波前后的信号进行对比,分析信号的变化;回放语音信号,并与原始语音信号对比。
技术指标:
低端阻带截止频率fc1=1000Hz
低端通带截止频率fb1=1200Hz
高端通带截止频率fb2=3000Hz
高端阻带截止频率fc2=3200Hz
通带衰减系数ap=1dB
阻带衰减系数as=100dB
2.3设计方法
设计FIR数字滤波器的方法通常有三种:
窗函数法,频率抽样法,等纹波逼近法。
本次课程设计讨论的是第一种窗函数法。
这种方法也叫傅里叶级数法。
一般是先给定所要求的理想滤波器频率响应
,导出
,我们知道理想滤波器的冲击响应
是无限长的非因果序列,而我们要设计的是h(n)是有限长的FIR滤波器,所以要用有限长序列h(n)来逼近无限长序列
,设:
(2-6)
常用的方法是使用有限长的窗函数w(n)来截取
即:
(2-7)
根据在时域是相乘关系,在频域则是卷积关系:
(2-8)
其中
为矩形窗谱,
是FIR滤波器频率响应[8]。
在设计过程中,将无限长序列变为有限长序列是通过时域加矩形窗乘积来实现的截断。
常见的窗函数有:
矩形窗,汉宁窗,海明窗,布拉克曼窗,凯泽窗等,下面分别来讨论着几种常见的窗函数:
矩形窗:
窗谱:
幅度函数:
海明窗:
布拉克曼窗:
凯泽窗:
其中
(x)是第一类变形修正零阶贝塞尔函数
这些窗函数的基本参数如表2-1所示:
表2-1窗函数的基本参数
名称
旁瓣峰值/dB
近似过渡带宽
精确过渡带宽
最小阻带衰减/dB
矩形窗
-13
4π/N
1.8π/N
-21
海明窗
-41
8π/N
6.6π/N
-53
布拉克曼窗
-57
12π/N
11π/N
-74
凯泽窗(β=7.865)
-57
10π/N
-80
2.4设计步骤
窗函数法设计FIR滤波器的主要步骤如下:
a.给出希望设计的滤波器的频率响应的函数
;
b.根据允许的过渡带宽度及阻带衰减,初步选定窗函数及其长度N;
c.根据技术要求确定待求滤波器的单位取样响应
,
d.将
与窗函数相乘得FIR数字滤波器的单位取样响应
,
e.按如下方法计算FIR数字滤波器的频率响应,并验证是否达到所要求的技术指标:
(2-9)
或
由
计算幅度响应
和相位响应
。
计算式(15)时可用FFT算法。
如果
或
不满足要求,可根据具体情况重复b,c,d,e步骤,直到满足技术要求[9]。
第三章FIR带通滤波器的软件仿真
3.1程序流程图
图3.1程序设计流程图
首先要录制一段语音信号,并对录制好的信号进行时域和频域分析;然后对原始的语音信号进行加噪处理,对加噪后的信号进行分析,绘出时域和频域的分析图;最后利用设计出的FIR带通滤波器,针对语音信号的性质选取一种适合的窗函数设计滤波器进行滤波,最后对仿真结果进行分析。
3.2仿真结果及分析
对录制好的语音信号进行分析,编写程序对其进行仿真,原始信号时域和频域仿真图如图3.2所示。
(程序见附录)
图3.2原始信号的时域与频域分析
对原始信号加入8.5khz的余弦噪声,并将噪声信号及其加噪后的信号进行时域和频域的分析,仿真结果如图3.3所示。
(程序见附录)
图3.3噪声信号及加噪信号的时域与频域仿真图
仿真分析:
通过对图3.2和3.3两张图进行对比,可以看出加噪后的语音信号时域波形比原始语音信号浑浊了许多,加噪后的信号的频带宽度也明显比原始语音信号的窄;
再通过对原始语音信号的回放效果与加噪后的语音信号回放的效果的对比,人耳可以明显辨别出两种语音信号不一样了,加噪后的语音信号在听觉上比原始语音信号要浑浊很多,而且还有混杂音。
利用给定的参数设计FIR带通滤波器,对其在Matlab上进行仿真,结果如图3.4所示。
(程序见附录)
图3.4带通滤波器的幅频与相频特性
将加噪后的信号通过设计出的带通滤波器进行滤波,时域和频域的仿真结果如图3.5所示。
(程序见附录)
图3.5加噪信号经过滤波后的时域与频域仿真
仿真分析:
分析滤波前后信号的变化,波形图变窄。
频谱变化表明:
信号的低频率段和高频率段被滤除,中间频率段被保留;分析滤波前后的声音变化,滤波后声音一定程度上变的尖锐,与高通滤波器滤波后的声音相比较低。
这说明滤波器设计基本符合指标要求。
总结
在信号处理过程中,所处理的信号往往混有噪音,从接收到的信号中消除或减弱噪音是信号传输和处理中十分重要的问题。
根据有用信号和噪音信号的不同特性,提取有用信号的过程称为滤波。
本次课程设计主要是利用MATLAB设计一个FIR数字带通滤波器,对一段录制好的语音信号加入噪声,在噪声环境下对语音信号进行滤波。
设计主要分为以下几个步骤:
首先要录制一段语音信号,对录制好的信号进行时域和频域分析;然后对原始的语音信号进行加噪处理,对加噪后的信号进行分析,绘出时域和频域的分析图;最后利用窗函数法设计出的FIR带通滤波器,对加噪后的信号进行滤波,对比滤波前和滤波后的时域和频域的仿真图对仿真结果进行分析。
经过两周的时间,在老师和同学的帮助下虽然完成了设计任务,但是还存在许多不足的地方,比如滤波后的语音信号还是有少许的杂音,没有做更多的滤波效果比较等。
在以后的工作和学习中会更加努力来完善设计任务。
参考文献
[1]丁玉美.数字信号处理[M].西安:
西安电子科技大学出版社,2003,3.
[2]朱冰莲.数字信号处理[M].北京:
电子工业出版社,2003,7.
[3]程佩青.数字信号处理教程(第3版).北京:
清华大学出版社,2007.
[4]陈亚勇等.MATLAB信号处理详解.北京:
人民邮电出版社,2001.
[5]万永革.数字信号处理的MATLAB实现.北京:
科学出版社,2007.
[6]王力宁.MATLAB与通信仿真.北京:
人民邮电出版社,1999.
[7]宋寿鹏.数字滤波器设计及工程应用.江苏:
江苏大学出版社,2007.
[8]普埃克著,方艳梅译.数字信号处理(第四版).北京:
电子工业出版社,2007.
[9]刘波.MATLAB信号处理[M].北京:
电子工业出版社,2006.
附录
%原始语音信号的时域与频域分析
[y,fs,nbits]=wavread('H:
\信号处理课设\新建文件夹\标准狼叫.wav');
y=y(:
1);
N=length(y);%求出语音信号的长度
Y=fft(y,N);%傅里叶变换
subplot(2,1,1);
t=(0:
N-1)/fs;
figure
(1);
plot(t,y);
axis([012-1.51.5]);
title('原始信号波形');
subplot(2,1,2);
plot(abs(Y));
title('原始信号频谱');
%对噪声信号及加噪信号进行时域与频域的谱分析
f=fs*(0:
1023)/2048;
Au=0.5;
d=[Au.*cos(2*pi*8500*t)]';%噪声为8.5kHz的余弦信号
d=d(:
1);
dd=fft(d,N);%傅里叶变换
figure
(2);
subplot(2,1,1);
plot(t,d);
axis([012-0.60.6])
title('噪声信号波形');
subplot(2,1,2);
plot(abs(dd));
title('噪声信号频谱');
x2=y+d;
S=fft(x2);
figure(3);
subplot(2,1,1);
plot(t,x2);
axis([012-22])
title('加噪信号波形');
subplot(2,1,2);
plot(abs(S));
title('加噪信号频谱');
%带通滤波器的设计
fp1=1200;
fp2=3000;
fs1=1000;
fs2=3200;
Fs=8000;%输入设计指标
wp1=fp1/(Fs/2);%计算归一化角频率
wp2=fp2/(Fs/2);
ws1=fs1/(Fs/2);
ws2=fs2/(Fs/2);
deltaw=wp1-ws1;%计算过渡带的宽度
N0=ceil(11/deltaw);%按布莱克曼窗设计算滤波器长度
N=N0+mod(N0+1,2)%为实现FIR类型I偶对称滤波器,应确保N为奇数
windows=blackman(N);%使用布莱克曼窗
wc1=(ws1+wp1)/2;%截止频率取通阻带频率的平均值
wc2=(ws2+wp2)/2;
b=fir1(N-1,[wc1,wc2],windows);%用fir1子函数求系统函数系数
[db,mag,pha,grd,w]=freqz_m(b,1);
n=0:
N-1;
dw=2/1000;
Rp=-(min(db(wp1/dw+1:
wp2/dw+1)))
ws0=[1:
ws1/dw+1,ws2/dw+1:
501];
As=-round(max(db(ws0)))
figure(4);
subplot(2,2,1)
stem(0:
N-1,b);
axis([0,N,1.1*min(b),1.1*max(b)]);
title('实际脉冲响应');
xlabel('n');
ylabel('h(n)');
subplot(2,2,2)
stem(n,windows);
axis([0,N,0,1.1]);
title('窗函数特性');
xlabel('n');
ylabel('wh(n)');
subplot(2,2,3)
plot(w/pi,db);
axis([0,1,-100,10]);
title('幅频响应');
xlabel('频率(×\pi)');
ylabel('H(e^(j\omega))');
set(gca,'XTickMode','manual','XTick',[0,wc1,wc2,1]);
set(gca,'XTickMode','manual','YTick',[-50,-20,-3,0]);
grid;
subplot(2,2,4);
plot(w/pi,pha);
axis([0,1,-4,4]);
title('相频响应');
xlabel('频率(×\pi)');ylabel('\phi(\omega)');
set(gca,'XTickMode','manual','XTick',[0,wc1,wc2,1]);
set(gca,'XTickMode','manual','YTick',[-pi,0,pi]);
grid;
%对加噪信号进行滤波
[y,fn,nbits]=wavread('H:
\信号处理课设\新建文件夹\标准狼叫.wav');
Y=fft(y);
y1=fftfilt(b,y);%用blabckman滤波器进行滤波
Y1=fft(y1);
n=0:
length(y)-1;
figure(5);
subplot(2,2,1);plot(y);title('未滤波语音波形');
subplot(2,2,2);plot(y1);title('滤波后语音波形');
subplot(2,2,3);plot(n,Y);title('未滤波语音频谱');
subplot(2,2,4);plot(n,Y1);title('滤波后语音频谱');
sound(y1,fn,nbits);%滤波后语音回放
致谢
对于本次课设,首先对关心、指导、帮助和鼓励过我的老师、同学们表示衷心的感谢,让我们共同分享完成课设的喜悦。
设计的完成不仅仅是我一个人的功劳,这离不开老师的悉心指导和同学的帮助鼓励。
在此感谢我的此次课程设计指导老师陈海燕老师,在一些关键性的问题上给了我详细的解答和指导,这使我能顺利地完成此次课设。
当然这也少不了我们这一小组的同学,搜集资料,热情帮助,让我能够有充足的资源和信息,来完成课程设计。
最后,祝愿所有的老师和同学在今后的工作、学习和生活中事事顺心、心想事成,谢谢!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 语音 信号 处理 FIR 滤波器 设计