DSP综合实验Word格式文档下载.docx
《DSP综合实验Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《DSP综合实验Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
wavread函数调用格式:
y=wavread(file),读取file所规定的wav文件,返回采样值放在向量y中。
[y,fs,bits]=wavread(file),采样值放在向量y中,fs表示采样频率(Hz),bits表示采样位数。
y=wavread(file,N),读取前N点的采样值放在向量y中。
y=wavread(file,[N1,N2]),读取从N1点到N2点的采样值放在向量y。
2.语音信号的频谱分析
要求首先画出语音信号的时域波形;
然后对语音信号进行频谱分析,在MATLAB中,
可以利用函数fft对信号进行快速傅立叶变换,得到信号的频谱特性;
从而加深对频谱特性
的理解。
3.设计数字滤波器和画出频率响应
根据语音信号的特点给出有关滤波器的性能指标:
1)低通滤波器性能指标,fp=1000Hz,fc=1200Hz,As=100dB,Ap=1dB;
2)高通滤波器性能指标,fc=4800Hz,fp=5000HzAs=100dB,Ap=1dB;
3)带通滤波器性能指标,fp1=1200Hz,fp2=3000Hz,fc1=1000Hz,c2=3200Hz,As=100dB,Ap=1dB。
要求学生首先用窗函数法设计上面要求的三种滤波器,在MATLAB中,可以利用函数fir1设计FIR滤波器;
然后在用双线性变换法设计上面要求的三种滤波器,在MATLAB中,可以利用函数butte、cheby1和ellip设计IIR滤波器;
最后,利用MATLAB中的函数freqz画出各滤波器的频率响应。
4.用滤波器对信号进行滤波
比较两种滤波器的性能,然后用性能好的各滤波器分别对采集的信号进行滤波,在MATLAB中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。
5.比较滤波前后语音信号的波形及频谱要求在一个窗口同时画出滤波前后的波形及频谱。
6.回放语音信号
在MATLAB中,函数sound可以对声音进行回放。
其调用格式:
sound(x,fs,bits);
可以感觉滤波前后的声音有变化。
四、实验结果及实验分析
1.语音信号的采集及频谱分析
Matlab程序代码如下:
[y,fs,bits]=wavread('
dsp.wav'
)
y=y(:
1);
sound(y,fs,bits);
Y=fft(y,fs);
subplot(211);
plot(y);
title('
音频信号的时域波形'
);
subplot(212);
plot(abs(Y));
音频信号的频域波形'
axis([0,5000,0,1.2*max(abs(Y))]);
1.得到的结果如下:
说明录音文件的采样频率为44100HZ,采样位数为16位。
2.信号的时域和频域特性:
3.设计数字滤波器和画出频率响应
1)低通滤波器性能指标,fp=1000Hz,fc=1200Hz,As=100dB,Ap=1dB。
(1)用Kaiser窗函数设计FIR低通滤波器:
fp=1000;
fc=1200;
As=100;
Ap=1;
wc=2*pi*fc/fs;
wp=2*pi*fp/fs;
ws=wc-wp;
deltaw=(wc+wp)/(2*pi);
n0=ceil((As-8)/2.285/ws);
beta=0.1102*(As-8.7);
wdkai=(kaiser(n0+1,beta));
b0=fir1(n0,deltaw,wdkai);
figure
(1);
[h,w]=freqz(b0,1);
plot(w*fs*0.5/pi,20*log10(abs(h)));
axis([0,4000,-200,0]);
gridon
实验分析:
由图象可以看出,窗函数低通滤波器具有很大的阻带波纹,在通带基本没有波纹。
(2)用Batterworth设计IIR低通滤波器:
fp=1000;
Fs=22050;
wc=fc*pi;
Rp=1;
Rs=100;
e=fzero(inline('
(10^(0.1*1)-1)^x-(1000/1200)'
),1);
N=1/(2*e);
N=ceil(N);
[Z,P,K]=buttap(N);
[Bap,Aap]=zp2tf(Z,P,K);
[b,a]=lp2lp(Bap,Aap,wc);
[bz,az]=bilinear(b,a,Fs);
[H,W]=freqz(bz,az);
plot(W*Fs/pi,abs(H));
axis([0,3000,0,1.5])
grid;
xlabel('
频率/HZ'
ylabel('
幅度'
Batterworth低通IIR数字滤波器'
由实验可看出巴特沃斯滤波器的过渡带很宽。
2)高通滤波器性能指标,fc=4800Hz,fp=5000HzAs=100dB,Ap=1dB。
(1)用Kaiser窗函数设计FIR高通滤波器:
fc=4800;
fp=5000;
ws=wp-wc;
wdkai=(kaiser(n0,beta));
b0=fir1(n0-1,deltaw,'
high'
wdkai);
axis([0,8000,-200,0]);
由图像可知,Kaiser窗函数高通滤波器在通带基本没波纹,过渡带较窄,基本上能符合要求。
(2)用Batterworth设计IIR高通滤波器:
fp=5000;
fc=4800;
Fs=15000;
(10^(0.1*1)-1)^x-(4800/5000)'
N=ceil(N)
[b,a]=butter(N,wc,'
'
s'
Batterworth高通IIR数字滤波器'
实验分析:
由图中可知,巴特沃兹滤波器具有很宽的过渡带。
3)带通滤波器性能指标,fp1=1200Hz,fp2=3000Hz,fc1=1000Hz,c2=3200Hz,As=100dB,Ap=1dB。
(1)用Kaiser窗函数设计FIR高通滤波器:
fp1=1200;
fp2=3000;
fc1=1000;
fc2=3200;
wc1=2*pi*fc1/fs;
wp1=2*pi*fp1/fs;
wc2=2*pi*fc2/fs;
wp2=2*pi*fp2/fs;
deltaw1=(wc1+wp1)/(2*pi);
deltaw2=(wc2+wp2)/(2*pi);
ws=wp1-wc1;
deltaw=[deltaw1,deltaw2];
n0=ceil((As-7.95)/2.285/ws);
由图像可知,Kaiser窗函数带通滤波器具有较窄的过渡带,通带上基本没波纹,阻带波纹较大。
(2)用ChebyshevI设计IIR带通滤波器:
fp1=1200;
wc1=fc1*2/Fs;
wc2=fc2*2/Fs;
wp1=fp1*2/Fs;
wp2=fp2*2/Fs;
Rs=10;
wp=[wp1,wp2];
wc=[wc1,wc2];
[N,wn]=cheb1ord(wp,wc,Rp,Rs,'
[bz,az]=cheby1(N,Rp,wc,'
bandpass'
plot(W*Fs/(2*pi),abs(H));
chebyshev1带通IIR数字滤波器'
由图像可知,切比雪夫I型带通滤波器过渡带较窄,通带上有波纹但是较小。
4.用滤波器对信号进行滤波
对以上的图像分析我们发现,FIR滤波器的更加接近理想矩形,过渡带窄,通带基本无波纹,衰减基本上能符合要求,但是在阻带的波纹值较大。
巴特沃兹滤波器的过渡带很宽,很难满足要求。
切比雪夫I型滤波器过渡带较窄,但是在通带上有时有较大波纹值。
综合考虑,选择基于Kaiser窗函数的FIR低通滤波器、基于Kaiser窗函数的FIR高通滤波器、基于Kaiser窗函数的FIR带通滤波器为最佳。
(1)使用Kaiser窗函数FIR低通滤波器对声音信号进行滤波
(2)
使用Kaiser窗函数FIR高通滤波器对声音信号进行滤波
(3)使用Kaiser窗函数FIR带通滤波器对声音信号进行滤波
由滤波前后的对比我们可以发现,基于Kaiser窗函数的滤波器基本上能让通带内的信号通过,滤掉阻带内的信号。
5.回放语音信号
回放语音信号之后可以发现,声音发生了变化。
证明了滤波的效果。
经过低通滤波器之后的声音变得低沉了很多,经过高通滤波器之后声音消失不见。
经过带通滤波器之后的声音也发生变化,跟原声也比较接近。
这是由声音本身的频谱特性和滤波器的特性决定的。
五、实验思考
1.双线性变换法中Ω和ω之间的关系是非线性的,在实验中你注意到这种非线性关系了吗?
从那几种数字滤波器的幅频特性曲线中可以观察到这种非线性关系?
答:
在双线性变换法中,模拟频率与数字频率不再是线性关系,所以一个线性相位模拟器经过双线性变换后得到的数字滤波器不再保持原有的线性相位了。
如以上实验过程中,采用双线性变化法设计的butter和cheby1数字滤波器,从图中可以看到这种非线性关系。
2.能否利用公式完成脉冲响应不变法的数字滤波器设计?
为什么?
IIR数字滤波器的设计实际上是求解滤波器的系数和,它是数学上的一种逼近问题,即在规定意义上(通常采用最小均方误差准则)去逼近系统的特性。
如果在S平面上去逼近,就得到模拟滤波器;
如果在z平面上去逼近,就得到数字滤波器。
但是它的缺点是,存在频率混迭效应,故只适用于阻带的模拟滤波器。
附:
Kaiser窗滤波器对语音信号滤波代码:
低通滤波:
n=length(y);
Y=fft(y,n);
%给定指标
%归一化频率
%归一化过渡带宽计算
%计算所需滤波器长度
%计算kaiser窗的值
%kaiser窗函数
x=fftfilt(b0,y);
X=fft(x,fs);
figure
(2);
subplot(2,2,1);
axis([0,5000,0,200]);
滤波前信号频谱'
subplot(2,2,2);
plot(abs(X));
滤波后信号频谱'
subplot(2,2,3);
滤波前信号波形'
subplot(2,2,4);
plot(x);
sound(x,fs,bits);
高通滤波:
%截止频率计算
ws=wp-wc;
%归一化带宽计算
axis([0,8000,0,50]);
带通滤波:
%归一化带宽
axis([0,5000,0,150]);