目录
第一章 设计内容及目的. 1
1.1设计内容. 1
1.2设计目的. 1
第二章 设计原理. 2
第三章 语音信号的采集与处理. 4
3.1语音信号的采集. 4
3.2 语音信号的时频分析. 4
3.3 语音信号加噪与频谱分析. 5
第四章 数字滤波器的设计. 7
4.1 FIR滤波器的窗函数设计法. 7
4.2 IIR数字滤波器窗函数设计法. 9
第五章 信号处理. 11
5.1 用滤波器对加噪语音信号进行滤波. 11
5.2比较滤波前后语音信号的波形. 11
第六章 心得体会. 14
参考文献:. 15
附录. 1
第一章 设计内容及目的
1.1设计内容
利用MATLAB对语音信号进行数字信号处理和分析,要求学生采集语音信号后,在MATLAB软件平台进行频谱分析;并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号。
本设计要求自己录制一段自己的语音后,在MATLAB软件中采集语音信号、回放语音信号并画出语音信号的时域波形和频谱图。再在Matlab中分别设计不同形式的FIR数字滤波器。之后对采集的语音信号经过不同的滤波器(低通、高通、带通)后,观察不同的波形,并进行时域和频谱的分析。
对比处理前后的时域图和频谱图,分析各种滤波器对于语音信号的影响。最后分别收听进行滤波后的语音信号效果,做到了解在怎么样的情况下该用怎么样的滤波器。首先录制好一段自己的语音。用Matlab分别设计好3种类型的滤波器(指标自己确定):低通型、高通型、带通型。用Matlab将语音信号进行采样,并分别将其通过所设计的3种滤波器。用Matlab自带的语音返回函数收听滤波后的语音信号,分析并比较其与原语音信号的差异
1.2设计目的
选择一个语音信号作为分析的对象,或录制一段各人自己的语音信号,对其进行频谱分析;利用MATLAB中的随机函数产生噪声加入到语音信号中,模仿语音信号被污染,并对其进行频谱分析;设计FIR和IIR数字滤波器, 并对被噪声污染的语音信号进行滤波, 分析滤波后信号的时域和频域特征,回放语音信号;最后,设计一个信号处理系统界面。在所设计的系统界面上可以选择滤波器的类型。具体设计目的如下:
1)学会MATLAB的使用,掌握MATLAB的程序设计方法;
2)掌握在Windows环境下语音信号采集的方法;
3)掌握数字信号处理的基本概念、基本理论和基本方法;
4)掌握MATLAB设计数字滤波器的方法并会对信号进行分析和处理。
第二章 设计原理
语音信号时一种非平稳的时变信号,它带着各种信息。在语音编码、语音合成、语音识别和语音增强等语音处理中无一例外需要提取语音中包含的各种信息。语音信号分析的目的就在于方便有效的提取并表示语音信号所携带的信息。语音信号处理可以分为时域和变换域等处理方法,其中时域分析是最简单的方法,直接对语音信号的时域波形进行分析,崎岖的特征参数主要有语音的短时能量,短时平均过零率,短时自相关函数等。
信号提取:通过图形用户界面上的菜单功能按键采集电脑上的一段音频信号,完成音频信号的频率,幅度等信息的提取,并得到该语音信号的波形图。
信号调整:在设计的用户图形界面下对输入的音频信号进行各种变化,如变化幅度、改变频率等操作,以实现对语音信号的调整。
信号的傅里叶表示在信号的分析和处理中起着重要的作用。因为对于线性系统来说,可以很方便地确定其对正弦或复指数和的响应,所以傅里叶分析方法能完善地解决许多信号分析和处理问题。另外,傅里叶表示使信号的某些特性变得更明显,因此,它能更深入地说明信号的各项红物理现象。
由于语音信号时随着时间变化的,通常认为,语音是一个受准周期脉冲或随机噪声源激励的线性系统的输出。输出频谱是声道系统频率响应与激励源频谱的乘积。身份到系统的频率响应及激励源都是随时间变化的,因此一般标准的傅里叶表示虽然适用于周期及平稳随机信号的表示,但不能直接用于语音信号。由于语音信号可以认为在短时间内,近似不变,因而可以采用短时分析法。在用户图形界面西啊对采集的语音信号进行Fourier等变换,并画出变换前后的频谱图和倒谱图。滤除语音信号中的噪音部分,可以采用抵用滤波、高通滤波、带通滤波,并比较各种滤波后的效果
数字信号处理是利用计算机或专用处理设备,以数值计算的方法对信号进行采集、抽样、变换、综合、估值与识别等加工处理,借以达到提取信息和便于应用的目的。它在语音、雷达、图像、系统控制、通信、航空航天、生物医学等众多领域都获得了极其广泛的应用。具有灵活、精确、抗干扰强、设备尺寸小、造价低、速度快等优点。
数字滤波器, 是数字信号处理中及其重要的一部分。随着信息时代和数字技术的发展,受到人们越来越多的重视。数字滤波器可以通过数值运算实现滤波,所以数字滤波器处理精度高、稳定、体积小、重量轻、灵活不存在阻抗匹配问题,可以实现模拟滤波器无法实现的特殊功能。数字滤波器种类很多,根据其实现的网络结构或者其冲激响应函数的时域特性,可分为两种,即有限冲激响应( FIR,Finite Impulse Response)滤波器和无限冲激响应( IIR,Infinite Impulse Response)滤波器。
FIR滤波器结构上主要是非递归结构,没有输出到输入的反馈,系统函数H (z)在处收敛,极点全部在z = 0处(因果系统),因而只能用较高的阶数达到高的选择性。FIR数字滤波器的幅频特性精度较之于IIR数字滤波器低,但是线性相位,就是不同频率分量的信号经过fir滤波器后他们的时间差不变,这是很好的性质。FIR数字滤波器是有限的单位响应也有利于对数字信号的处理,便于编程,用于计算的时延也小,这对实时的信号处理很重要。 FIR滤波器因具有系统稳定,易实现相位控制,允许设计多通带(或多阻带)滤波器等优点收到人们的青睐。
IIR滤波器采用递归型结构,即结构上带有反馈环路。IIR滤波器运算结构通常由延时、乘以系数和相加等基本运算组成,可以组合成直接型、正准型、级联型、并联型四种结构形式,都具有反馈回路。同时,IIR数字滤波器在设计上可以借助成熟的模拟滤波器的成果,如巴特沃斯、契比雪夫和椭圆滤波器等,有现成的设计数据或图表可查,在设计一个IIR数字滤波器时,我们根据指标先写出模拟滤波器的公式,然后通过一定的变换,将模拟滤波器的公式转换成数字滤波器的公式。
滤波器的设计可以通过软件或设计专用的硬件两种方式来实现。随着MATLAB软件及信号处理工具箱的不断完善,MATLAB很快成为应用学科等领域不可或缺的基础软件。它可以快速有效地实现数字滤波器的设计、分析和仿真,极大地减轻了工作量,有利于滤波器设计的最优化。
第三章 语音信号的采集与处理
3.1语音信号的采集
将话筒接入计算机的语音输入插口上,按下录音按钮,录制一段语音信号,如下图3-1所示。利用PC 机上的声卡和WINDOWS 操作系统可以进行数字信号的采集。将话筒输入计算机的语音输入插口上,启动录音机。按下录音按钮,接着对话筒说话“语音信号处理”,说完后停止录音,屏幕左侧将显示所录声音的长度。点击放音按钮,可以实现所录音的重现。以文件名“speech”保存入g :\ MATLAB \ work 中。可以看到,文件存储器的后缀默认为. wav ,这是WINDOWS 操作系统规定的声音文件存的标准。
图3-1语音信号的采集
3.2 语音信号的时频分析
语音信号有两个特点:
1.时域范围内的随机性、短时间的稳定性。
2.语音频谱范围在300~3400Hz内。
语音信号波形如图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 (‘OriSound’); %把语音信号加载入仿真软件平台。
然后,画出语音信号的时域波形,再对语音信号进行频谱分析。MATLAB提供了快速傅里叶变换算法FFT计算DFT的函数fft,其调用格式如下:
Xk=fft(xn,N)
参数xn为被变换的时域序列向量,N是DFT变换区间长度,当N大于xn的长度时,fft函数自动在xn后面补零。,当N小于xn的长度时,fft函数计算xn的前N个元素,忽略其后面的元素。
图3-2语音信号时域波形
3.3 语音信号加噪与频谱分析
WGN用于产生高斯白噪声,AWGN则用于在某一信号中加入高斯白噪声。也可直接用randn函数产生高斯分布序列。如图3-3所示为语音信号频谱
图3-3语音信号频谱
在本次课程设计中,我们是利用MATLAB中的随机函数(rand或randn)产生噪声加入到语音信号中,模仿语音信号被污染,并对其频谱分析。Randn函数有两种基本调用格式:Randn(n)和Randn(m,n),前者产生n×n服从标准高斯分布的随机数矩阵,后者产生m×n的随机数矩阵。在这里,我们选用Randn(m,n)函数。语音信号添加噪声及其频谱分析的主要程序如下:
[y,fs,nbits]=wavread ('OriSound);
N = length (y) ; %求出语音信号的长度
Noise=0.01*randn(n,2); %随机函数产生噪声
Si=y+Noise; %语音信号加入噪声
sound(Si);
subplot(2,1,1);
plot(Si);title('加噪语音信号的时域波形');
S=fft(Si); %傅里叶变换
subplot(2,1,2);
plot(abs(S));
title('加噪语音信号的频域波形');
加噪后频谱在3.8KHz处多出高频脉冲成分,听觉上是很刺耳很不舒适的噪音,导致原有信号听着比较模糊。如图3-4为加噪前后语音信号频谱对比图。
图3-4加噪前后语音信号频谱对比图
第四章 数字滤波器的设计
4.1 FIR滤波器的窗函数设计法
对于数字高通、带通滤波器的设计,通用方法为双线性变换法。可以借助于模拟滤波器的频率转换设计一个所需类型的过渡模拟滤波器,再经过双线性变换将其转换策划那个所需的数字滤波器。具体设计步骤如下:
(1)确定所需类型数字滤波器的技术指标。
(2)将所需类型数字滤波器的边界频率转换成相应的模拟滤波器的边界频率,转换公式为Ω=2/T tan(0.5ω)
(3)将相应类型的模拟滤波器技术指标转换成模拟低通滤波器技术指标。
(4)设计模拟低通滤波器。
(5)通过频率变换将模拟低通转换成相应类型的过渡模拟滤波器。
(6)采用双线性变换法将相应类型的过渡模拟滤波器转换成所需类型的数字滤波器。
对于线性相位滤波器,经常采用FIR滤波器FIR数字滤波器的参数为:通带截止频率=0.2,π过渡带宽度<0.4 ,阻带衰减As>40 dB。FIR滤波器的窗函数设计法为:由给定的指标确定窗函数和长度N,确定延时值,求理想的单位脉冲响应,求滤波器的单位取样响应,按此要求设计FIR数字低通滤波器的归一化频率特性曲线如图4-1所示。
图4-1频率特性曲线
FIR低通滤波器用窗函数设计低通滤波器的程序如下
rp=1;
rs=50;
p=1-10.^(-rp/20); %通带阻带波纹
s=10.^(-rs/20);
fpts=[wp ws];
mag=[1 0];
dev=[p s];
[n21,wn21,beta,ftype]=kaiserord(fpts,mag,dev);%kaiserord求阶数截止频率
b21=fir1(n21,wn21,Kaiser(n21+1,beta)); %由fir1设计滤波器
[h,w]=freqz(b21,1); %得到频率响应
plot(w/pi,abs(h));
title('FIR低通滤波器');
FIR带通滤波器用窗函数设计低通滤波器的程序如下:
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=(wp*wp2-w.^2)/(bw*w);
[n22,wn22]=buttord(wp,ws,1,50,'s'); %求低通滤波器阶数和截止频率
[b22,a22]=butter(n22,wn22,'s'); %求S域的频率响应的参数
[num2,den2]=lp2bp(b22,a22,sqrt(wp1*wp2),bw); %将S域低通参数转为带通
[num22,den22]=bilinear(num2,den2,0.5);%双线性变换实现S域到Z域的转换
[h,w]=freqz(num22,den22); %根据参数求出频率响应
plot(w*8000*0.5/pi,abs(h));
axis([0 4000 0 1.5]);
legend('用butter设计');
FIR高通滤波器用窗函数设计低通滤波器的程序如下:
p=1-10.^(-rp/20); %通带阻带波纹
s=10.^(-rs/20);
fpts=[ws wp];
mag=[0 1];
dev=[p s];
[n23,wn23,beta,ftype]=kaiserord(fpts,mag,dev);
b23=fir1(n23,wn23,'high',Kaiser(n23+1,beta)); %由fir1设计滤波器
[h,w]=freqz(b23,1); %得到频率响应
plot(w*12000*0.5/pi,abs(h));
title('FIR高通滤波器');
axis([3000 6000 0 1.2]);
用窗函数法设计FIR滤波器的步骤如下:
(1)根据对阻带衰减及过渡带的指标要求,选择串窗数类型(矩形窗、三角窗、汉宁窗、哈明窗、凯塞窗等),并估计窗口长度N。先按照阻带衰减选择窗函数类型。原则是在保证阻带衰减满足要求的情况下,尽量选择主瓣的窗函数。
(2)构造希望逼近的频率响应函数。
(3)计算h(n).。
(4)加窗得到设计结果。
4.2 IIR数字滤波器窗函数设计法
IIR滤波器和FIR滤波器的设计方法完全不同。IIR滤波器设计方法有间接法和直接法,间接法是借助于模拟滤波器的设计方法进行的。其设计步骤是:先设计过渡模拟滤波器得到系统函数H(s),然后将H(s)按某种方法转换成数字滤波器的系统函数H(z)。FIR滤波器比鞥采用间接法,常用的方法有窗函数法、频率采样发和切比雪夫等波纹逼近法。
我们知道,脉冲响应不变法的主要缺点是会产生频谱混叠现象,使数字滤波器的频响偏离模拟滤波器的频响特性。为了克服之一缺点,可以采用双线性变换法。利用模拟滤波器设计IIR数字低通滤波器的步骤:
(1)确定数字低通滤波器的技术指标:通带边界频率、通带最大衰减,阻带截止频率、阻带最小衰减。
(2)将低通滤波器的技术指标转换成相应的模拟低通滤波器的技术指标。
(3)按照模拟低通滤波器的技术指标设计及过渡模拟低通滤波器。
(4)模拟滤波器系统函数转换成数字低通滤波器系统函数。
在Matlab中,可以利用函数fir1设计FIR滤波器,利用函数butter,cheby1和ellip设计IIR滤波器,利用Matlab中的函数freqz画出各步步器的频率响应。
hn=fir1(M,wc,window),可以指定窗函数向量window。如果缺省window参数,则fir1默认为哈明窗。其中可选的窗函数有Rectangular Barlrtt Hamming Hann Blackman窗,其相应的都有实现函数。
MATLAB信号处理工具箱函数buttp buttor butter是巴特沃斯滤波器设计函数,其有5种调用格式,本课程设计中用到的是[N,wc]=butter(N,wc,Rp,As,’s’),该格式用于计算巴特沃斯模拟滤波器的阶数N和3dB截止频率wc。butter,cheby1和ellip设计IIR滤波器时都是默认的双线性变换法,所以在设计滤波器时只需要代入相应的实现函数即可。IIR数字低通滤波器的主要程序如下:
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'); %求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设计');
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([0 4000 0 1.5]);
legend('用butter设计');
第五章 信号处理
5.1 用滤波器对加噪语音信号进行滤波
函数fftfilt用的是重叠相加法实现线性卷积的计算。调用格式为:y=fftfilter(h,x,M)。其中,h是系统单位冲击响应向量;x是输入序列向量;y是系统的输出序列向量;M是有用户选择的输入序列的分段长度,缺省时,默认的输入向量的重长度M=512。
用自己设计的各滤波器分别对加噪的语音信号进行滤波,在Matlab中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。该低通滤波器滤除高频信号,保留低频语音信号,符合设计滤除高频噪音保留低频原始语音信号的特点。用设计的滤波器对加噪语音信号进行滤波除噪。其频率特性曲线如图5-1所示。
图5-1滤波除噪频率特性曲线
加噪语音通过该低通滤波器之后,保留了低频信号,滤除高频信号,使语音听着不再尖锐刺耳,这说明已经达到了滤除高频噪音信号的目的。
5.2比较滤波前后语音信号的波形
采取双线行变换法用低通滤波器对原语音信号进行滤波处理,处理后在对原信号进行频谱分析。之后把原来的信号与用低通滤波器处理过后的信号进行比较,比较之后看看他们的异同。低通滤波器的程序如下:
[y,fs,nbits]=wavread ('speech');
n = length (y) ; %求出语音信号的长度
noise=0.01*randn(n,2); %随机函数产生噪声
s=y+noise; %语音信号加入噪声
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);
plot(z11);
title('滤波后的信号波形');
滤波前语音信号的波形如图5-2所示。
图5-2低通滤波前语音信号的波形
信号经过高通滤波后,滤波前后的信号密度明显减小,这是滤除了高频噪音保留了低频语音信号的结果。其语音信号波形如图5-3所示。其程序如下;
[y,fs,nbits]=wavread ('speech');
n = length (y) ; %求出语音信号的长度
noise=0.01*randn(n,2); %随机函数产生噪声
s=y+noise; %语音信号加入噪声
S=fft(s); %傅里叶变换
z21=fftfilt(b21,s);
sound(z21);
m21=fft(z21); %求滤波后的信号
subplot(2,2,1);
plot(abs(S),'g');
title('滤波前信号的频谱');
subplot(2,2,2);
plot(abs(m21),'r'); title('滤波后信号的频谱');
subplot(2,2,3);
plot(s); title('滤波前信号的波形');
subplot(2,2,4);
plot(z21); title('滤波后的信号波形');
图5-3低通滤波后语音信号的波形
第六章 心得体会
本次课程设计选题及进行过程中得到老师等的悉心指导。对报告的书写格式及内容,老师多次帮助我分析思路,开拓视角。在我遇到困难的时候,老师给予我最大的支持和鼓励。指导老师严谨求实的治学态度,踏实坚韧的工作精神,值得我学习。同时还要学感谢我的同,尤其是我们同一课题的几个同学,我们花费课很多的时间和精力。相互之间帮忙协作,上网搜索相关资料,到图书馆查阅相关文献,遇到难题,共同商讨。解决不了的问题,我们就像老师和其他同学虚心请教。最终,我们一起解决了一个又一个难题,虽然,我们有过争吵,但是在真理面前,我们的行动是一致的。在一周的课程设计过程中, 学院的机房工作人员给我们提供的便利的条件,天气寒冷,实验室空调一直开放,我们觉得很温暖,在此,表达对工作人员的谢意。在遇到课题技术难题时,我和同组的同学到图书馆广泛查阅相关资料,图书馆也热情地老师帮助,在此,向他们表示致谢。当然,我也要感谢信息工程学院,感谢他们给我提供这次实习的机会。我院采取把理论知识与实践相结合教学模式,让学生的知识源于课堂而走出课堂,真正做到了“为了学生的一切,一切为了学生”。
最后,再次感谢所有帮助过我的老师和同学!
参考文献:
1高西全,数字信号处理.第3版.北京:西安电子科技大学出版社,2008
2 刘泉,阙大顺.数字信号处理原理与实现.北京:电子工业出版社,2005
3 张磊,毕靖,郭莲英.MATLAB实用教程.北京:人民邮电出版社,2008
4 张威.MATLAB基础与编程入门.西安:西安电子科技大学出版社,2006
5 周利清,苏菲.数字信号处理基础.北京:北京邮电大学出版社,2005