您好,欢迎来到爱go旅游网。
搜索
您的当前位置:首页matlab序列的运算

matlab序列的运算

来源:爱go旅游网


matlab序列的运算

实验三 序列的运算

一、实验内容

1、序列的乘积:仿真并完成例题1.22

2、序列的移位:编写seqshift()函数,实现序列的移位,并作图验证。

3、序列的卷积:编写convwthn()函数,实现具体序列的卷积,并且进行理论计算,比较结果。

4、序列的相关:仿真并完成例题1.24

二、MATLAB仿真 1、序列的乘积

解:

function [y,n] = seqadd(x1,n1,x2,n2) n=min((n1),min(n2)):max((n1):max(n2)); y1=zeros(1,length(n));y2=y1;

y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; y=y1+y2;

function [y,n] = seqmult(x1,n1,x2,n2); n=min((n1),min(n2)):max((n1):max(n2)); y1=zeros(1,length(n));y2=y1;

y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; y=y1.*y2;

代码:

clc;clear all;

x1=[1,3,5,7,6,4,2,1];ns1=-3; x2=[4,0,2,1,-1,3];ns2=1; nf1=ns1+length(x1)-1; nf2=ns2+length(x2)-1; n1=ns1:nf1; n2=ns2:nf2;

n=min(ns1,ns2):max(nf1:nf2); y1=zeros(1,length(n));y2=y1;

y1(find((n>=ns1)&(n<=nf1)==1))=x1; y2(find((n>=ns2)&(n<=nf2)==1))=x2; ya=y1+y2; ym=y1.*y2;

2

subplot(221);

stem(n1,x1,'*','r'); ylabel('x1(n)'); grid;

subplot(223);

stem(n2,x2,'*','r'); xlabel('n');

ylabel('x2(n)'); grid;

subplot(222);

stem(n,ya,'*','r'); ylabel('y1(n)+y2(n)'); grid;

subplot(224);

stem(n,ym,'*','r'); xlabel('n');

ylabel('y1(n)*y2(n)'); grid;

如图1所示。

clc;clear all;

x1=[1,3,5,7,6,4,2,1]; ns1=-3;

x2=[4,0,2,1,-1,3]; ns2=1;

nf1=ns1+length(x1)-1; nf2=ns2+length(x2)-1; n1=ns1:nf1; n2=ns2:nf2;

[ya,n] = seqadd(x1,n1,x2,n2); [ym,n] = seqmult(x1,n1,x2,n2); subplot(221);

stem(n1,x1,'*','r'); ylabel('x1(n)'); grid;

subplot(223);

stem(n2,x2,'*','r'); xlabel('n');

ylabel('x2(n)'); grid;

subplot(222);

stem(n,ya,'*','r');

3

ylabel('y1(n)+y2(n)'); grid;

subplot(224);

stem(n,ym,'*','r'); xlabel('n');

ylabel('y1(n)*y2(n)'); grid;

图1

4

2、序列的移位 解:

function [y,ny] = seqshift(x,nx,m) ny = nx+m; y = x;

代码:

clc;clear all x=[1,2,3,4,5]; nx=-2:2; m=2; %

向右移2个单位

[y,ny] = seqshift(x,nx,m); subplot(211);

stem(nx,x,'*','r'); title('

原序列x(n)');

xlabel('n'); ylabel('x(n)'); subplot(212);

stem(ny,y,'*','r'); title('

移位后序列y(n)');

xlabel('n'); ylabel('y(n)'); grid;

如下图2所示:

5

图2

3、序列的卷积 解:

function [y,ny] = convwthn(x,nx,h,nh) ny1 = nx(1)+nh(1);

ny2 = nx(end)+nh(end); y = conv(x,h); ny = (ny1:ny2);

代码:

clc;clear all;

x = [1,2,3,-1,-2]; nx = -1:3;

h = [2,2,1,-1,4,-2]; nh = -3:2;

[y,ny] = convwthn(x,nx,h,nh); stem(ny,y,'*','r'); xlabel('n'); ylabel('y(n)'); grid;

x(n)与h(n)相卷积得到的图形如图3所示:

6

图3

4、序列的相关 解:

function [y,ny] = convwthn(x,nx,h,nh) ny1 = nx(1)+nh(1);

ny2 = nx(end)+nh(end); y = conv(x,h); ny = (ny1:ny2);

7

代码:

clc;clear all

x = [2,1,3,2,1,5,1]; nx = 1:7;

y = [2,1,3,4]; ny = 1:4;

N1 = length(x)-1; N2 = length(y)-1;

rxy = convwthn(fliplr(y),-ny,x,nx); k = -(N2):N1;

stem(k,rxy,'*','r'); xlabel('n');

ylabel('rxy(n)'); title('

x(n)与y(n)之间的互相关');

axis([-N2,N1,0,35]); grid;

8

图4

9

三、实验小结

通过这次实验使我知道序列的卷积可以通过matlab实现。Matlab里本身有丰富的库函数,画图,求卷积各种运算只要调用相应的库函数即可。本次实验的难点就在conv()函数和各序列长度的计算,如果不注意其中的计算关系很容易出错。而conv()函数只要写错,后面的图形就不能准确的绘制出来。

10

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- igat.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务