数字信号处理实验教案课案_第1页
数字信号处理实验教案课案_第2页
数字信号处理实验教案课案_第3页
数字信号处理实验教案课案_第4页
数字信号处理实验教案课案_第5页
已阅读5页,还剩12页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数字信号处理实验教案数字信号处理实验教案(1112341用)王新民湖北工程学院物理与电子信息工程学院目录数字信号处理实验要求 1预备实验用于信号处理的MATLAB基本操作 2实验一系统响应及系统稳定性 4实验二时域采样与频域采样 9实验三用FFT对信号作频谱分析 13实验四IIR数字滤波器设计及软件实现 18实验五FIR数字滤波器设计与软件实现 23附录 31附录1:MATLAB编程及绘图方法 31附录2:MATLAB矩阵及矩阵的运算 38

信号处理实验要求一、实验课程任务与要求实验目的信号处理实验教学是为了将学生的计算机操作能力、分析能力、软件设计能力与应用实践结合起来,引导学生由浅入深地掌握信号处理理论与开发工具,具备实际应用的信号处理软件开发与制作基础。

2.实验基本要求(以软件设计为主要表现形式)(1)上机前应准备好实验的程序设计算法描述与关键分析内容;(2)准备好程序测试数据和设备操作步骤,上机调试、运行;(3)完成每个实验后进行数据与程序对比分析;(4)递交实验结果的可执行程序、源程序并演示实验结果;(5)写出实验报告。二、实验学时安排预备实验用于信号处理的MATLAB基本操作(3学时)实验一系统响应及系统稳定性(3学时)实验二时域采样与频域采样(3学时)实验三用FFT对信号作频谱分析(3学时)实验四IIR数字滤波器设计及软件实现(3学时)实验五FIR数字滤波器设计与软件实现(3学时)三、实验报告格式姓名:________________学号:_______________实验日期:_______________实验题目:实验目的:实验内容:实验地点:实验结果:(包括列出实验编写的所有文件及各项实验结果的曲线,并加注必要的说明)结果分析:(包括回答实验指导书中提出的问题)总结:四、实验考核(1)实验预习报告;(2)实验签到;(3)上机实际操作;(4)实验设计报告;五、教材及参考书1.教材:[1]高西全,丁玉美.数字信号处理(第三版)西电出版社,2008.32.参考书:[1]张志勇等.MATLAB教程R2010a.北京航空航天大学出版社.2010.8[2]陈怀琛等.MATLAB及在电子信息课程中的应用.电子工业出版社.2002[3]程佩清.数字信号处理教程[M].清华大学出版社.2003预备实验用于信号处理的MATLAB基本操作=1\*Arabic1.实验目的:学习和掌握MATLAB最基本的矩阵运算与绘图工具。学习用MATLAB实现信号处理的基本操作。=2\*Arabic2.实验步骤:熟悉MATLAB的使用环境和方法。练习使用基本的向量生成、矩阵运算、绘图等语句。利用冒号(:)生成向量X1=[12345]X2=[1.0001.5002.0002.500]X3=[54321]分别生成3*3,3*4的全0矩阵,全1矩阵和随机矩阵分别输入矩阵1231.01.11.2A=456B=2.02.12.27893.03.13.2分别计算A+B,A-B,A+3,A-4,A*B,A.*B,C=inv(A),A/B,A./B分别计算sin(x1),cos(x1),exp(x1),lg(x2),sqrt(x2)=3\*Arabic3.实验说明向量的生成利用冒号(:)生成向量X=j:k(j<k)生成X=[j,j+1,j+2,…,k-1,k]X=j:I:k如果I>0且j<k或I<0且j>k,则生成向量X=[j,j+I,j+2I,…,k-I,k]如果I<0且j>k,则生成向量X=[j,j+I,j+2I,…,k]例X1=1:5X1=[12345]X2=1:0.5:3X2=[1.0001.5002.0002.5003.000]X3=5:-1:1X3=[54321]矩阵的生成Zeros生成全0阵B=Zeros(n)生成n*n的全0矩阵B=Zeros(m,n)生成m*n的全0矩阵B=Zeros(Size(A))生成与与矩阵A大小相同的全0矩阵注:m,n必须是一个非负数ones生成全1阵rand生成均匀分布的随机阵二矩阵的算术运算加法和减法对于同维矩阵指令的A+BB对于矩阵和标量(一个数)的加减运算,指令为:A+39乘法和除法运算A*B是数学中的矩阵乘法,遵循矩阵乘法规则A.*B是同维矩阵对应位置元素做乘法B=inv(A)是求矩阵的逆A/B是数学中的矩阵除法,遵循矩阵除法规则A./B是同维矩阵对应位置元素相除另表示矩阵的转置运算三.数组函数下面列举一些基本函数,他们的用法和格式都相同。Sin(A),cos(A),exp(A),log(A)(相当于ln)Sgrt(A)开平方abs(A)求模real(A)求实部imag(A)求虚部式中A可以是标量也可以是矩阵例:利用等差向量产生一个正弦值向量t=0:0.1:10A=sin(t)PLot(A)这时候即可看到一个绘有正弦曲线的窗口弹出另:每条语句后面加“;”表示不要显示当前语句的执行结果不加“;”表示要显示当前语句的执行结果。练习:t=0:0.01:1;y=sin(2*pi*t);plot(t,y);xlabel('0-1');ylabel('-1-1');text(0.6,0,'y=sin(2*pi*t)');H=legend('sin');四.绘图(二维绘图)格式1:plot(y);%绘连续曲线图。stem(y);%绘离散序列波形图。y是一个数组,给出线性直角坐标的二维图,以y中元素的下标作为横坐标,y中元素的值作为纵坐标,一一对应画在平面图上。(默认为点点之间用直线连接起来)格式2:plot(x,y);%绘连续曲线图。stem(x,y);%绘离散序列波形图。x,y都是数组,且具有相同的长度,以x元素为横坐标,y元素的值为纵坐标,一一对应画在平面图上线型、点型和颜色:MATLAB会自动设定所画曲线的颜色和线型。可自动设置,在输入变量组后,加一个引号,在引号内部放入线型和颜色的标识符。格式:3:plot(x,y,’*b’);%绘连续曲线图。stem(x,y,’*b’);%绘离散序列波形图。下面给出常用选项。r红,g绿,b蓝,y黄,m洋红,c青,w白,k黑,━实线,┅┅虚线,*用星号标数据点,用点标o(字母‘o‘)用圆圈标,x(字母’x‘)用叉标,-.点划线,下面给出窗口分割语句subplot(x,y,n)将一个窗口分割成x行,y列共x*y个窗口例subplot(3,2,2)分割3*2个窗口。五.阅读材料附录1MATLAB编程及绘图方法附录2MATLAB矩阵及矩阵的运算附录1:MATLAB编程及绘图方法1.1MATLAB变量1.1MATLAB通过变量名来调用变量,变量的命名规则同C语言:以字母开头,由字母、下划线和数字组成,注意区分大小写,长度不超过31个。1.2MATLAB常用运算符(如表1)1.2表1常用运算符算术运算符运算功能+加法-减法/(./)矩阵右除(矩阵元素右除)\(.\)矩阵左除(矩阵元素左除)*(.*)矩阵乘(矩阵元素乘)∧(.∧)矩阵求幂(矩阵元素求幂)()优先运算,下标,输入变量[]生成矩阵,放输出变量%注释符‘矩阵求共轭转置关系运算符运算功能==等于~=不等于<=小于等于>=大于等于>大于<小于逻辑运算符运算功能&逻辑与|逻辑或~逻辑非1.3MATLAB常用的数学运算函数1.3表2常用数学运算函数常用运算函数名运算功能sin(x)正弦cos(x)余弦tan(x)正切exp(x)指数imag(x)复数的虚部real(x)复数的实部conj(x)复数的共轭log(x)、log2(x0、log10(x)以自然数e(2、10)为底的对数sqrt(x)平方根round(x)四舍五入取整max(x)取数组的最大值min(x)取数组的最小值mean(x)取数组的平均值std(x)取数组的标准差sum(x)数组求和说明:函数的调用格式为:[输出参数1,输出参数2,…]=函数名(输入参数1,输入参数2,…)1.41.4MATLAB常用作图函数表3常用作图函数函数名图形表现形式plot(x),plot(x,y)将点用线连起来的连续波形stem(x)离散序列波形subplot(n1,n2)将图形窗口分隔为n1*n2个hold保留目前图形figure(n)打开一个新的图形窗口grid画成网格形title(‘字符串’)给图形加标题xlable(‘字符串’)给图形窗口x轴加标题xlable(‘字符串’)给图形窗口y轴加标题(1)绘制直角坐标中的二维曲线:格式1:plot(y)y是一个数组,给出线性直角坐标的二维图,以y中元素的下标作为横坐标,y中元素的值作为纵坐标,一一对应画在平面图上。(默认为点点之间用直线连接起来)格式2:plot(x,y)x,y都是数组,且具有相同的长度,以x元素为横坐标,y元素的值为纵坐标,一一对应画在平面图上线型、点型和颜色:MATLAB会自动设定所画曲线的颜色和线型。可自动设置,在输入变量组后,加一个引号,在引号内部放入线型和颜色的标识符。格式:3:plot(x,y,’*b’)例如:画平面图,在命令窗口输入:>>X=1:5;>>Y=[0.7,0.5,0.2,-0.4,0.6];>>plot(X,Y)%画连线图,见图1.1>>plot(X,Y,'*')%画散点图,见图1.2图1.2散点波形图工作空间窗口图1.1连续波形图工作空间窗口图1.2散点波形图工作空间窗口图1.1连续波形图工作空间窗口(2)多条曲线的绘制格式1:plot(x,[y1;y2;…]),若x(列或行)与y=[y1;y2;..]中的(列或行)具有相同的长度,则y的行或列数就是曲线的个数,自动给出曲线的颜色。t=0:0.5:4*piy1=exp(-0.1*t).*sin(t)y2=exp(-0.1*t).*sin(t+1)plot(t,[y1;y2])格式2:用hold命令,在画完前一张图后用hold命令保持住。t=0:0.5:4*piy1=exp(-0.1*t).*sin(t)y2=exp(-0.1*t).*sin(t+1)plot(t,y1)holdonplot(t,y2,’g’)注意及时解除保持状态,即键入holdoff,否则,以后的图都会叠加在此图上,造成混乱。格式3:在plot后使用多输入变量plot(x1,y1,x2,y2,…,xn,yn)每对数组可以绘出一条曲线。t=0:0.5:4*piy1=exp(-0.1*t).*sin(t)y2=exp(-0.1*t).*sin(t+1)plot(t,y1,t,y2,’g’)格式4:用plotyy命令,设有两个纵坐标t=0:0.5:4*piy1=exp(-0.1*t).*sin(t)y2=exp(-0.1*t).*sin(t+1)plotyy(t,y1,t,y2)(3)图象屏幕控制命令图象屏幕可开可关,可以打开几处图形窗,也可以在一个图象窗内画出几幅分图等。格式1:figure(n):打开图形窗。MATLAB中的第一幅图随plot命令自动打开,以后的plot命令都画在同一张图上。如果要画在另一张新图上,就要用figure命令打开新的图形窗口。打开后,需要指明画在哪张图上,否则,所有的图都会画在最后显示的那幅图上。格式2:clf:清除当前图形窗的内容格式3:close:关闭当前图形窗格式4:closeall:关闭所有图形窗格式5:subplot(n,m,p)将图象窗口分为n*m个子图,在p个子图处绘制图形t=0:0.5:4*pi;y=exp(-0.1*t).*sin(t);subplot(2,2,1);stem(t,y);title(‘stem(t,y)’);subplot(2,2,2);stairs(t,y);title(‘stairs(t,y)’);subplot(2,2,3);bar(t,y);title(‘bar(t,y)’);subplot(2,2,4);fill(t,y,’r’);title(‘fill(t,y)’);1.51.5与大多数计算机语言一样,MATLAB提供了设计程序所必须的三种基本程序结构:顺序结构、循环结构及分支结构。eq\o\ac(○,1)顺序结构MATLAB的顺序结构就是由表达式构成的语句,语句之间用逗号或分号隔开,这些语句按顺序执行。当表达式后面接分号时,表达式的结果不显示出来,保留在内存中。eq\o\ac(○,2)循环结构MATLAB的循环结构就是根据一定的条件多次重复执行的一段指令。循环控制由for和while语句实现。for-end循环for语句的基本格式为:for循环变量=表达式1:表达式2:表达式3循环语句组end说明:表达式1的值是循环变量的初值表达式2的值是每执行一次循环变量要增加的值表达式3的值是用来判断循环变量是否介于表达式1和表达式3之间,,如果条件满足则执行循环,如果条件不满足则结束循环。举例:1.利用for循环求离散傅立叶变换(DFT)。部分源程序如下:N=length(x);X=zeros(1,N);fork=0:N-1forn=0:N-1X(k+1)=X(k+1)+x(n+1)*exp(-j*2*pi/N*n*k);endendwhile-end循环while语句的基本格式为:while条件循环语句组end说明:while语句的执行方式为:判断条件成立否,执行循环语句组,执行后再判断条件是否成立,如果不成立就结束循环。eq\o\ac(○,3)分支结构if-else-end结构最简单的格式为:if条件表达式表达式为真时的语句组end如果再多一个分支,格式为:if条件表达式表达式为真时的语句组else表达式为假时的语句组end如果有多个程序分支,可以用switch语句,格式为:switch条件表达式case值1表达式的值=值1为真时的语句组case值2表达式的值=值2为真时的语句组otherwise上述结果为假时的语句组endeq\o\ac(○,3)程序的优化循环程序优化要尽可能使用向量或矩阵编程,而不是像在其它语言中对向量或矩阵的元素编程,这样做,不但可以使程序较短,而且大大提高执行的效率。例如:一般循环编程,存为ex_1.mx=1;fork=1:1001y(k)=log10(x)x=x+0.01end改为向量化编程,存为ex_2.mx=1:0.01:10;y=log10(x);比较这两个M文件的运行时间,在命令窗口运行:>>tic>>ex_1>>tocelapsed_time=0.3800>>tic>>ex_2>>tocelapsed_time=0前一个用时0.38秒,而后一个几乎无等待。数组的优化数组的预定义可以提高内存的利用率,不使用预定义,数组的多次扩维会增加内存的碎片。例如:一个不预定义的循环程序存为ex_3.mfork=1:100r(k)=rank(magic(k));end改为一个预定义的相同运算的程序存为ex_4.mr=zeros(100,1);fork=1:100r(k)=rank(magic(k));end在命令窗口运行,比较两个文件的运行时间ex_3.m>>tic>>ex_3>>tocelapsed_time=1.1000>>tic>>ex_4>>tocelapsed_time=1.0400前一个用时比后一个长。附录2:MATLAB矩阵及矩阵的运算简易矩阵矩阵须用中括号[]将元素置于其中。阵列为一维元素所构成,而矩阵为多维元素所组成:例如>>x=[12345678];%一维1×8阵列>>x=0:0.02:1;%以起始值=0、增量值=0.02、终止值=1的矩阵(阵列),又称为冒号运算>>x=linspace(0,1,100);%利用linspace函数,起始值=0,终止值=1,以等间隔(1-0)/100划分,元素数目为100。提取矩阵中的元素A(i,j)表示矩阵A的第i行、第j列交叉点处的元素;得到矩阵A第三行第二列的元素>>A=[1,2,3,4,5;6,7,8,9,10;11,12,13,14,15];>>AA=123456789101112131415MATLAB的序号排列从第一列第一行到第一列最后一行,直至最后一列最后一行>>A(6)MATLAB的序号排列从第一列第一行到第一列最后一行,直至最后一列最后一行12A(u,v)提取A的子矩阵,u,v是两个向量,分别指定行与列;调用格式:A(L1,:)表示提取A的L1指定的行、所有列;A(:,L2)表示提取A的所有行,L2指定的列;A(L1,L2)表示提取A的L1指定的行,L2指定的列构成子矩阵。例2:提取矩阵A的子矩阵:>>A([1,3],:)%提取A中第1和第三行所有的列元素ans=123451112131415>>A(:,[2,4,5])%提取A中第2,4,5列所有的行元素ans=2457910121415例3:将向量中满足不超过0.5的元素提取出来>>rand(‘seed’,0);%把均匀分布的伪随机发生器置为初始状态>>x=rand(1,10);%产生1X10的均布随机矩阵>>x=Columns1through60.95010.23110.60680.48600.89130.7621Columns7through100.45650.01850.82140.4447>>L=x<=0.5;>>x=x(L)x=0.23110.48600.45650.01850.4447例4删除A的2,4,6列>>A=[1,2,3,4,5,6;7,8,9,10,11,12;13,14,15,16,17,18];>>A(:,[2,4,6])=[]A=1357911131517例5将A扩展为4X4的矩阵>>A(4,4)=0A=1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论