数字信号处理课程设计报告
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 ('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('加噪语音信号的频域波形'); 程序结果如下图:
4
数字信号处理课程设计报告
图2 加噪后的波形及频谱分析
3.4 设计FIR和IIR数字滤波器
IIR滤波器和FIR滤波器的设计方法完全不同。IIR滤波器设计方法有间接法和直接法,间接法是借助于模拟滤波器的设计方法进行的。其设计步骤是:先设计过渡模拟滤波器得到系统函数H(s),然后将H(s)按某种方法转换成数字滤波器的系统函数H(z)。FIR滤波器比鞥采用间接法,常用的方法有窗函数法、频率采样发和切比雪夫等波纹逼近法。对于线性相位滤波器,经常采用FIR滤波器。
对于数字高通、带通滤波器的设计,通用方法为双线性变换法。可以借助于模拟滤波器的频率转换设计一个所需类型的过渡模拟滤波器,再经过双线性变换将其转换策划那个所需的数字滤波器。具体设计步骤如下:
(1)确定所需类型数字滤波器的技术指标。
(2)将所需类型数字滤波器的边界频率转换成相应的模拟滤波器的边界频率,转换公式为Ω=2/T tan(0.5ω)
(3)将相应类型的模拟滤波器技术指标转换成模拟低通滤波器技术指标。 (4)设计模拟低通滤波器。
(5)通过频率变换将模拟低通转换成相应类型的过渡模拟滤波器。
(6)采用双线性变换法将相应类型的过渡模拟滤波器转换成所需类型的数字滤波器。
我们知道,脉冲响应不变法的主要缺点是会产生频谱混叠现象,使数字滤波器
5
数字信号处理课程设计报告
的频响偏离模拟滤波器的频响特性。为了克服之一缺点,可以采用双线性变换法。
下面我们总结一下利用模拟滤波器设计IIR数字低通滤波器的步骤: (1)确定数字低通滤波器的技术指标:通带边界频率、通带最大衰减,阻带截止频率、阻带最小衰减。
(2)将数字低通滤波器的技术指标转换成相应的模拟低通滤波器的技术指标。 (3)按照模拟低通滤波器的技术指标设计及过渡模拟低通滤波器。
(4)用双线性变换法,模拟滤波器系统函数转换成数字低通滤波器系统函数。 如前所述,IIR滤波器和FIR滤波器的设计方法有很大的区别。下面我们着重介绍用窗函数法设计FIR滤波器的步骤。如下:
(1)根据对阻带衰减及过渡带的指标要求,选择串窗数类型(矩形窗、三角窗、汉宁窗、哈明窗、凯塞窗等),并估计窗口长度N。先按照阻带衰减选择窗函数类型。原则是在保证阻带衰减满足要求的情况下,尽量选择主瓣的窗函数。
(2)构造希望逼近的频率响应函数。 (3)计算h(n).。 (4)加窗得到设计结果。
接下来,我们根据语音信号的特点给出有关滤波器的技术指标: ①低通滤波器的性能指标:
fp=1000Hz,fc=1200Hz,As=100db ,Ap=1dB
②高通滤波器的性能指标:
fp=3500Hz,fc=4000Hz,As=100dB,Ap=1dB;
③带通滤波器的性能指标:
fp1=1200Hz,fp2=3000hZ,fc1=1000Hz,fc2=3200Hz,As=100dB,Ap=1dB
在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。
6
数字信号处理课程设计报告
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低通滤波器=======================
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设计');
图3 IIR低通滤波器
7
数字信号处理课程设计报告
%======================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设计');
图4 IIR带通滤波器
%======================IIR高通==========================
Ft=8000;
8