长安大学 数字信号处理课设

更新时间:2024-05-29 21:23:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《数字信号处理》课程设计报告

学院(部) 信息工程学院 专 业 电子信息工程 班 级 24030901 学生姓名 昆哥 学 号 24030901

目 录

一、 课程设计目的??????????????????? 3

二、 课程设计原理??????????????????? 3

三、 主要仪器及材料?????????????????? 6

四、 课程设计内容??????????????????? 6

1. 语音信号采集????????????????? 6

2. 语音信号频谱分析??????????????? 6

3. 设计数字滤波器和对信号滤波?????????? 8

4. 等波纹逼近法?????????????????14

(1) 低通滤波器???????????????? 14

(2) 高通滤波器???????????????? 15

(3) 带通滤波器???????????????? 17

(4) 双线性变换法设计低通滤波器???????? 19

(5) 双线性变换法设计高通滤波器???????? 24

(6) 双线性变换法设计带通滤波器???????? 30

课程设计结论???????????????????35

课程设计思考???????????????????36

体会与总结????????????????????36

参考文献?????????????????????37

五、 六、 七、 八、

数字信号处理综合设计

一、课程设计目的

1.学会MATLAB的使用,掌握MATLAB的程序设计方法; 2.掌握在Windows环境下语音信号采集的方法;

3.掌握数字信号处理的基本概念、基本理论和基本方法; 4.掌握MATLAB设计FIR和IIR数字滤波器的方法; 5.学会用MATLAB对信号进行分析和处理。

二、课程设计原理

1.用窗函数法设计FIR滤波器

根据待求滤波器的理想频率响应求出理想单位脉冲响应hd(n),如果给出待求滤波器频率应为Hd,则理想的单位脉冲响应可以用下面的傅里叶反变换式求出:

1?j?j?nhd(n)?H(e)ed?d??? 2?在一般情况下,hd(n)是不能用封闭公式表示的,需要采用数值方法表示;从w=0到w=2π采样N点,采用离散傅里叶反变换(IDFT)即可求出。 用窗函数wd(n)将hd(n)截断,并进行加权处理,得到

h(n)?hd(n)?(n)

如果要求线性相位特性, 则h(n)还必须满足:

h(n)??h(N?1?n)

根据上式中的正、 负号和长度N的奇偶性又将线性相位FIR滤波器分成四类。 要根据所设计的滤波特性正确选择其中一类。 例如, 要设计线性相位低通特性可选择h(n)=h(N-1-n)一类,而不能选h(n)=-h(N-1-n)一类。

验算技术指标是否满足要求,为了计算数字滤波器在频域中的特性,可调用freqz子程序,如果不满足要求,可根据具体情况,调整窗函数类型或长度,直到满足要求为止。

2.用双线性变换法设计IIR数字滤波器

脉冲响应不变法的主要缺点是产生频率响应的混叠失真。这是因为从S平面到Z平面是多值的映射关系所造成的。为了克服这一缺点,可以采用非线性频率压缩方法,将整个频率轴上的频率范围压缩到-π/T~π/T之间,再用z=esT转换到Z平面上。也就是说,第一步先将整个S平面压缩映射到S1平面的-π/T~π/T一条横带里;第二步再通过标准变换关系z=es1T将此横带变换到整个Z平面上去。这样就使S平面与Z平面建立了一一对应的单值关系,消除了多值变换性,也就消除了频谱混叠现象,映射关系如图1所示。

图1双线性变换的映射关系

为了将S平面的整个虚轴jΩ压缩到S1平面jΩ1轴上的-π/T到π/T段上,可以通过以下的正切变换实现

(1)

式中,T仍是采样间隔。

当Ω1由-π/T经过0变化到π/T时,Ω由-∞经过0变化到+∞,也即映射了整个jΩ轴。将式(1)写成

将此关系解析延拓到整个S平面和S1平面,令jΩ=s,jΩ1=s1,则得

再将S1平面通过以下标准变换关系映射到Z平面 z=es1T

从而得到S平面和Z平面的单值映射关系为:

(2)

(3)

式(2)与式(3)是S平面与Z平面之间的单值映射关系,这种变换都是两个线性函数之比,因此称为双线性变换

式(1)与式(2)的双线性变换符合映射变换应满足的两点要求。 首先,把z=ejω,可得

(4)

即S平面的虚轴映射到Z平面的单位圆。 其次,将s=σ+jΩ代入式(4),得

因此

由此看出,当σ<0时,|z|<1;当σ>0时,|z|>1。也就是说,S平面的左半平面映射到Z平面的单位圆内,S平面的右半平面映射到Z平面的单位圆外,S平面的虚轴映射到Z平面的单位圆上。因此,稳定的模拟滤波器经双线性变换后所得的数字滤波器也一定是稳定的。 双线性变换法优缺点

双线性变换法与脉冲响应不变法相比,其主要的优点是避免了频率响应的混叠现象。这是因为S平面与Z平面是单值的一一对应关系。S平面整个jΩ轴单值地对应于Z平面单位圆一周,即频率轴是单值变换关系。这个关系如式(4)所示,重写如下:

上式表明,S平面上Ω与Z平面的ω成非线性的正切关系,如图2所示。

由图2看出,在零频率附近,模拟角频率Ω与数字频率ω之间的变换关系接近于线性关系;但当Ω进一步增加时,ω增长得越来越慢,最后当Ω→∞时,ω终止在折叠频率ω=π处,因而双线性变换就不会出现由于高频部分超过折叠频率而混淆到低频部分去的现象,从而消除了频率混叠现象。

图2双线性变换法的频率变换关系

但是双线性变换的这个特点是靠频率的严重非线性关系而得到的,如式(4)及图2所示。由于这种频率之间的非线性变换关系,就产生了新的问题。首先,一个线性相位的模拟滤波器经双线性变换后得到非线性相位的数字滤波器,不再保持原有的线性相位了;其次,这种非线性关系要求模拟滤波器的幅频响应必须是分段常数型的,即某一频率段的幅频响应近似等于某一常数(这正是一般典型的低通、高通、带通、带阻型滤波器的响应特性),不然变换所产生的数字滤波器幅频响应相对于原模拟滤波器的幅频响应会有畸变,如图3所示。

图3双线性变换法幅度和相位特性的非线性映射

对于分段常数的滤波器,双线性变换后,仍得到幅频特性为分段常数的滤波器,但是各个分段边缘的临界频率点产生了畸变,这种频率的畸变,可以通过频率的预畸来加以校正。也就是将临界模拟频率事先加以畸变,然后经变换后正好映射到所需要的数字频率上。

三、主要实验仪器及材料

微型计算机、Matlab6.5教学版、TC编程环境。

四、课程设计内容

1.语音信号的采集

(1)利用windows下的录音机(开始—程序—附件—娱乐—录音机,文件—属性—立即转换—8.000KHz,8位,单声道)或其他软件,录制一段自己的话音,时间控制在1秒左右。然后将音频文件保存为“wqk.wav”。

(2)在MATLAB软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。

2.语音信号的频谱分析

利用函数wavread对语音信号进行读取,将它赋值给某一变量。首先画出语音信号的时域波形;然后对语音信号进行频谱分析,在MATLAB中,利用函数fft对信号进行快速傅里叶变换,得到信号的频谱特性:

程序如下:

z1=wavread('F:\\wqk.wav'); plot(z1);

图形分析如下:

z1=wavread('F:\\wqk.wav'); y1=z1(1:8192); Y1=fft(y1); n=0:8191; plot(n,Y1);

3. 设计数字滤波器和对信号滤波 (1)窗函数设计低通滤波器 程序设计如下: clear;close all

[z1,fs,bits]=wavread('F:\\ wqk.wav') y1=z1(1:8192); Y1=fft(y1);

fp=1000;fc=1200;As=100;Ap=1;Fs=8000; wc=2*pi*fc/Fs; wp=2*pi*fp/Fs; wdel=wc-wp;

beta=0.112*(As-8.7); N=ceil((As-8)/2.285/wdel); wn= kaiser(N+1,beta); ws=(wp+wc)/2/pi; b=fir1(N,ws,wn); figure(1);

freqz(b,1); x=fftfilt(b,z1); X=fft(x,8192); figure(2);

subplot(2,2,1);plot(abs(Y1));axis([0,4000,0,1.0]); title('滤波前信号频谱');

subplot(2,2,2);plot(abs(X));axis([0,4000,0,1.0]); title('滤波后信号频谱'); subplot(2,2,3);plot(z1); title('滤波前信号波形'); subplot(2,2,4);plot(x); title('滤波后信号波形'); sound(x,fs,bits); 图形分析如下:

(2)窗函数设计高通滤波器 程序设计如下: clear;close all

[z1,fs,bits]=wavread('F:\\wqk.wav') y1=z1(1:8192); Y1=fft(y1);

fp=2800;fc=3000;As=100;Ap=1;Fs=8000; wc=2*pi*fc/Fs; wp=2*pi*fp/Fs; wdel=wc-wp;

beta=0.112*(As-8.7); N=ceil((As-8)/2.285/wdel); wn= kaiser(N,beta); ws=(wp+wc)/2/pi;

b=fir1(N-1,ws,'high',wn); figure(1);

freqz(b,1); x=fftfilt(b,z1); X=fft(x,8192); figure(2);

subplot(2,2,1);plot(abs(Y1));axis([0,4000,0,1.0]); title('滤波前信号频谱');

subplot(2,2,2);plot(abs(X));axis([0,4000,0,1.0]); title('滤波后信号频谱'); subplot(2,2,3);plot(z1); title('滤波前信号波形'); subplot(2,2,4);plot(x); title('滤波后信号波形'); sound(x,fs,bits); 图如下:

(3)窗函数设计带通滤波器 程序设计如下: clear;close all

[z1,fs,bits]=wavread('F:\\wqk.wav') y1=z1(1:8192); Y1=fft(y1);

fp1=1200 ;fp2=3000 ;fc1=1000 ;fc2=3200 ;As=100 ;Ap=1 ;Fs=8000 ; wp1=2*pi*fp1/Fs; wc1=2*pi*fc1/Fs; wp2=2*pi*fp2/Fs; wc2=2*pi*fc2/Fs; wdel=wp1-wc1; beta=0.112*(As-8.7); N=ceil((As-8)/2.285/wdel);

ws =[(wp1+wc1)/2/pi,(wp2+wc2)/2/pi]; wn= kaiser(N+1,beta); b=fir1(N,ws,wn); figure(1); freqz(b,1)

x=fftfilt(b,z1); X=fft(x,8192); figure(2);

subplot(2,2,1);plot(abs(Y1));axis([0,4000,0,1.0]); title('滤波前信号频谱');

subplot(2,2,2);plot(abs(X));axis([0,4000,0,1.0]); title('滤波后信号频谱') subplot(2,2,3);plot(z1); title('滤波前信号波形'); subplot(2,2,4);plot(x); title('滤波后信号波形'); sound(x,fs,bits); 图如下:

4、等波纹逼近法 (1)低通滤波器 clear;close all

[z1,fs,bits]=wavread('F:\\wqk.wav') y1=z1(1:8192); Y1=fft(y1);

fs=8000;f=[1000,1200];

m=[1,0]; rp=1;rs=100;

dat1=(10^(rp/20)-1)/(10^(rp/20)+1);dat2=10^(-rs/20); rip=[dat1,dat2];

[M,fo,mo,w]=remezord(f,m,rip,fs); hn=remez(M,fo,mo,w); figure(1); freqz(hn);

x=filter(hn,1,y1); X=fft(x,8192); figure(2);

subplot(2,2,1);plot(abs(Y1));axis([0,4000,0,1.0]); title('滤波前信号频谱');

subplot(2,2,2);plot(abs(X));axis([0,4000,0,0.03]); title('滤波后信号频谱'); subplot(2,2,3);plot(z1);

title('滤波前信号波形'); subplot(2,2,4);plot(x); title('滤波后信号波形'); sound(x,fs,bits);: 图如下:

(2)高通滤波器 程序:

clear;close all

[z1,fs,bits]=wavread('F:\\wqk.wav') y1=z1(1:8192); Y1=fft(y1);

fs=8000;f=[2800,3000]; m=[0,1]; rp=1;rs=100;

dat1=(10^(rp/20)-1)/(10^(rp/20)+1);dat2=10^(-rs/20); rip=[dat2,dat1];

[M,fo,mo,w]=remezord(f,m,rip,fs); hn=remez(M,fo,mo,w); figure(1); freqz(hn);

x=filter(hn,1,y1); X=fft(x,8192); figure(2);

subplot(2,2,1);plot(abs(Y1));axis([0,4000,0,1.0]); title('滤波前信号频谱');

subplot(2,2,2);plot(abs(X));axis([0,4000,0,0.03]); title('滤波后信号频谱'); subplot(2,2,3);plot(z1); title('滤波前信号波形'); subplot(2,2,4);plot(x); title('滤波后信号波形'); sound(x,fs,bits); 图形:

(3)带通滤波器 程序:

clear;close all

[z1,fs,bits]=wavread('F:\\wqk.wav')

y1=z1(1:8192);

Y1=fft(y1);

fs=8000;f=[1000,1200,3000,3200]; m=[0,1,0]; rp=1;rs=100;

dat1=(10^(rp/20)-1)/(10^(rp/20)+1);dat2=10^(-rs/20); rip=[dat2,dat1,dat2];

[M,fo,mo,w]=remezord(f,m,rip,fs); hn=remez(M,fo,mo,w); figure(1); freqz(hn);

x=filter(hn,1,y1); X=fft(x,8192); figure(2);

subplot(2,2,1);plot(abs(Y1));axis([0,4000,0,1.0]); title('滤波前信号频谱');

subplot(2,2,2);plot(abs(X));axis([0,4000,0,0.03]); title('滤波后信号频谱'); subplot(2,2,3);plot(z1); title('滤波前信号波形'); subplot(2,2,4);plot(x); title('滤波后信号波形'); sound(x,fs,bits); 图形:

(4)双线性变换法设计低通滤波器 选用butter 程序设计如下: clear;close all

[z1,fs,bits]=wavread('F:\\wqk.wav') y1=z1(1:8192); Y1=fft(y1);

fp=1000;fc=1200;As=100;Ap=1;Fs=8000; wc=2*fc/Fs; wp=2*fp/Fs; [N,ws]=buttord(wc,wp,Ap,As); [b,a]=butter(N,ws); figure(1);

freqz(b,a,512,Fs); x=filter(b,a,z1); X=fft(x,8192); figure(2);

subplot(2,2,1);plot(abs(Y1));axis([0,4000,0,1.0]); title('滤波前信号频谱');

subplot(2,2,2);plot(abs(X));axis([0,4000,0,1.0]); title('滤波后信号频谱'); subplot(2,2,3);plot(z1); title('滤波前信号波形'); subplot(2,2,4);plot(x); title('滤波后信号波形'); sound(x,fs,bits); 图如下:

figure(2);

subplot(2,2,1);plot(abs(Y1));axis([0,4000,0,1.0]); title('滤波前信号频谱');

subplot(2,2,2);plot(abs(X));axis([0,4000,0,1.0]); title('滤波后信号频谱'); subplot(2,2,3);plot(z1); title('滤波前信号波形'); subplot(2,2,4);plot(x); title('滤波后信号波形'); sound(x,fs,bits); 图如下:

②选用cheby1 程序设计如下: clear;close all

[z1,fs,bits]=wavread('F:\\wqk.wav') y1=z1(1:8192); Y1=fft(y1);

fp1=1200 ;fp2=3000; fc1=1000 ;fc2=3200 ;As=100;Ap=1; Fs=8000; wc=[2*fc1/Fs,2* fc2/Fs];wb=[2*fp1/Fs,2*fp2/Fs]; [n,wp]=cheb1ord(wc,wb,Ap,As); [b,a]=cheby1(n,Ap,wp,'z'); figure(1); freqz(b,a); x=filter(b,a,z1); X=fft(x,8192); figure(2);

subplot(2,2,1);plot(abs(Y1));axis([0,4000,0,1.0]); title('滤波前信号频谱');

subplot(2,2,2);plot(abs(X));axis([0,4000,0,1.0]); title('滤波后信号频谱'); subplot(2,2,3);plot(z1); title('滤波前信号波形'); subplot(2,2,4);plot(x); title('滤波后信号波形'); sound(x,fs,bits); 图如下:

图22

选用ellip 程序:

clear;close all

[z1,fs,bits]=wavread('F:\\wqk.wav') y1=z1(1:8192);

Y1=fft(y1);

fp1=1200;fc1=1000;fp2=3000;fc2=3200;As=100;Ap=1; ;Fs=8000; wc=[2*fc1/Fs,2*fc2/Fs];wb=[2*fp1/Fs,2*fp2/Fs]; [n,wp]=ellipord(wc,wb,Ap,As); [b,a]=ellip(n,Ap,As,wp); figure(1); freqz(b,a); x=filter(b,a,z1); X=fft(x,8192);

figure(2);

subplot(2,2,1);plot(abs(Y1));axis([0,4000,0,1.0]); title('滤波前信号频谱');

subplot(2,2,2);plot(abs(X));axis([0,4000,0,1.0]); title('滤波后信号频谱'); subplot(2,2,3);plot(z1); title('滤波前信号波形'); subplot(2,2,4);plot(x); title('滤波后信号波形'); sound(x,fs,bits);

图形截图:

五、课程设计结论

实验中,用窗函数法设计FIR滤波器,用双线性变换法设计IIR滤波器。

双线性变换的主要优点:双线性变换不会出现由于高频部分超过折叠频率而混淆到低频部分去的现象。双线性变换法的缺点:会产生频率混碟现象,使数字滤波器的频响偏移模拟滤波器的频响。

窗函数法:相位响应有严格的线性,不存在稳定性问题, 设计简单。

设计低通滤波器:用窗函数设计滤波器,线性相位好,过渡带窄滤,波效果好;在双线性变换法选用butter设计滤波器时,过渡带稍宽;在双线性变换法选用cheby1设计滤波器时,幅频响应特性曲线在通带内为等波纹震荡。

设计高通滤波器:用窗函数设计滤波器,线性相位好,过渡带窄;在双线性变换法选用butter设计滤波器时,过渡带稍宽;在双线性变换法选用cheby1设计滤波器时,过渡带宽。

设计带通滤波器:用窗函数设计滤波器,线性相位好,过渡带窄;在双线性变换法选用butte和cheby1设计滤波器时,过渡带稍宽。

巴特沃思和切比雪夫滤波器大约在3/4的通带上非常接近线性相位特性。

六、课程实验思考

1.双线性变换法中Ω和ω之间的关系是非线性的,在实验中你注意到这种非线性关系了吗?从哪几种数字滤波器的幅频特性曲线中可以观察到这种非线性关系?

答:在双线性变换法中,模拟频率与数字频率不再是线性关系,所以一个线性相位模拟器经过双线性变换后得到的数字滤波器不再保持原有的线性相位了。如以上实验过程中,采用双线性变化法设计的butter和cheby1以及eellip数字滤波器,从图中可以看到这种非线性关系。

七、体会与总结

收获和体会

通过完成这次课程设计,我从中获益良多。具体如下:

1. 通过这次实践作业,我更加体会到了理论与实践之间的巨大差异,实践永远比理论要

复杂的多,只有经过大量的实验才能得要预期的结果;

2. 这次设计使我对很多知识有了更深刻的理解,理论联系实践永远是成功的必经之途; 3. 要善于学习新的东西,学以致用,只有这样才能真正提高我们在实际操作中的能力; 4. 这次课设不仅仅是简单的完成了课设报告,更是对能力的一种锻炼!

八、参考文献

1.《数字信号处理——理论、算法与实现》

丁玉美 高西全 阔永红 电子工业出版社

2.《数字信号处理(第二版) 学习指导书》 胡广书 电子工业出版社 3.《数字信号处理实验指导书(MATLAB版)》 孙红 余翔宇 电子工业出版社

4.《基于MATLAB的系统分析与设计——信号处理》

楼顺天 李博菡编著 西安:西安电子科技大学出版社

点 评

点评人:

本文来源:https://www.bwwdw.com/article/1yc6.html

Top