概述
离散信号和系统分析的MATLAB实现
11.9 离散信号和系统分析的 MATLAB 实现1.9.1 利用 MATLAB 产生离散信号 用 MATLAB 表示一离散序列 x[k]时,可用两个向量来表示。其中一个向量表示自变量 k 的取值范围,另一个向量表示序列 x[k]的值。例如序列 x[k]={2,1,1,-1,3,0,2}可用 MATLAB 表示为K=-2:4;x=[2,1,1,-1,3,0,2]可用 stem(k,f)画出序列波形。当序列是从 k=0 开始时,可以只用一个向量 x 来表示序列。由于计算机内寸的限制,MATLAB 无法表示一个无穷长的序列。例 1-38 利用 MATLAB 计算单位脉冲序范围内各点的取值。4]2[kk在解:%progran 1_1 产生单位脉冲序列Ks=-4;ke=4;n=2;K=[ks:ke];X=[(k-n)==0];Stem(k,x):xlabel(‘k’);程序产生的序列波形如图 1-49 所示。例 1-39 利用 MATLAB 画出信号X[k]=10sin(0.02 )+n[k], k10k的波形。其中 n[k]表示为均值为 0 方差为 1 的 Gauss 分布随机信号。2解:MALAB 提供了两个产生(伪)随机序列的函数。Rand(1,N) 产生 1 行 N 列的[0,1] 均匀分布随机数。 Randn(1,N)产生 1 行 N 列均值为 0 方差为 1 的 Gauss 分布随机数。%program 1_2 产生受噪声干扰的正弦信号N=100;k=0:N;X=10*sin(0.02*pi*k)+randn(1,N+1);Plot(k,x);Xlabel(‘k’);Ylabel(‘x[k]’);程序产生序列如图 1-50 所示。1.9.2 离散卷积的计算离散卷积是数字信号处理中的一个基本运算,MTLAB 提供的计算两个离散序列卷积的函数是 conv,其调用方式为y=conv(x,h)其中调用参数 x,h 为卷积运算所需的两个序列,返回值 y 是卷积结果。MATLAB 函数 conv 的返回值 y 中只有卷积的结果,没有 y 的取值范围。由离散序列卷积的性质可知,当序列 x 和 h 的起始点都为 k=0 时, y 的取值范围为 k=0 至 length(x)+length(h)-2。当序列 x或(和)h 的起始点不是 k=0 时,由例 1-3 知,y 的非零值范围可根据例 1-4 的结论进行计算。3例 1-40 试用 MATLAB 函数 conv 计算例 1-2 中序列的卷积。解:program 1_3 计算离散卷积x=[-0.5,0,0.5,1]; %序列 x 的值kx=-1:2; %序列 x 的取值范围h=[1,1,1];kh=-2:0;y=conv(x,h); %计算卷积k=kx(1)+kh(1):kx(end)+kh(end); %计算 y 的取值范围stem(k,y);xlabel(‘k’);ylabel(‘y’);程序的运行结果如图 1-51 所示。1.9.3 离散 LTI 系统响应 MATLAB 求解许多离散 LTI 都可用如下的线性常系数的差分方程描述(1-151)NnMnkbxkay00][][其中 x[k]、 y[k]分别系统的输入和输出。在已知差分方程的 N个初始状态 y[k], 和输入 x[k],就可由下式迭代计算出系统1k的输出。y[k]=-NnMnnkxbkya10][)/(][)0/(利用 MATLAB 提供的 filter 函数,可方便地计算出上述差分方程的零状态响应。filter 函数调用形式为4y=filter(b,a,x)其中a=[a0,a1,…,aN], b=[bo,b1,…,bM]分别表示差分方程系数。X 表示输入序列,y 表示输出序列。输出序列的长度和序列相同。例 1-40 试用 M=9 点滑动平均系统y[k]= M10][nkx处理例 1-39 中的受噪声干扰的正弦信号。解: 由式(1-151)可知,M 点滑动平均系统可看成是 N=0的差分方程。在调用 filter 函数时,调用参数 a=1,b 为有 M 个元素的向量,b 中每个元素的值均为 1/M。%program 1_4 滑动平均去噪M=9;N=100;k=0:N;s=10*sin(0.02*pi*k);x=s+randn(1,N+1);b=ones(M,1)/M; a=1;y=filter(b,a,x);plot(k,y,s,’:’);xlabel(‘k’);ylabel(‘幅度’ )legend(‘y[k]’,’s[k]’);5程序的运行结果如图 1-52 所示。图中的虚线表示未受噪声干扰的原信号 s[k],实线为 9 点滑动的响应 y[k]。比较图 1-50 的信号可以看出,系统滤出了受干扰信号中的大部分噪声,输出信号相对输入信号有4 个样本的延迟。1.9.4 利用 MATLAB 计算 DTET当序列的 DTET 可写成 的有理多项式时,可用 MATLAB 信号je处理工具箱提供的 freqz 函数计算 DTFT 的抽样值。另外,可用MATLAB 提供的 abs、angle、real 、imag 等基本函数计算 DTFT的幅度、相位、实部、虚部。若 X( )可表示为jeX( )= =je)(jABNjj Maabbo.10则 freqz 的调用形式为X=freqz(b,a,w) (1-153)式(1-153)中的 b 和 a 分别是表示式(1-152)中分子多项式和分母多项式系数的向量,即b=[b0,b1,…,bM]a=[a0,a1,…,aN]w 为抽样的频率点,在以式(1-153)形式调用 freqz 函数时,向量w 的长度至少为 2。返回值 X 就是 DTFT 在抽样点 w 上的值。注意一般情况下,函数 freqz 的返回值 X 是复数。例 1-41 已知离散系统的 H(z)为H(z)= 2121 467.0859.)(467.0859.( )330. zz6试画出该系统的幅度响应。解:%program 1_5 计算系统幅度响应b1=[0.5009 -1.0019 0.5009];b2=[0.5320 1.0640 0.5320];a1=[1.0000 -0.8519 0.4167];a2=[1.0000 0.8519 0.4167];b=conv(b1,b2);%计算 H(z)的分子多项式a=conv(a1,a2);%计算 H(z)的分母多项式w=linspace(0,pi,512);H=freqz(b,a,w);plot(w/pi,abs(H));ylabel(‘幅度’);xlabel(‘Normalized frequency’);系统幅度响应如图 1-531.9.5 部分分式法的 MATLAB 实现MATLAB 的信号处理工具箱提供了一个计算 X(z)的部分分式展开的函数,它的调用形式如下[r,p,k]=resifuez(b,a)其中调用参数 b,a 分别表示用 z 表示 X(z )的分子和分母多项式。1如果 X(z)的部分分式展
最后
以上就是现实狗为你收集整理的matlab离散信号分析,离散信号和系统分析的MATLAB实现的全部内容,希望文章能够帮你解决matlab离散信号分析,离散信号和系统分析的MATLAB实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复