基于Matlab的有噪声语音信号处理共36页.docx
《基于Matlab的有噪声语音信号处理共36页.docx》由会员分享,可在线阅读,更多相关《基于Matlab的有噪声语音信号处理共36页.docx(31页珍藏版)》请在冰豆网上搜索。
![基于Matlab的有噪声语音信号处理共36页.docx](https://file1.bdocx.com/fileroot1/2023-1/31/4e5c4841-2b14-4972-9d6d-70cc0dae8fe4/4e5c4841-2b14-4972-9d6d-70cc0dae8fe41.gif)
基于Matlab的有噪声语音信号处理共36页
题目(tímù):
基于(jīyú)Matlab的有噪声(zàoshēng)语音信号处理
摘要(zhāiyào)
滤波器设计在数字(shùzì)信号处理中占有极其重要的地位,FIR数字(shùzì)滤波器和IIR滤波器是滤波器设计的重要(zhòngyào)组成部分。
利用MATLAB信号处理工具箱可以快速有效地设计各种数字滤波器。
课题基于MATLAB有噪音语音信号处理的设计与实现,综合运用数字信号处理的理论知识对加噪声语音信号进行时域、频域分析和滤波。
通过理论推导得出相应结论,再利用MATLAB作为编程工具进行计算机实现。
在设计实现的过程中,使用窗函数法来设计FIR数字滤波器,用巴特沃斯、切比雪夫和双线性变法设计IIR数字滤波器,并利用MATLAB作为辅助工具完成设计中的计算与图形的绘制。
通过对所设计滤波器的仿真和频率特性分析,可知利用MATLAB信号处理工具箱可以有效快捷地设计FIR和IIR数字滤波器,过程简单方便,结果的各项性能指标均达到指定要求。
关键词:
数字滤波器MATLAB窗函数法巴特沃斯切比雪夫双线性变换
目录(mùlù)
1、绪论(xùlùn)················································4
2、作业内容(nèiróng)与要求······································5
3、作业(zuòyè)设计的具体实现··································6
3.1语音信号的采集···································6
3.2语音信号的时频分析·······························6
3.3语音信号加噪与频谱分析···························8
3.4设计FIR和IIR数字滤波器··························9
3.5用滤波器对加噪语音信号进行滤波··················20
3.6比较滤波前后语音信号的波形及频谱················21
3.7回放语音信号····································31
3.8设计GUI界面····································31
4、队员贡献及民主评价·································34
5、小结···············································34
6、致谢···············································35
1、绪论(xùlùn)
数字信号处理是利用计算机或专用处理设备,以数值计算的方法对信号进行采集、抽样(chōuyànɡ)、变换、综合、估值与识别等加工处理,借以达到提取信息和便于应用的目的。
它在语音、雷达、图像、系统控制、通信、航空航天、生物医学等众多领域都获得了极其广泛的应用。
具有灵活、精确、抗干扰强、设备尺寸小、造价低、速度快等优点。
数字(shùzì)滤波器, 是数字信号处理中及其重要的一部分。
随着信息时代和数字技术的发展,受到人们越来越多的重视。
数字滤波器可以通过数值运算实现滤波,所以数字滤波器处理精度高、稳定、体积小、重量轻、灵活不存在阻抗匹配问题,可以实现模拟滤波器无法实现的特殊(tèshū)功能。
数字滤波器种类很多,根据其实现的网络结构或者其冲激响应函数的时域特性,可分为两种,即有限冲激响应( FIR,Finite Impulse Response)滤波器和无限冲激响应( IIR,Infinite Impulse Response)滤波器。
FIR滤波器结构上主要是非递归结构,没有输出到输入的反馈,系统函数H (z)在处收敛,极点全部在z = 0处(因果系统),因而只能用较高的阶数达到高的选择性。
FIR数字滤波器的幅频特性精度较之于IIR数字滤波器低,但是线性相位,就是不同频率分量的信号经过fir滤波器后他们的时间差不变,这是很好的性质。
FIR数字滤波器是有限的单位响应也有利于对数字信号的处理,便于编程,用于计算的时延也小,这对实时的信号处理很重要。
FIR滤波器因具有系统稳定,易实现相位控制,允许设计多通带(或多阻带)滤波器等优点收到人们的青睐。
IIR滤波器采用(cǎiyòng)递归型结构,即结构上带有反馈环路。
IIR滤波器运算(yùnsuàn)结构通常由延时、乘以系数和相加等基本运算组成,可以组合成直接型、正准型、级联型、并联型四种结构形式,都具有反馈回路。
同时,IIR数字滤波器在设计(shèjì)上可以借助成熟的模拟滤波器的成果,如巴特沃斯、契比雪夫和椭圆滤波器等,有现成的设计数据或图表可查,在设计一个IIR数字滤波器时,我们根据指标先写出模拟滤波器的公式(gōngshì),然后通过一定的变换,将模拟滤波器的公式转换成数字滤波器的公式。
滤波器的设计可以通过软件或设计专用的硬件两种方式来实现。
随着MATLAB软件及信号处理工具箱的不断完善,MATLAB很快成为应用学科等领域不可或缺的基础软件。
它可以快速有效地实现数字滤波器的设计、分析和仿真,极大地减轻了工作量,有利于滤波器设计的最优化。
2、作业内容与要求
选择一个语音信号作为分析的对象,或录制一段各人自己的语音信号,对其进行频谱分析;利用MATLAB中的随机函数产生噪声加入到语音信号中,模仿语音信号被污染,并对其进行频谱分析;设计FIR和IIR数字滤波器,并对被噪声污染的语音信号进行滤波,分析滤波后信号的时域和频域特征,回放语音信号。
最后,设计一个信号处理系统界面。
3作业设计的具体(jùtǐ)实现
3.1语音信号(xìnhào)的采集
利用(lìyòng)PC机上的声卡和WINDOWS操作系统可以(kěyǐ)进行数字信号的采集。
将话筒输入计算机ide语音输入到插口上,启动录音机。
按下录音按钮,接着将话筒对着PC的外放,记录音乐播放器正在播放的音乐,记录一段时间后停止录音。
以文件名“speech”保存在一个文件中。
可以看但文件后缀名为.wav,这是WINDOWS操作系统规定的声音文件存的标准。
3.2语音信号的时频分析
利用MATLAB中的“wavread”命令来读入(采集)语音信号,将它赋值给某一向量。
再对其进行采样,记住采样频率和采样点数。
下面介绍wavread 函数几种调用格式。
(1)y=wavread(file)
功能说明:
读取file所规定的wav文件,返回采样值放在向量y中。
(2)[y,fs,nbits]=wavread(file)
功能说明:
采样(cǎiyànɡ)值放在向量y中,fs表示采样(cǎiyànɡ)频率(hz),nbits表示(biǎoshì)采样位数。
接下来,对语音(yǔyīn)信号speech.wav进行采样。
其程序如下:
[y,fs,nbits]=wavered (‘speech’);把语音信号加载入Matlab 仿真软件平台中 然后,画出语音信号的时域波形,再对语音信号进行频谱分析。
MATLAB提供了快速傅里叶变换算法FFT计算DFT的函数fft,其调用格式如下:
Xk=fft(xn,N) ;参数xn为被变换的时域序列向量,N是DFT变换区间长度,当N大于xn的长度时,fft函数自动在xn后面补零。
当N小于xn的长度时,fft函数计算xn的前N个元素,忽略其后面的元素。
在本次设计中,我们利用fft对语音信号进行快速傅里叶变换,就可以得到信号的频谱特性。
其程序如下:
[y,fs,nbits]=wavread('F:
\speech.wav');
N=length(y);%求出语音信号长度
Y=fft(y,N);%傅里叶变换
figure;
subplot(2,1,1);
plot(y);title('原始信号波形');
subplot(2,1,2);
plot(abs(Y));
title('原始信号频谱');
axes1('position',[1111]);
程序(chéngxù)结果如下图:
3.3语音(yǔyīn)信号加噪与频谱分析
在MATLAB中产生高斯白噪声非常方便,我们(wǒmen)可以直接应用两个函数:
一个是WGN,另一个(yīɡè)是AWGN。
WGN用于产生高斯白噪声,AWGN则用于在某一信号中加入高斯白噪声。
也可直接用randn函数产生高斯分布序列。
在本次设计中,我们是利用MATLAB中的随机函数(rand或randn)产生噪声加入到语音信号中,模仿语音信号被污染,并对其频谱分析。
Randn函数有两种基本调用格式:
Randn(n)和Randn(m,n),前者产生n×n服从标准高斯分布的随机数矩阵,后者产生m×n的随机数矩阵。
在这里,我们选用Randn(m,n)函数。
语音信号添加噪声及其频谱分析的主要程序如下:
[y,fs,nbits]=wavread('speech');%窗函数(hánshù)带通滤波
n=length(y);%求出语音信号(xìnhào)的长度
noise=0.01*randn(n,2);%随机函数(hánshù)产生噪声
s=y+noise;
sound(s);
figure;
subplot(2,1,1);
plot(s);title('加噪语音(yǔyīn)信号的时域波形');
S=fft(s);
subplot(2,1,2);
plot(abs(s));
title('加噪语音信号的频域波形');
程序结果如下图:
3.4设计(shèjì)FIR和IIR数字(shùzì)滤波器
3.4.1FIR数字滤波器的设计(shèjì)与实现
FIR:
有限(yǒuxiàn)脉冲响应滤波器。
有限说明其脉冲响应是有限的。
与IIR相比,它具有线性相位、容易设计的优点。
这也就说明,IIR滤波器具有相位不线性,不容易设计的缺点。
而另一方面,IIR却拥有FIR所不具有的缺点,那就是设计同样参数的滤波器,FIR比IIR需要更多的参数。
这也就说明,要增加DSP的计算量。
DSP需要更多的计算时间,对DSP的实时性有影响。
FIR滤波器的设计比较简单,就是要设计一个数字滤波器去逼近一个理想的低通滤波器。
通常这个理想的低通滤波器在频域上是一个矩形窗。
也就是把这个时域采样序列去乘一个窗函数,就把这个无限的时域采样序列截成了有限个序列值。
但是加窗后对此采样序列的频域也产生了影响:
此时的频域便不在是一个理想的矩形窗,而是成了一个有过渡带,阻带有波动的低通滤波器。
通常根据所加的窗函数的不同,对采样信号加窗后,在频域所得的低通滤波器的阻带衰减也不同。
通常我们就是根据此阻带衰减去选择一个合适的窗函数。
如矩形窗、汉宁窗、汉明窗、BLACKMAN窗、凯撒窗等。
面我们着重介绍用窗函数法设计FIR滤波器的步骤。
如下:
(1)根据(gēnjù)对阻带衰减及过渡带的指标要求,选择串窗数类型(矩形窗、三角窗、汉宁窗、哈明窗、凯塞窗等),并估计窗口长度N。
先按照(ànzhào)阻带衰减选择窗函数类型。
原则是在保证阻带衰减满足要求的情况下,尽量选择主瓣的窗函数。
(2)构造希望(xīwàng)逼近的频率响应函数。
(3)计算(jìsuàn)h(n).。
(4)加窗得到设计结果。
接下来,我们根据语音信号的特点给出有关滤波器的技术指标:
低通滤波器的性能指标:
fp=1000Hz,fc=1200Hz,As=50db ,Ap=1dB
高通滤波器的性能指标:
fp=3500Hz,fc=4000Hz,As=50dB,Ap=1dB
带通滤波器的性能指标:
fp1=1200Hz,fp2=4000Hz,fc1=1000Hz,fc2=3200,As=100dB,Ap=1dB
在Matlab中,可以利用函数fir1设计FIR滤波器,利用Matlab中的函数freqz画出各步步器的频率响应。
MATLAB信号处理工具箱函数cheblap,cheblord和cheeby1是切比雪夫I型滤波器设计函数。
我们用到的是cheeby1函数,其调用格式如下:
[B,A]=cheby1(N,Rp,wpo,’ftypr’) [B,A]=cheby1(N,Rp,wpo,’ftypr’,’s’)
下面我们将给出设计FIR数字滤波器的主要程序和图像
%===================FIR低通滤波器==========================
Ft=8000;
Fp=1000;
Fs=1200;
wp=2*Fp/Ft;
ws=2*Fs/Ft;
rp=1;
rs=50;
p=1-10.^(-rp/20);
s=10.^(-rs/20);
fpts=[wpws];
mag=[10];
dev=[ps];
[n21,wn21,beta,ftype]=kaiserord(fpts,mag,dev);
b21=fir1(n21,wn21,kaiser(n21+1,beta));
[h,w]=freqz(b21,1);
figure;
plot(w*8000*0.5/pi,abs(h));
title('FIR低通滤波器','fontweight','bold');
%===================FIR高通滤波器==========================
Ft=8001;
Fp=4000;
Fs=3500;
wp=2*Fp/Ft;
ws=2*Fs/Ft;
rp=1;
rs=50;
p=1-10.^(-rp/20);
s=10.^(-rs/20);
fpts=[wswp];
mag=[01];
dev=[ps];
[n23,wn23,beta,ftype]=kaiserord(fpts,mag,dev);%kaiserord求阶数截止频率
b23=fir1(n23,wn23,'high',Kaiser(n23+1,beta));%由firl设计(shèjì)滤波器
[h,w]=freqz(b23,1);
figure;
plot(w*12000*0.5/pi,abs(h));
title('FIR高通滤波器');
axis([2500550001.2]);
%===================FIR带通滤波器==========================
Fp1=1200;
Fp2=3000;
Fs1=1000;
Fs2=3200;
Ft=8000;
wp1=tan(pi*Fp1/Ft);
wp2=tan(pi*Fp2/Ft);
ws1=tan(pi*Fs1/Ft);
ws2=tan(pi*Fs2/Ft);
w=wp1*wp2/ws2;
bw=wp2-wp1;
wp=1;
ws=(wp1*wp2-w.^2)/(bw*w);
[n22,wn22]=buttord(wp,ws,1,50,'s');%求低通滤波器阶数和截止频率
[b22,a22]=butter(n22,wn22,'s');%求S域的频率响应(pínlǜxiǎnɡyīnɡ)参数
[num2,den2]=lp2bp(b22,a22,sqrt(wp1*wp*2),bw);%将S域低通参数(cānshù)转为带通的
[num22,den22]=bilinear(num2,den2,0.5);%双线性变换实现(shíxiàn)S域到Z域的转换
[h,w]=freqz(num22,den22);%根据(gēnjù)参数求出频率响应
figure;
plot(w*8000*0.5/pi,abs(h));
axis([0400001.5]);
legend('用butter设计');
3.4.2IIR数字(shùzì)滤波器的设计与实现
对于数字高通、带通滤波器的设计,通用方法为双线性变换法。
可以借助于模拟滤波器的频率转换设计一个所需类型的过渡模拟滤波器,再经过双线性变换将其转换策划那个所需的数字滤波器。
具体设计步骤(bùzhòu)如下:
(1)确定(quèdìng)所需类型数字滤波器的技术指标。
(2)将所需类型数字(shùzì)滤波器的边界频率转换成相应的模拟滤波器的边界频率,转换公式为Ω=2/T tan(0.5ω)
(3)将相应类型的模拟滤波器技术指标转换成模拟低通滤波器技术指标。
(4)设计模拟低通滤波器。
(5)通过频率变换将模拟低通转换成相应类型的过渡模拟滤波器。
(6)采用双线性变换法将相应类型的过渡模拟滤波器转换成所需类型的数字滤波器。
我们知道,脉冲响应不变法的主要缺点是会产生频谱混叠现象,使数字滤波器的频响偏离模拟滤波器的频响特性。
为了克服之一缺点,可以采用双线性变换法。
下面我们总结一下利用模拟滤波器设计IIR数字低通滤波器的步骤:
(1)确定数字低通滤波器的技术指标:
通带边界频率、通带最大衰减,阻带截止频率、阻带最小衰减。
(2)将数字(shùzì)低通滤波器的技术指标转换成相应的模拟低通滤波器的技术指标。
(3)按照模拟(mónǐ)低通滤波器的技术指标设计及过渡模拟低通滤波器。
(4)用双线性变换法,模拟滤波器系统(xìtǒng)函数转换成数字低通滤波器系统函数。
MATLAB信号处理(xìnhàochǔlǐ)工具箱函数cheblap,cheblord和cheeby1是切比雪夫I型滤波器设计函数。
我们用到的是cheeby1函数,其调用格式如下:
[B,A]=cheby1(N,Rp,wpo,’ftypr’) [B,A]=cheby1(N,Rp,wpo,’ftypr’,’s’)
函数butter,cheby1和ellip设计IIR滤波器时都是默认的双线性变换法,所以在设计滤波器时只需要代入相应的实现函数即可。
下面我们将给出IIR数字滤波器的主要程序。
%===================IIR低通滤波器==========================
Fp=1000;
Fs=1200;
Ft=8000;
wp=2*pi*Fp/Ft;
ws=2*pi*Fs/Ft;
fp=2*Ft*tan(wp/2);
fs=2*Fs*tan(wp/2);
[n11,wn11]=buttord(wp,ws,1,50,'s');
[b11,a11]=butter(n11,wn11,'s');
[num11,den11]=bilinear(b11,a11,0.5);
[h,w]=freqz(num11,den11);
figure;
plot(w*8000*0.5/pi,abs(h));
legend('用butter设计(shèjì)');
%===================IIR高通滤波器==========================
Ft=8000;
Fp=4000;
Fs=3500;
w1=tan(pi*Fp/Ft);
ws1=tan(pi*Fs/Ft);
wp=1;
ws=w1*wp/ws1;
[n13,wn13]=cheb1ord(wp,ws,1,50,'s');%求模拟(mónǐ)的低通滤波器阶数和截止频率
[b13,a13]=cheby1(n13,1,wn13,'s');%求S域的频率响应(pínlǜxiǎnɡyīnɡ)是参数
[num,den]=lp2hp(b13,a13,wn13);
[num13,den13]=bilinear(num,den,0.5);%利用双线性变换实现(shíxiàn)S域到Z域转换
[h,w]=freqz(num13,den13);
figure;
plot(w*21000*0.5/pi,abs(h));
title('IIR高通滤波器');
legend('用cheby1设计(shèjì)');
%===================IIR带通滤波器==========================
Fp1=1200;
Fp2=3000;
Fs1=1000;
Fs2=3200;
Ft=8000;
wp1=tan(pi*Fp1/Ft);
wp2=tan(pi*Fp2/Ft);
ws1=tan(pi*Fs1/Ft);
ws2=tan(pi*Fs2/Ft);
w=wp1*wp2/ws2;
bw=wp2-wp1;
wp=1;
ws=(wp1*wp2-w.^2)/(bw*w);
[n12,wn12]=buttord(wp,ws,1,50,'s');%求低通滤波器阶数和截止频率
[b12,a12]=butter(n12,wn12,'s');%求S域的频率响应(pínlǜxiǎnɡyīnɡ)参数
[num2,den2]=lp2bp(b12,a12,sqrt(wp1*wp*2),bw);%将S域低通参数(cānshù)转为带通的
[num12,den12]=bilinear(num2,den2,0.5);%双线性变换实现(shíxiàn)S域到Z域的转换
[h,w]=freqz(num12,den12);%根据(gēnjù)参数求出频率响应
figure;
plot(w*8000*0.5/pi,abs(h));
axis([0400001.5]);
legend('用butter设计');
3.5用滤波器对加噪语音(yǔyīn)信号进行滤波
用自己(zìjǐ)设计的各滤波器分别对加噪的语音信号进行滤波,在Matlab中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。
函数fftfilt用的是重叠相加法实现(shíxiàn)线性卷积的计算。
调用格式为:
y=fftfilter(h,x,M).其中,h是系统单位冲击响应(xiǎngyìng)向量;X是输入序列向量;y是系统的输出序列向量;M是由用户的选择的输入序列的分段长度,缺省时,默认的输入向量的重常度M=512.
函数filter的调用格式:
yn=filter(B,A.xn),它是按照直线型结构实现对xn的滤波。
其中xn是输入(shūrù)信号向量,yn输出信号向量。
3.6比较滤波(lǜbō)前后语音信号的波形及频谱
主要程序及运行(yùnxíng)结果如下:
%==============双线性变换法低通滤波器======================
[y,fs,nbits]=wavread('speech');%双线性低通滤波器
n=length(y);%求出语音信号(xìnhào)长度
noise=0.01*randn(n,2);%随机函数产生噪声
s=y+noise;%语音信号加入噪声
S=fft(s);%傅里叶变换
Fp=1000;
Fs=1200;
Ft=8000;
wp=2*pi*Fp/Ft;
ws=2*pi*Fs/Ft;
fp=2*Ft*tan(wp/2);
fs=2*Fs*tan(wp/2);
[n11,wn11]=buttord(wp,ws,1,50,'s');
[b11,a11]=butter(n11,wn11,'s');