数字信号处理课程设计

长  沙  学  院

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

课程设计说明书

系    (部)    电子与通信工程系      

专业(班级)              

姓     名                     

学     号                

指导教师 王路露、刘光灿、黄飞江、陈威兵、冯璐、张刚林

起止日期    2011.10.2—2011.10.16  

   


      

摘      要... 3

任务与要求... 4

程序设计与实验仿真结果图... 7

工作原理与仿真结果分析... 14

结论与心得... 15

参 考 文 献... 16


摘      要

随着大规模集成电路和微处理器技术的迅猛发展,信号处理逐渐发展成为一门独立的学科,成为信息科学的重要组成部分,在语音处理、图像处理、多媒体技术、通信、生物医学工程等众多领域中得到广泛应用,且其研究范围和应用领域还在不断地发展和扩大。

MATLAB是一种强大的分析、计算及可视化工具。MATLAB功能强大、简单易学、编程效率高,被广泛运用于信息处理领域,同时也很方便地进行语音信号地分析、处理和设计。

本课题的设计主要是用MATLAB作为工具平台,设计中涉及到数字信号波形的绘制、信号的Z变换,滤波器的设计等,通过数字信号处理课程的理论知识的综合运用。从实践上初步实现了对数字信号的处理。

关键字MATLAB   数字信号处理   信号分析


任  务  与  要  求

数字信号处理课程设计任务书

系(部):电信系  专业: 09通信4班  指导教师: 王路露、刘光灿、黄飞江、陈威兵、冯璐、张刚林    20##-10


长沙学院课程设计鉴定表

程序设计与实验仿真结果图

1、试用MATLAB命令分别绘出单位冲激序列,单位阶跃序列,矩形序列的波形。

解:

(1) 将function y=impDT(n)

y=(n==0);

保存在M-File

MATLAB源程序为

>> n=-3:3;

>> x=impDT(n);

>> stem(n,x,'fill'),xlabel('n'),grid on

>> title('单位冲激序列')

>> axis([-3 3 -0.1 1.1])

程序运行结果如图1-1。

图1-1   单位冲激序列

(2) 将function y=uDT(n)

y=n>=0;

    保存在M-File

MATLAB源程序为

>> n=-3:5;

>> x=uDT(n);

>> stem(n,x,'fill'),xlabel('n'),grid on

>> title('单位阶跃序列')

>>axis([-3 5 -0.1 1.1])

程序运行结果如图1-2。

图1-2   单位阶跃序列

(3)MATLAB源程序为

>> n=-3:8;

>> x=uDT(n)-uDT(n-5);

>> stem(n,x,'fill'),xlabel('n'),grid on

>> title('矩形序列')

>> axis([-3 8 -0.1 1.1])

程序运行结果如图1-3。

图1-3   矩形阵列

2、绘出下列序列的波形

(1)           (2)

(3)            (4)

(5)          (6)

解:(1)(2)MATLAB源程序为

>> n=0:10;

>> a1=0.6;a2=-0.6;

>> x1=a1.^n;x2=a2.^n;

>> subplot(221)

>> stem(n,x1,'fill'),grid on

>> xlabel('n'),title('x(n)=0.6^{n}')

>> subplot(222)

>> stem(n,x2,'fill'),grid on

>> xlabel('n'),title('x(n)=(-0.6)^{n}')

程序运行结果如图2-1。

图2-1   单边指数序列

(3) MATLAB源程序为

>> n=0:39;

>> x=sin(pi/8*n)

>> x=sin(pi/8*n);

>> stem(n,x,'fill'),xlabel('n'),grid on

>> title('正弦序列')

>> axis([0,40,-1.5,1.5]);

程序运行结果如图2-2。

图2-2   单边指数序列

(4)(5)(6) MATLAB源程序为

>> a=0.8;N=8;n=-12:12;

>> x=a.^n.*(uDT(n)-uDT(n-N));

>> n1=n;n2=n1-3;n4=-n1;

>> subplot(411)

>> stem(n1,x,'fill'),grid on

>> title('x1(n)'),axis([-15 15 0 1])

>> subplot(412)

>> stem(n2,x,'fill'),grid on

>> title('x2(n)'),axis([-15 15 0 1])

>> subplot(414)

>> stem(n4,x,'fill'),grid on

>> title('x4(n)'),axis([-15 15 0 1])

其波形如图2-3

图2-3   离散时间信号的基本运算及波形图

3、已知某LTI系统的差分方程为当激励信号为时,求(1)单位冲激响应(2)系统的零状态响应。

解:

(1)MATLAB源程序为

>> a=[3,-2 2];

>> b=[2,3];

>> n=0:30;

>> x=impDT(n);

>> h=filter(b,a,x);

>> stem(n,h,'fill'),grid on

>> xlabel('n'),title('系统单位取样响应h(n)')

程序运行结果如图3-1所示。

图3-1   系统的单位冲激响应

(2)MATLAB源程序为

>> a=[3,-2 2];

>> b=[2,3];

>> n=0:30;

>> x=(1/2).^n;

>> y=filter(b,a,x);

>> stem(n,y,'fill'),grid on

>> xlabel('n'),title('系统响应y(n)')

运行结果如图3-2所示。

图3-2   系统的零状态响应

4、利用MALAB的conv命令求

解:利用MATLAB的conv命令求两个长为3的矩形序列的卷积和,其结果应是长为5的三角序列。用向量[1 1 1]表示矩形序列,MATLAB源程序为

>> x1=[1 1 1];

>> x2=[1 1 1];

>> g=conv(x1,x2)

g =

     1     2     3     2     1

>> n=1:5;

>> stem(n,g,'fill'),grid on,xlabel('n')

运行结果如图4所示。

图4   卷积结果图

5、求下列函数的z变换

(1);   (2)

解:z变换MATLAB源程序为

6、求下列函数的z反变换。

(1)            (2)

解:z反变换MATLAB源程序为

7、已知一离散因果LTI系统的系统函数为,试用MATLAB命令求该系统的零极点。

解:用tf2zp函数求系统的零极点,MATLAB源程序为

因此,零点为z=0.32,极点为p1=0.8与p2=0.2。

8、设计一个7阶chebyshevII型数字低通滤波器,截止频率为3000Hz,Rs=30dB。设采样频率为1000Hz。

解:源程序如下,产生图7波形

>> [b,a]=cheby2(7,30,300/500');

>> [z,p,k]=butter(5,250/500,'high');

>> freqz(b,a,512,1000)

图7   7阶chebyshevII型数字低通滤波器

工作原理与仿真结果分析

1、离散时间信号的波形绘制在MATLAB中一般用stem函数。Stem函数的基本用法和plot函数一样,它绘制的波形图的每个样本点上有一个小圆圈,默认是空心的。如果要实心,需要使用参数“fill”、“filled”。

2、MATLAB符号数学工具箱提供了计算离散时间信号单边z变换的函数ztrans和z反变换函数iztrans,其语句格式分别为

Z=ztrans(x)

x=iztrans(z)

上式中的x和Z分别为时域表达式和Z域表达式的符号,可通过sym函数来定义。

3、MATLAB中函数filter可对差分方程在指定时间范围内的输入序列所产生的响应进行求解。函数filter 的语句格式为:y=filter(b,a,x)

其中,x为输入的离散序列:y为输出的离散序列:y的长度与x的长度一样:b与a分别为差分方程右端与左端的系数向量。

4、MATLAB中直接应用函数zplane可得到H(z)的零极点分布图,其语句格式为

zplane(B,A)

其中,B与A分别表示H(z)的分子和分母多项式的系数向量。它的作用是在Z平面上画出单位园、零点与极点。

结论与心得

通过此次课程设计,使我很多专业知识以及专业技能上提升,通过此次课程设计,我了解到数字滤波与模拟滤波相比,它具有精度和稳定性高、系统函数容易改变、灵活性强、便于大规模集成和可实现多维滤波等优点。我掌握了MATLAB软件的使用;以及常规数字信号处理分析方法等等。

此次实验不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。实验课我们学会了很多分析的方法。理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正的成为自己所学,从而提高自己的实际动手能力和独立思考的能力。


参 考 文 献

[1] 黄文梅,熊佳林编著.信号分析与处理—MATALB言及应用.长沙:国防科技大学出版  社,2000

[2] 钱同惠编著.数字信号处理.北京:机械工业出版社,2004

[3] 姚天任,江太辉编著.数字信号处理.第2版.武汉:武汉理工大学出版社,2000

[4] 薛年喜.MATLAB在数字信号处理中的应用[M].北京:清华大学出版社,2003.

[5] 唐向宏,岳恒立.MATLAB及在电子信息类课程中的应用 [M].北京:电子工业出版社,2010.

 

第二篇:数字信号处理课程设计三

课题一心电信号分析系统的设计

一、本课题的目的

本设计课题主要研究数字心电信号的初步分析方法及滤波器的应用。通过完成本课题的设计,拟主要达到以下几个目的:

(1)了解基于LabVIEW的虚拟仪器的特点和使用方法,熟悉采用LabVIEW进行仿真的方法。

(2)了解人体心电信号的时域特征和频谱特征。

(3)进一步了解数字信号的分析方法;

(4)通过应用具体的滤波器进一步加深对滤波器的理解。

(5)通过本课题的设计,培养学生运用所学知识分析和解决实际问题的能力。

二、课题任务

利用labVIEW设计一个基于虚拟仪器的简单的心电信号分析系统。对输入的原始心电信号,进行一定的数字信号处理,进行频谱分析。根据具体设计要求完成系统的程序编写、调试及功能测试。

(1)对原始数字心电信号进行读取,由数字信号数据绘制出其时域波形。

(2)对数字信号数据做一次线性插值,使其成为均匀数字信号,以便后面的信号分析。

(3)根据心电信号的频域特征(自己查阅相关资料),设计相应的低通和带通滤波器。

(4)编程绘制实现信号处理前后的频谱,做频谱分析,得出相关结论。

(5)对系统进行综合测试,整理数据,撰写设计报告。

三、主要设备和软件

(1)PC机一台。

(2) LabVIEW软件一套,要求最低版本8.20。

四、设计内容、步骤和要求

必做部分:

1. 利用labVIEW读取MIT-BIH数据库提供的数字心电信号,并还原实际波形

美国麻省理工学院提供的MIT-BIH数据库是一个权威性的国际心电图检测标准库,近年来应用广泛,为我国的医学工程界所重视。MIT-BIH数据库共有48个病例,每个病例数据长30min,总计约有116000多个心拍,包含有正常心拍和各种异常心拍,内容丰富完整。

为了读取简单方便,采用其txt格式的数据文件作为我们的原心电信号数据。利用labVIEW提供的文件I/O函数,读取txt数据文件中的信号,并且还原实际波形。

2.对原始心电信号做线性插值处理

由于原始心电信号数据不是通过等间隔采样得到的,也就是说原始的心电数据并不是均匀的,而用Matlab中提供的数字滤波器处理数据时,要求数据是等间隔的。因此设计的系统首先应对原始心电信号做线性插值处理,使其变为等间隔的数字信号,否则直接处理后会出现偏差,根据心电信号的特点, 把时间分隔成0.001s。添加的幅值点采用一次线性插值。对二维数据进行插值,相连幅值间数据的插值根据时间进行,运算公式如下:

其中是第i个数据时间点,Ai是与之对应的数据,N是两数据之间需要的插值数,是需要插值的两点数据差,

时数组依次排列,即得到了插值后等间隔的新数据。

3.根据心电信号的频域特征,设计相应的低通和带通滤波器

一般正常人的心电信号频率在0.7~100HZ范围内,幅度为(胎儿)~5mV(成人)。人体心电信号微弱,信噪比小,因此,在采集心电信号时,易受到仪器、人体活动等因素的影响,而且所采集的心电信号常伴有干扰。采集心电数据时,由于人的说话呼吸,常常会混有约为0.1Hz到0.25Hz频段的干扰,对于这些低频干扰,可以让信号通过一个高频滤波器,低截止频率设置为0.25,来滤除低频信号,对于高频信号干扰,可以让信号再通过一个低频滤波器,其中截止频率设置为99Hz。也可以直接应用带通滤波器设计。

根据以上说明,利用labVIEW中的信号处理函数设计相应滤波器,滤除数字信号中的干扰信号。

4.对处理前后的心电信号分别做频谱分析,分析结果

利用labVIEW对处理前后的心电信号编程显示其频谱,分析比对滤波处理前后的频谱,得出结论。

如果分析频谱,滤波效果不明显,则需变动滤波器参数指标,重新设计滤波器。通过频谱分析,多次试验确定最合适的滤波器。

5.系统界面设计

综合前面几步,设计出一个完整的系统,并且本着简洁的原则,设计友好的人机交互界面。

选作部分:

1.三种滤波器设计

分别设计Butterworth、Chebyshev、Inverse Chebyshev三种滤波器,并对滤波后的信号分别做频谱分析,比较几种滤波器的差别。

2.设计50HZ工频陷波器

由于电子设备采集到的信号经常会混有电源线干扰。电源线干扰是以50 Hz为中心的窄带噪声,带宽小于1Hz。设计相应滤波器滤除电源线干扰,并对处理后的信号做频谱分析。

五、课程设计报告要求

(1)设计报告书包括内容:课程设计题目,课程设计目的和意义,设计方案,详细设计步骤,设计结果(原理图等),测试和仿真结果(图形或数据)及其分析,其它有明确要求的设计内容,结论,参考文献等。

(2)提交课程设计报告时应同时提交相关设计和仿真分析材料(框图、程序、结果等)的电子版。

六、参考文献

[1] 陈锡辉,张银鸿编著.LabVIEW 8.20 程序设计从入门到精通[M].北京:清华大学出版社,2007.

[2] 丁玉美.数字信号处理(第二版).西安电子科技大学出版社,2001

[3] 吴大正. 信号与线性系统分析(第四版). 高等教育出版社,2005,8

[4] 谢嘉奎. 电子线路--线性部分(第四版). 高等教育出版社,2003,2

[5] 陈后金. 信号分析与处理实验. 高等教育出版社,2006,8

七、  附录——设计原理


附录:设计原理

1.心电信号的读取

txt格式的数据文件内容及格式如图1-1所示(以100.txt为例):

图1.1 txt格式心电数据文件

其中文件的第一列为采样时间,第二列是在以MLII这种导联方式所得到的采样数据,第三列式以V5这种导联方式所得到的采样数据,全文件记录了约为10s的心电数据,3600个采样数据,每一行数据之间用Tab符分隔。

由于数据文件中后两列数据是对同一种心电信号进行不同的导联方式所得到的采样数据,所以可以采用任意其中的一种采样数据(比如选择MLII),摒弃另外一种,即可完成对此心电信号的分析。全部的心电文件记录时间约为10s,共计12个左右周期的心电信号。

根据txt格式的数据文件的特点,利用labvIEW提供的I/O文件函数,在本课题中,主要是围绕LabVIEW中的read from spreadsheet file读表单文件函数来设计心电信号的读取部分的VI,并利用XY Graph来对数据做图形化显示。让心电数据文件中的第一列时间数据作为x轴,对应的MLII方式的幅值作为y轴,以此得到绘制的原心电波形。

图1.2 读表单文件函数VI

图1.3读表单文件函数使用举例

实际设计心电信号数据文件时需要注意:

(1)数据文件的前两行为解释说明文字,不是真正的信号数据,读取信号程序要能够自动忽略前两行文字,只读取真正的数字信号数据(严禁自己手动删除原心电数据文件中的前两行数据,必须通过程序来实现忽略前两行文字的目的)。

(2)利用数组函数分别将文件的前两列分别读入一个一维数组。labvIEW默认的从文本文件中读取的数据都是字符串,因此在使用心电信号数据前需要将其转换为数值才可以。注意:第一列时间数据均为0:00.007这种格式,因此需要将字符串0:00.007先转化为字符串0.007,即去除字符串中冒号(:)以前的部分,然后再将其转为数值。

(3)最后利用已经转为数值的分别代表心电信号时间和幅值的两个一维数组,图形化还原原始心电信号波形,在此推荐利用labvIEW中XY Graph。

2.心电信号的线性插值处理

根据上文中提到的插值公式,以此为原理,设计labvIEW程序,对心电信号数据做线性插值处理。插值完以后的数据应该是时间均匀的、以0.001秒为间隔的。

此步骤主要是基于labvIEW中的数组操作函数来实现,建议一定首先熟悉并掌握labvIEW中的所有数组操作函数的作用和操作方法(比如array size函数、index array函数、insert into array函数等)。

其中一种插值方法的思路是:第一步中读取的心电信号数据的时间数据和幅值数据分别存放在一个一维数组中。然后利用for循环结构把所有数据依次读取进来。判断时间数据数组中前后两个相邻的数据间隔是否为0.001s,如果是则判断下一对相邻两个数据;如果间隔大于0.001s则在一个CASE结构里面做插值处理。

注意对时间数据做插值的同时一定不要忘记对幅值数据同样做插值处理,时间数据和幅值数据一定是相互对应的。

3.设计相应的数字滤波器

原心电信号里面是包含有噪声的,因此需要对数字心电信号做一定滤波处理。

LabVIEW提供的IIR滤波器类型有Butterworth、Chebyshev、Inverse Chebyshev、Elliptic和Bessel滤波器。它们都有各自的特点,用途也不尽相同。

LabVIEW还提供了高级IIR和FIR滤波器子面板。在高级面板中,滤波器的设计部分和执行部分是分开的。由于滤波器的设计很费时间,而滤波过程则很快。在含有循环结构的程序中,可以将滤波器的设计放在循环外,将设计好的滤波器参数传递到循环内,在循环内进行滤波,从而提高程序的运行效率。

Labview提供的滤波器函数面板面板位于Functions Palette的Signal Processing| Filters面板下,如图3.1所示。

图3.1 滤波器函数面板

选择合适的滤波器为心电信号设计一个低通和高通滤波器,或者带通滤波器。

4. 频谱分析

应该对线性插值后的心电信号和滤波处理后的心电信号做傅里叶变换,画出其频谱,比对前后差异,分析滤波器性能。

labvIEW中频域分析函数被划分为两个面板:Transforms面板实现的函数功能主要有傅立叶变换、Hilbert变换、小波变换、拉普拉斯变换等;Spectral Analysis面板包含的函数主要包括功率谱分析、联合时频分析等。

图4.1 transforms面板

 

图4.2 spectral analysis面板

5.低通滤波器和FFT举例

信号源由一个正弦信号与一个经过高通滤波的高频信号叠加而成。高通滤波器的截止频率为100Hz,即滤掉频率小于100 Hz的低频噪声分量。信号滤波器为Butterworth滤波器,截止频率设为30Hz,即滤掉频率大于30Hz的噪声分量。从图中可以清楚地看到滤波后的信号基本还原了正弦信号。

图4.3 低通滤波VI程序面板

图4.4 低通滤波VI前面板

相关推荐