唐山学院MATLAB合成信号语音信号数字滤波器设计.docx
- 文档编号:29151742
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:39
- 大小:768.15KB
唐山学院MATLAB合成信号语音信号数字滤波器设计.docx
《唐山学院MATLAB合成信号语音信号数字滤波器设计.docx》由会员分享,可在线阅读,更多相关《唐山学院MATLAB合成信号语音信号数字滤波器设计.docx(39页珍藏版)》请在冰豆网上搜索。
唐山学院MATLAB合成信号语音信号数字滤波器设计
Forpersonaluseonlyinstudyandresearch;notforcommercialuse
1引言
随着信息时代、数字世界的到来,数字信号处理已成为一门极其重要的学科和技术领域。
数字信号处理是将信号以数字方式表示并处理的理论和技术,处理的内容包括对数字信号的滤波、变换、频谱分析、检测、估计、压缩、识别等一系列的加工处理。
由于大规模集成电路以及数字计算机的飞速发展,加之从60年代末以来数字信号处理理论和技术的成熟和完善,用数字方法来处理信号,即数字信号处理,已逐渐取代模拟信号处理。
数字信号处理技术的应用领域非常广泛,主要包括语音信号处理,图像处理,语音电话(VoIP),移动通信,数字通信网络,数码相机,汽车电子,医疗,军事等领域。
其中语音信号处理是数字信号处理中一个很重要的领域。
语音信号是基于时间轴上的数字信号,这里我们主要讨论对语音信号进行频域上的分析。
在信号分析中,频域往往包含了更多的信息。
数字信号处理是利用计算机或专用处理设备,以数值计算的方法对信号进行采集、抽样、变换、综合、估值与识别等加工处理,借以达到提取信息和便于应用的目的。
它在语音、雷达、图像、系统控制、通信、航空航天、生物医学等众多领域都获得了极其广泛的应用。
具有灵活、精确、抗干扰强、设备尺寸小、造价低、速度快等优点。
滤波器设计在数字信号处理中占有极其重要的地位,FIR数字滤波器和IIR滤波器是滤波器设计的重要组成部分。
利用MATLAB信号处理工具箱可以快速有效地设计各种数字滤波器。
课题基于MATLAB有噪音语音信号处理的设计与实现,综合运用数字信号处理的理论知识对加噪声语音信号进行时域、频域分析和滤波。
通过理论推导得出相应结论,再利用MATLAB作为编程工具进行计算机实现。
在设计实现的过程中,使用窗函数法来设计FIR数字滤波器,用巴特沃斯、切比雪夫和双线性变法设计IIR数字滤波器,并利用MATLAB作为辅助工具完成设计中的计算与图形的绘制。
通过对对所设计滤波器的仿真和频率特性分析,可知利用MATLAB信号处理工具箱可以有效快捷地设计FIR和IIR数字滤波器,过程简单方便,结果的各项性能指标均达到指定要求。
数字滤波器是一种对数字信号进行处理的系统,数字滤波器完成数字信号滤波处理功能,其输入是一组数字量,其输出是经过变换的另一组数字量。
它通过一定的运算关系或电路形式来改变输入信号所包含的频率成分的相对比例或滤出某些频率成分,数字滤波器具有稳定性高、精度高、灵活性大等优点。
随着数字技术的发展,用数字技术实现滤波器的功能越来越受到人们的注意和广泛的应用。
2设计总体方案
2.1设计要求
1.设计低通、带通、高通数字滤波器;
2.可以对合成信号(含低频、中频、高频分量)、语音信号进行滤波;
3.通过GUI界面进行控制。
2.2设计总体方案
掌握用双线性变换法设计IIR数字滤波器及用窗函数法设计FIR数字滤波器的具体设计方法和原理,观察设计的数字滤波器的幅频特性,了解双线性变换法和窗函数法设计数字滤波器时的特点。
2.3设计内容
选择一个语音信号作为分析的对象,或录制一段各人自己的语音信号,对其进行频谱分析;利用MATLAB中的随机函数产生噪声加入到语音信号中,模仿语音信号被污染,并对其进行频谱分析;设计FIR和IIR数字滤波器,并对被噪声污染的语音信号进行滤波,分析滤波后信号的时域和频域特征,回放语音信号;最后,设计一个信号处理系统界面。
在所设计的系统界面上可以选择滤波器的类型。
2.4设计原理
数字滤波器是指输入、输出均为数字信号,通过数值运算处理改变输入信号所含频率成分的相对比例,或者滤除某些频率成分的数字器件或程序。
利用模拟滤波器来设计IIR数字滤波器是最常见的方法,其设计过程是按照技术要求设计模拟滤波器,得到其系统函数Ha(s),然后经过一定的变换,得到满足要求的数字滤波器的H(z)。
这种设计方法的优点是模拟滤波器的设计理论很成熟,有很多现成的公式、表格、图形和曲线可以直接使用,从而使IIR数字滤波器的设计变得很简单。
常用的IIR滤波器设计方法主要有以下几种:
1.以模拟滤波器函数为基础的变换法:
即先设计一满足指定条件的模拟滤波器H(s),再将该模拟滤波器转化为数字滤波器H(z)。
2.直接设计法:
在z平面内,根据零、极点对系统特性的影响,调整零极点位置得H(z)。
3.最优化设计法(计算机辅助设计):
在某种最小化误差准则下,建立差分方程系数Ak、Bk对理想特性的逼近方程,使用迭代方法解方程组得到最佳逼近系统。
由于此方法计算量大,需要借助于计算机进行设计。
在此主要介绍由模拟滤波器转换为数字滤波器的设计方法。
IIR滤波器的最大缺点是不容易实现线性相位,而在语音、图像、数据通信等系统普遍要求数字滤波器具有线性相位特性,FIR滤波器正是因为具有线性相位特性而获得广泛的应用。
另外,H(z)永远稳定,这也是FIR滤波器的另一个突出优点。
它的通频带在f1~f2之间。
它使信号中高于f1而低于f2的频率成分可以不受衰减地通过,而其它成分受到衰减。
不同类型(高通、低通和带通)滤波器对应的Wp和Ws值遵循以下规则:
a.高通滤波器:
Wp和Ws为一元矢量且Wp>Ws;
b.低通滤波器:
Wp和Ws为一元矢量且Wp c.带通滤波器: Wp和Ws为二元矢量且Wp 3语音信号的具体实现 3.1语音信号的采集 利用PC机上的声卡和WINDOWS操作系统可以进行数字信号的采集。 将话筒输入计算机的语音输入插口上,启动录音机。 按下录音按钮,接着对话筒说话“语音信号处理”,说完后停止录音,屏幕左侧将显示所录声音的长度。 点击放音按钮,可以实现所录音的重现。 以文件名“speech”保存入g: \MATLAB\work中。 可以看到,文件存储器的后缀默认为.wav,这是WINDOWS操作系统规定的声音文件存的标准。 3.2语音信号的时域分析 利用MATLAB中的“wavread”命令来读入(采集)语音信号,将它赋值给某一向量。 再对其进行采样,记住采样频率和采样点数。 下面介绍Wavread函数几种调用格式。 1.y=wavread(file) 功能说明: 读取file所规定的wav文件,返回采样值放在向量y中。 2.[y,fs,nbits]=wavread(file) 功能说明: 采样值放在向量y中,fs表示采样频率(hz),nbits表示采样位数。 3.y=wavread(file,N) 功能说明: 读取钱N点的采样值放在向量y中。 4.y=wavread(file,[N1,N2]) 功能说明: 读取从N1到N2点的采样值放在向量y中。 对语音信号OriSound.wav进行采样。 其程序如下: [y,fs,nbits]=wavered(‘I: \1.wav’);%把语音信号加载入Matlab仿真软件平台中 然后,画出语音信号的时域波形,再对语音信号进行频谱分析。 MATLAB提供了快速傅里叶变换算法FFT计算DFT的函数fft,其调用格式如下: Xk=fft(y,N) 参数y为被变换的时域序列向量,N是DFT变换区间长度,当N大于y的长度时,fft函数自动在y后面补零。 ,当N小于y的长度时,fft函数计算y的前N个元素,忽略其后面的元素。 在本次设计中,我们利用fft对语音信号进行快速傅里叶变换,就可以得到信号的频谱特性。 其程序如下: ound(y,fs,nbits);%回放语音信号 N=length(y);%求出语音信号的长度 Y=fft([y,fs,nbits]=wavread('I: \1.wav'); sy,N);%傅里叶变换 Axes(handles.axes1); plot(y);title('原始信号波形'); plot(abs(Y)); title('原始信号频谱'); 程序结果如下图3.1: 图3.1原始信号波形及频谱 3.3语音信号加噪与频谱分析 MATLAB中产生高斯白噪声非常方便,有两个产生高斯白噪声的两个函数。 我们可以直接应用两个函数: 一个是WGN,另一个是AWGN。 WGN用于产生高斯白噪声,AWGN则用于在某一信号中加入高斯白噪声。 也可直接用randn函数产生高斯分布序列。 在本次课程设计中,我们是利用MATLAB中的随机函数(rand或randn)产生噪声加入到语音信号中,模仿语音信号被污染,并对其频谱分析。 Randn函数有两种基本调用格式: Randn(n)和Randn(m,n),前者产生n×n服从标准高斯分布的随机数矩阵,后者产生m×n的随机数矩阵。 在这里,我们选用Randn(m,n)函数。 语音信号添加噪声及其频谱分析的主要程序如下: [y,fs,nbits]=wavread('E: \ppp.wav'); sound(y,fs,nbits);%回放语音信号 N=length(y);%求出语音信号的长度 Y=fft(y,N);%傅里叶变换 subplot(2,1,1); plot(y);title('原始信号波形'); subplot(2,1,2); plot(abs(Y)); title('原始信号频谱'); 程序结果如下图3.2所示: 图3.2 语音信号频谱分析 3.4设计FIR和IIR数字滤波器 IIR滤波器和FIR滤波器的设计方法完全不同。 IIR滤波器设计方法有间接法和直接法,间接法是借助于模拟滤波器的设计方法进行的。 其设计步骤是: 先设计过渡模拟滤波器得到系统函数H(s),然后将H(s)按某种方法转换成数字滤波器的系统函数H(z)。 FIR滤波器比鞥采用间接法,常用的方法有窗函数法、频率采样发和切比雪夫等波纹逼近法。 对于线性相位滤波器,经常采用FIR滤波器。 对于数字高通、带通滤波器的设计,通用方法为双线性变换法。 可以借助于模拟滤波器的频率转换设计一个所需类型的过渡模拟滤波器, (1)过双线性变换将其转换策划那个所需的数字滤波器。 具体设计步骤如下: 1.确定所需类型数字滤波器的技术指标。 2.将所需类型数字滤波器的边界频率转换成相应的模拟滤波器的边界频率,转换公式为Ω=2/Ttan(0.5ω) 3.将相应类型的模拟滤波器技术指标转换成模拟低通滤波器技术指标。 4.设计模拟低通滤波器。 5.通过频率变换将模拟低通转换成相应类型的过渡模拟滤波器。 6.采用双线性变换法将相应类型的过渡模拟滤波器转换成所需类型的数字滤波器。 脉冲响应不变法的主要缺点是会产生频谱混叠现象,使数字滤波器的频响偏离模拟滤波器的频响特性。 为了克服之一缺点,可以采用双线性变换法。 利用模拟滤波器设计IIR数字低通滤波器的步骤: 1.确定数字低通滤波器的技术指标: 通带边界频率、通带最大衰减,阻带截止频率、阻带最小衰减。 2.将数字低通滤波器的技术指标转换成相应的模拟低通滤波器的技术指标。 3.按照模拟低通滤波器的技术指标设计及过渡模拟低通滤波器。 4.用双线性变换法,模拟滤波器系统函数转换成数字低通滤波器系统函数。 (2)如前所述,IIR滤波器和FIR滤波器的设计方法有很大的区别。 下面我们着重介绍用窗函数法设计FIR滤波器的步骤。 如下: 1.根据对阻带衰减及过渡带的指标要求,选择串窗数类型(矩形窗、三角窗、汉宁窗、哈明窗、凯塞窗等),并估计窗口长度N。 先按照阻带衰减选择窗函数类型。 原则是在保证阻带衰减满足要求的情况下,尽量选择主瓣的窗函数。 2.构造希望逼近的频率响应函数。 3.计算h(n).。 4.加窗得到设计结果。 我们根据语音信号的特点给出有关滤波器的技术指标: ①低通滤波器的性能指标: fp=1000Hz,fs=1200Hz,As=100db,Ap=1dB ②高通滤波器的性能指标: fp=4000Hz,fs=3500Hz,As=100dB,Ap=1dB; ③带通滤波器的性能指标: fp1=1200Hz,fp2=3000hZ,fs1=1000Hz,fs2=3200Hz,As=100dB,Ap=1dB 在Matlab中,可以利用函数fir1设计FIR滤波器,利用函数butter,cheby1和ellip设计IIR滤波器,利用Matlab中的函数freqz画出各步步器的频率响应。 hn=fir1(M,wc,window),可以指定窗函数向量window。 如果缺省window参数,则fir1默认为哈明窗。 其中可选的窗函数有RectangularBarlrttHammingHannBlackman窗,其相应的都有实现函数。 MATLAB信号处理工具箱函数buttpbuttorbutter是巴特沃斯滤波器设计函数,其有5种调用格式,本课程设计中用到的是[N,wc]=butter(N,wc,Rp,As,’s’),该格式用于计算巴特沃斯模拟滤波器的阶数N和3dB截止频率wc。 MATLAB信号处理工具箱函数cheblap,cheblord和cheeby1是切比雪夫I型滤波器设计函数。 我们用到的是cheeby1函数,其调用格式如下: [B,A]=cheby1(N,Rp,wpo,’ftypr’) [B,A]=cheby1(N,Rp,wpo,’ftypr’,’s’) 函数butter,cheby1和ellip设计IIR滤波器时都是默认的双线性变换法,所以在设计滤波器时只需要代入相应的实现函数即可。 下面我们将给出FIR和IIR数字滤波器的主要程序。 %=========================IIR低通滤波器======================= Ft=4000; Fp=1000; Fs=2000; wp=2*pi*Fp/Ft; ws=2*pi*Fs/Ft; fp=2*Fp*tan(wp/2); fs=2*Fs*tan(wp/2); [n11,wn11]=buttord(wp,ws,1,50,'s');%求低通滤波器的阶数和截止频率 [b11,a11]=butter(n11,wn11,'s');%求S域的频率响应的参数 [num11,den11]=bilinear(b11,a11,0.5);%双线性变换实现S域到Z域的变换 [h,w]=freqz(num11,den11);%根据参数求出频率响应 plot(w*8000*0.5/pi,abs(h)); legend('用butter设计'); 利用上述程序用巴特沃兹设计的低通滤波器如下图3.3所示: 图3.3 IIR低通滤波器 %======================IIR带通========================== 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域的频率响应参数 [num2,den2]=lp2bp(b12,a12,sqrt(wp1*wp2),bw);%将S域低通参数转为带通的 [num12,den12]=bilinear(num2,den2,0.5);%双线性变换实现S域到Z域的转换 [h,w]=freqz(num12,den12);%根据参数求出频率响应 plot(w*8000*0.5/pi,abs(h)); axis([0400001.5]); legend('用butter设计'); 利用上述程序用巴特沃兹设计的带通滤波器如下图3.4所示: 图3.4 IIR带通滤波器 %======================IIR高通========================== Ft=8000; Fp=4000; Fs=3500; wp1=tan(pi*Fp/Ft);%高通到低通滤波器参数转换 ws1=tan(pi*Fs/Ft); wp=1; ws=wp1*wp/ws1; [n13,wn13]=cheb1ord(wp,ws,1,50,'s');%求模拟的低通滤波器阶数和截止频率 [b13,a13]=cheby1(n13,1,wn13,'s');%求S域的频率响应的参数 [num,den]=lp2hp(b13,a13,wn13);%将S域低通参数转为高通的 [num13,den13]=bilinear(num,den,0.5);%利用双线性变换实现S域到Z域转换 [h,w]=freqz(num13,den13); plot(w*21000*0.5/pi,abs(h)); title('IIR高通滤波器'); legend('用cheby1设计'); 利用上述程序用切比雪夫设计的高通滤波器如下图3.5所示: 图3.5 IIR高通滤波器 3.5用滤波器对加噪语音信号进行滤波 用自己设计的各滤波器分别对加噪的语音信号进行滤波,在Matlab中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。 函数fftfilt用的是重叠相加法实现线性卷积的计算。 调用格式为: y=fftfilter(h,x,M)。 其中,h是系统单位冲击响应向量;x是输入序列向量;y是系统的输出序列向量;M是有用户选择的输入序列的分段长度,缺省时,默认的输入向量的重长度M=512。 函数filter的调用格式: yn=filter(B,A.xn),它是按照直线型结构实现对xn的滤波。 其中xn是输入信号向量,yn输出信号向量。 3.6比较滤波前后语音信号的波形及频谱 %======================IIR低通滤波器========================== [y,fs,nbits]=wavread('D: /1.wav'); n=length(y);%求出语音信号的长度 s=y; S=fft(s);%傅里叶变换 z11=filter(num11,den11,s); sound(z11); m11=fft(z11);%求滤波后的信号 subplot(2,2,1); plot(abs(S),'g'); title('滤波前信号的频谱'); grid; subplot(2,2,2); plot(abs(m11),'r'); title('滤波后信号的频谱'); grid; subplot(2,2,3); plot(s); title('滤波前信号的波形'); grid; subplot(2,2,4); 上面设计出的三种滤波器均可满足设计指标: 在f<3000Hzz的通带内最大衰减 ,在f>0Hz的阻带内最小衰减 。 比较三种滤波器的幅频特性可以看出巴特沃斯滤波器在阻带内有更好的衰减特性,故IIR低通滤波器选择巴特沃斯型滤波器。 在GUI界面的显示波形如下图3.6所示: 图3.6 IIR低通语音信号频谱波形图 %======================IIR带通滤波器======================= [y,fs,nbits]=wavread('D: /1.wav'); n=length(y);%求出语音信号的长度 s=y; S=fft(s);%傅里叶变换 z12=filter(num12,den12,s); sound(z12); m12=fft(z12);%求滤波后的信号 subplot(2,2,1); plot(abs(S),'g'); title('滤波前信号的频谱'); subplot(2,2,2); plot(abs(m12),'r'); title('滤波后信号的频谱'); subplot(2,2,3); plot(s); title('滤波前信号的波形'); subplot(2,2,4); plot(z12); title('滤波后的信号波形'); 上面设计出的四种滤波器均可满足设计指标: 在 的通带内最大衰减 ,在 的阻带内最小衰减, 。 比较四种滤波器的幅频特性可以看出巴特沃斯滤波器在阻带内有更好的衰减特性,故IIR带通滤波器选择巴特沃斯型滤波器。 下图3.7是IIR数字滤波器的语音信号的频谱波形图: 图3.7 IIR带通语音信号频谱波形图 %======================IIR高通滤波器======================= [y,fs,nbits]=wavread('D: /1.wav'); n=length(y);%求出语音信号的长度 s=y; S=fft(s);%傅里叶变换 z13=filter(num13,den13,s); sound(z13); m13=fft(z13);%求滤波后的信号 subplot(2,2,1); plot(abs(S),'g'); title('滤波前信号的频谱'); subplot(2,2,2); plot(abs(m13),'r'); title('滤波后信号的频谱'); subplot(2,2,3); plot(s); title('滤波前信号的波形'); subplot(2,2,4); plot(z13); title('滤波后的信号波形'); 上面设计出的三种滤波器均可满足设计指标: 在f<8000的阻带内最小衰减 ,在f>4800的通带内最大衰减 。 比较三种滤波器的幅频特性可以看出巴特沃斯滤波器在阻带内有更好的衰减特性,故IIR高通滤波器选择巴特沃斯型滤波器。 如下图3.8所示高通IIR语音信号频谱波形图: 图3.8 高通IIR语音信号频谱波形图 4合成信号的具体实现 4.1合成信号的产生原理 抑制载波单频调幅信号的数学表达式为: 如式2.1: 其中, 称为载波, 为载波频率, 称为单频调制信号, 为调制正弦波信号频率,且满足 > 。 由(2.1)式可见,所谓抑制载波单频调制信号,就是两个正弦信号相乘,它有2个频率成分: 和频 + ,差频 - ,这两个频率成分关于载波频率 对称。 所以,1路抑制载波单频调幅信号的频谱图是关于载波频率 对称的两根谱线。 显然,当调制频率 和(或)载波频率 不同时,可以得到包含不同频率成分的单频调幅信号,将几路不同频率成分的单频调幅信号相加后形成混合信号。 4.2调试分析 利用MATLAB编写混合信号的函数并运行如下图4.1所示: 从波形中可以看出,已经将三路不同成分的频率混合到一起,接下来的就是要设计三个滤波器将其滤波开来,得到相对应的频率成分。 图4.1混合信号时域和幅频特性曲线图 设定可以分离st中三路抑制载波单频调幅信号的三个滤波器设计低通滤波器、带通滤波器和高通滤波器的通带截止频率和阻带截止频率;假定要求滤波器的通带最大衰减为1dB,阻带最小衰减为100dB,编程调用MATLAB滤波器设计函数分别设计这三个数字滤波器,并绘图显示其幅频特性曲线。 低通,高通,带通的滤波器幅频特性曲。 如下4.2,4.3,4.4所示:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 唐山 学院 MATLAB 合成 信号 语音 数字滤波器 设计