中南大学数字信号处理课程设计报告

更新时间:2024-06-20 22:21:01 阅读量: 综合文库 文档下载

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

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

课程名称:数字信号处理

实验名称:设计一个信号滤波演示系统 学院:信息科学与工程学院 班级:电子信息工程 姓名:vaga 学号: 指导老师:

日期:2014年10月18日

1

目录

⊙课程设计目的及要求………………………………………4 1.1 目的及要求……………………………………………4 1.2 开发工具及环境………………………………………5 1.3 需求分析与功能说明…………………………………6

⊙系统设计过程………………………………………………7 2.1 信号发生器……………………………………………7 2.1.1 说明………………………………………………7 2.1.2 源代码……………………………………………7 2.1.3 结果截图…………………………………………7 2.2 频谱分析………………………………………………8 2.2.1 说明………………………………………………8 2.2.2 源代码……………………………………………8 2.2.3 结果截图…………………………………………9 2.3 滤波器设计…………………………………………9 2.3.1 说明………………………………………………9 2.3.2 源代码……………………………………………10 2.3.3 结果截图…………………………………………11 2.4 数字滤波……………………………………………12 2.4.1 说明………………………………………………12

2

2.4.2 源代码……………………………………………12 2.4.3 结果截图…………………………………………14

⊙课程设计总结……………………………………………16

⊙参考资料…………………………………………………17 4.1 课程设计指导书……………………………………17 4.2 主要参考资料………………………………………17

3

课程设计目的及要求

1.1 目的及要求

设计一个工作流程如图1所示的信号滤波演示系统。

1、信号发生器

根据信号选择分为两类:

(1)静态型:直接输入(或从文件读取)测试序列; (2)动态型:输入由多个不同频率正弦信号叠加组合而成的模拟信号公式(如式1所示)、采样频率(Hz)、采样点数,动态生成该信号的采样序列,作为测试信号。

100sin(2πf1t) +100sin(2πf2t ) +....+100sin(2πfnt ) (1)

2、频谱分析

使用 FFT 对步骤1生成的测试信号进行频谱分析并展示其幅频特性与相频特性,指定需要滤除的频带,通过选择滤波器类型(IIR / FIR),确定对应的滤波器(低通、高通)技

4

术指标。 3、滤波器设计

根据步骤2中确定的IIR/FIR数字滤波器技术指标设计滤波器,得到相应的滤波器系数,并展示该滤波器的幅频(衰减)、相频特性。

(1)IIR DF:使用双线性变换法,可选择滤波器基型(巴特沃斯或切比雪夫型);

(2)FIR DF:使用窗口法,可选择窗口类型,并比较分析基于不同窗口、不同阶数所设计数字滤波器的特点。 4、数字滤波

利用步骤3得到的滤波系数,对测试信号进行数字滤波。 (1)IIR DF:要求通过差分过程迭代实现滤波(未知初值置零处理);

(2)FIR DF:要求通过快速卷积实现滤波(对于长序列,可以选择使用重叠相加或重叠保留法进行卷积运算)。 5、输出信号分析

展示经步骤4处理后所得滤波后信号的幅频、相频特性,分析是否满足滤波要求。对同一滤波要求,根据输出信号信号频谱,对比分析各类滤波器的差异。

1.2 开发工具及环境

MATLAB 7.0、wps文字、红精灵抓图精灵2010

5

Windows7 系统环境

1.3 需求分析与功能说明

首先选择动态型输入,我选择输入一个由三个不同频率正弦信号叠加组合组成而成的模拟信号公式,100sin(2πf1t)

+100sin(2πf2t ) +100sin(2πf3t),以此作为测试信号。 第二步骤中的频谱分析需要用到fft快速傅里叶变换,再根据MATLAB语句编写用图像的方式展示出信号的幅频与相频特性。这步完成后,指定IIR滤波器的类型为圆形滤波器,带通,FIR滤波器用凯赛尔窗来实现带通滤波,这些滤波各种参数会通过MATLAB编程中体现,并且通过图像的方式把滤波的窗口显示出来。最后的数字滤波是最重要的部分,我基本能成功完成此步骤,将原始信号过滤成一个规则的正弦信号,以上就成功实现了该系统的功能。

6

系统设计过程

2.1 信号发生器 2.1.1 说明

选择画出100sin(2πf1t) +100sin(2πf2t )+100sin(2πf3t )三

个分量的图,分别令三个频率为f1=2000,f2=5000,f3=8000,axis函数用法: axis一般用来设置axes的样式,包括坐标轴范围,可读比例等 axis([xmin xmax ymin ymax])。在给定的时域内,输入采样序列,生成了含有三个不同频率的混合信号波形。

2.1.2 源代码

t=0:1/20000:0.01;

f1=2000,f2=5000,f3=8000;

ft=100*sin(2*pi*f1*t)+100*sin(2*pi*f2*t)+100*sin(2*pi*f3*t); plot(t,ft); grid on;

axis([0 0.01 1.1*min(ft) 1.1*max(ft)]); xlabel('t'),ylabel('ft');

2.1.3 结果截图

7

2.2 频谱分析 2.2.1 说明

使用 FFT 对步骤1生成的测试信号进行频谱分析并展示其幅频特性与相频特性,指定需要滤除的频带,通过选择滤波器类型(IIR / FIR),确定对应的滤波器(带通)技术指标。频谱分析的部分:抽样点数N为512点,首先还是先画出抽样信号的连续形式;接下来画出实际抽样信号,运用stem()函数(该函数即一个x对应一个y,刚好是实现抽样的功能,抽样点数为512.)第三步就是求其幅度频谱的步骤,首先对原信号函数ft做N(512)点的fft快速傅里叶变化得到Fw,这一步就是在计算N点离散傅里叶变化,接下来将求出的Fw取绝对值就是它的振幅谱。第四步求相位谱则运用到angle()函数,该函数拥有求相位角的功能。在抽样信号的幅度谱中发现了三个频率的幅度谱,需要进行滤波。

2.2.2 源程序

fs=20000;N=512;T=1/fs; %采样点数N t=0:1/fs:0.01;

f1=2000,f2=5000,f3=8000;

ft=100*sin(2*pi*f1*t)+100*sin(2*pi*f2*t)+100*sin(2*pi*f3*t);

subplot(4,1,1); plot(t,ft);grid on;

axis([0 0.01 1.1*min(ft) 1.1*max(ft)]); xlabel('t'),ylabel('ft'); title('抽样信号的连续形式');

subplot(4,1,2);

8

stem(t,ft);grid on;

axis([0 0.01 1.1*min(ft) 1.1*max(ft)]); xlabel('t'),ylabel('ft'); title('实际抽样信号');

k=0:N-1;

Fw=fft(ft,N); %计算N点离散傅里叶变化 subplot(4,1,3);

plot(k,abs(Fw),'-*');grid on; %绘制振幅-频率图 axis([0 600 0 10000]);

xlabel('Frequency'),ylabel('|F(k)|'); title('抽样信号幅度谱')

subplot(4,1,4);

plot(k,angle(Fw));grid on; %绘制相位谱 axis([0 100 -4 4]); title('抽样信号相位谱')

2.2.3 结果截图

2.3 滤波器设计 2.3.1 说明

9

根据步骤2中确定的IIR/FIR数字滤波器技术指标设计滤波器,得到相应的滤波器系数,并展示该滤波器的幅频(衰减)、相频特性。

(1)IIR DF:使用双线性变换法,可选择滤波器:椭圆模拟带通滤波器;

(2)FIR DF:使用窗口法,可选择凯萨尔窗。

以上分别为II R和FI R滤波器的设计及其幅频特性和相频特性。

2.3.2 源代码

%IIR DF设计:

%Step1:产生含有3个正弦分量的信号

Fs=20000; t=(1:100)/Fs; %抽样频率、时间轴

s1=100*sin(2*pi*t*2000);s2=100*sin(2*pi*t*5000);s3=sin(2*pi*t*8000); s=s1+s2+s3; subplot(511); %组成信号、指定图形位置 plot(t,s);title(' 原始信号');

xlabel('时间(s)' ); ylabel('信号波形' ); %Step2:产生一个4阶IIR带通滤波器

%通带为100Hz到200Hz,并得出其幅频响应

[b,a]=ellip(2,0.5,20,[1000,2500]*2/Fs); %得到滤波器的系数矩阵 [H,w]=freqz (b,a,512); %H为滤波器的系统函数 subplot(5,1,2); plot(w*Fs/(2*pi),abs(H)); title('IIR带通滤波器幅频响应' );

xlabel(' 频率(Hz)' );ylabel(' 幅度' ); axis([0 10000 0 1.5]);

figure

%FIR DF设计: As=70;

ws=0.2* pi; wp=0.3* pi;

tr_width=wp-ws; %过渡带宽度

M=ceil((As-7.95)*2*pi/14.36./tr_width+1)+1; disp(['滤波器的长度为',num2str(M)]); beta=0.1102*(As-8.7); n=[0:1:M-1];

10

disp(['线性相位斜率为',num2str(beta)]) delta_w=2*pi/1000;

w_kai=(kaiser(M,beta)); %调用窗函数 wc=(ws+wp)/2; r=(M-1)/2; n=[0:1:(M-1)]; m=n-r+eps;

hd=sin(wc*m)./(pi*m);%求理想脉冲响应 h=hd.*w_kai';%加窗 stem(n,w_kai); title('凯泽窗 '); axis([0 M-1 0 1.1]); ylabel('w(n)');

2.3.3 结果截图 IIR DF设计

FIR DF设计

11

2.4 数字滤波 2.4.1 说明

利用步骤3得到的滤波系数,对测试信号进行数字滤波。 (3)IIR DF:要求通过差分过程迭代实现滤波(未知初值置零处理);

(4)FIR DF:要求通过快速卷积实现滤波(对于长序列,可以选择使用重叠相加或重叠保留法进行卷积运算)。 用双线性变换法设计无限脉冲响应数字滤波器(IIF DF)时,先把数字滤波器指标转换成模拟滤波器的指标,然后根据模拟滤波器的指标设计模拟滤波器,再经过线性变换把模拟滤波器转换成数字滤波器。该系统要能够设计巴特沃兹型低通、带通、高通滤波器,并能够输入数字滤波器的性能指标,显示出滤波器的阶数和系数。该系统的关键部分是滤波器的设计部分,按照双线性变换法设计滤波器的步骤进行设计即可。

2.4.2 源代码

%IIR DF设计:

%Step1:产生含有3个正弦分量的信号

Fs=20000; t=(1:100)/Fs; %抽样频率、时间轴

s1=100*sin(2*pi*t*2000);s2=100*sin(2*pi*t*5000);s3=sin(2*pi*t*8000); s=s1+s2+s3; subplot(511); %组成信号、指定图形位置 plot(t,s);title(' 原始信号');

xlabel('时间(s)' ); ylabel('信号波形' ); %Step2:产生一个4阶IIR带通滤波器 %通带为100Hz到200Hz,并得出其幅频响应

[b,a]=ellip(2,0.5,20,[1000,2500]*2/Fs); %得到滤波器的系数矩阵

12

[H,w]=freqz (b,a,512); %H为滤波器的系统函数 subplot(512); plot(w*Fs/(2*pi),abs(H)); title('IIR带通滤波器幅频响应' );

xlabel(' 频率(Hz)' );ylabel(' 幅度' ); axis([0 10000 0 1.5]); %Step3:对原始信号进行滤波

sf=filter(b,a,s); %用设计的滤波器过滤原始信号 subplot(513);plot(t,sf); title(' 滤波后的信号波形' );

xlabel(' 时间(s)' ); ylabel(' 信号波形' ); axis([0 0.001 -150 150]);

%Step4:绘出信号滤波前、后的幅频图

S=fft(s,512); %求出原始信号的傅立叶变换 SF=fft(sf,512); %求出过滤后信号的傅立叶变换 w=(0:255)/256*(Fs/2); subplot(514);

plot(w,abs([S(1:256)' ,SF(1:256)' ])); title(' 滤波前、后的幅频图' ); xlabel(' 频率(Hz)' ); ylabel(' 幅度' ); grid;

legend({' 滤波前的幅频' ,' 滤波后的幅频' }) subplot(515);

plot(w,angle([S(1:256)' ,SF(1:256)' ])); title(' 滤波前、后的相频图' ); xlabel(' 频率(Hz)' ); ylabel(' 相位' ); grid;

legend({' 滤波前的相频' ,' 滤波后的相频' })

%FIR DF设计: As=70;

ws=0.2* pi; wp=0.3* pi; tr_width=wp-ws;

M=ceil((As-7.95)*2*pi/14.36./tr_width+1)+1; disp(['滤波器的长度为',num2str(M)]); beta=0.1102*(As-8.7); n=[0:1:M-1];

disp(['线性相位斜率为',num2str(beta)]) delta_w=2*pi/1000;

w_kai=(kaiser(M,beta)); %调用窗函数 wc=(ws+wp)/2; r=(M-1)/2; n=[0:1:(M-1)];

13

m=n-r+eps;

hd=sin(wc*m)./(pi*m);%求理想脉冲响应 h=hd.*w_kai';%加窗 stem(n,w_kai); title('凯泽窗 '); axis([0 M-1 0 1.1]); ylabel('w(n)');

fs=1000;

t=0:1/20000:2;

x=100*sin(2*pi*2000*t)+100*sin(2*pi*5000*t)+100*sin(2*pi*8000*t); x1=filter(h,2,x);%对信号进行滤波 figure;

n=5000:5100; subplot(211); t=n/fs;

plot(t,x(n));

title('原始信号'); subplot(212); plot(t,x1(n));

title('滤波后的信号');

2.4.3 结果截图 IIR DF

14

FIR DF

15

课程设计总结

这次数字信号处理的课程设计不但使我掌握了matlab的基本操作与数字信号处理的一些基础知识,而且通过整个系统的设计使我了解了信号的产生、抽样、频谱分析及滤波的具体分析方法与实现方法。我进一步发现通过整个设计可以加深对于之前学习的理论知识的理解,耐心的寻找资料,能够学到课堂上所无法理解的问题。更让我明白凡事都需要耐心,细心仔细都是通往成功之路的钥匙,认真仔细的查看代码就能发现代码中一个小小的错误就可以解决一个大的模块问题。虽然在做的过程中遇到了一些问题、难题,但是我都通过了自己的努力去解决和克服他们,证明了自己的能力。这次的课程设计对于我各方面的综合能力有了很大的提高,对我以后设计系统甚至是以后的学习工作都有很大的帮助。整个设计中最重要的就是matlab语句与数字信号处理功能相结合,虽然设计还存在很多的关于单位范围选取导致图形无法很好的与前后图形进行比较的问题,但是希望通过以后的学习能够自主思考将问题完善并解决,这样才能达到我们做课程设计的真正目的。

16

参考资料

5.1 课程设计指导书

(1)《数字信号处理(第二版)》.丁玉美等 西安电子科技大

学出版社

(2)《数字信号处理及其MATLAB实现》,陈怀琛等译,电子

工业出版社

(3)《MATLAB及在电子信息课程中的应用》,陈怀琛等,电子工业出版社

5.2 主要参考资料

(1)S. K. Mitra. Digital Signal Processing: A Computer Based Approach, 3rd Edition [M], New York, USA: McGraw-Hill, 2000 (2)R.G.Lyons.Understanding

Digital

Signal

Processing, 2nd Edition [M]. New Jersey, USA: Prentice Hall, 2005

(3) 程佩青.数字信号处理教程, 第二版[M]. 北京: 清华大学出版社, 2001

(4) 赵树杰等. 数字信号处理[M]. 西安: 西安电子科技大学出版社, 1997

(5)丁玉美等. 数字信号处理—时域离散随机信号处理[M]. 西安: 西安电子科技大学出版社,2002

17

(6)陈怀琛等. MATLAB 及在电子信息课程中的应用[M], 北京: 电子工业出版社出版, 2002

18

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

Top