当代五大奢侈品:
彼此深爱的灵魂伴侣
规律的安稳平和的睡眠
有属于自己独立的空间和时间
任何时候都真正懂你的人
能够点燃他人并时刻充满希望的心
文章目录
一、常用序列的图形表示
1. 单位抽样序列和单位阶跃序列
编写函数
function [x,n]=impseq(n0,n1,n2)
%产生x(n)=delta(n-n0);n1=n0=n2
%-------------------------------
%[x,n]=impseq(n0,n1,n2)
%
if((n0<n1)||(n0>n2)||(n1>n2))
error('参数必须满足n1=n0=n2')
end
n=n1:n2;
%x=[zeros(1,(n0-n1)),1,zeros(1,(n2-n0))];
x=(n-n0)==0;
function [x,n]=stepseq(n0,n1,n2)
%产生x(n)=u(n-n0);n1=n0=n2
%-------------------------------
%[x,n]=stepseq(n0,n1,n2)
if((n0<n1)||(n0>n2)||(n1>n2))
error('参数必须满足n1=n0=n2')
end
n=n1:n2;
%x=[zeros(1,(n0-n1)),ones(1,(n2-n0+1))];
x=(n-n0)>=0;
MATLAB脚本绘图
clear;
n1=-5:5;
x1=impseq(0,-5,5); %调用函数 改变第一个数字的值可以使之在不同的位置出现脉冲
%stem函数显示茎秆图
subplot(2,1,1);stem(n1, x1, 'r', 'filled');axis([-5,5,0,1.2]);title('单位抽样序列 \delta(n)');
xlabel('n1');
x2=stepseq(0,0,10); %调用函数 第一个数字为从不同位置开始的阶跃,后两个为范围
n2=0:10;
subplot(2,1,2);stem(n2, x2, 'g', 'filled');axis([0,10,0,1.2]);title('单位阶跃序列 u(n)');
xlabel('n2');
运行效果如下:
2. 矩形序列和正弦序列
clear;
n=0:10;
x3=stepseq(0,0,10)-stepseq(5,0,10); %0—4的矩形序列
subplot(2,1,1);stem(n, x3, 'g', 'filled');axis([0,10,0,1.2]);title('矩形序列');
xlabel('n');grid on;
n=0:22;
x4=sin(0.3*n);
subplot(2,1,2);stem(n, x4, 'r', 'filled');axis([0,25,-1.2,1.2]);title('正弦序列');
xlabel('n');grid on;
运行效果如下:
3. 实指数序列
clear;
n1=-2:10;
% 实指数序列
x1=(0.8).^n1; % a<1
subplot(3, 1, 1);
stem(n1, x1, 'g', 'filled');axis([-2, 10, 0, 2]);
title('a<1');
x2=(1.2).^n1; % a>1
subplot(3, 1, 2);
stem(n1, x2, 'r', 'filled');axis([-2, 10, 0, 8]);
title('a>1');
x3=(1).^n1; % a=1
subplot(3, 1, 3);
stem(n1, x3, 'b', 'filled');axis([-2, 10, 0, 1.2]);
title('a=1');
xlabel('n');
运行效果如下:
4. 复指数序列
clear;
n=-2:10;
x=exp((0.4+0.6j)*n); %复指数序列
subplot(211)
stem(n, real(x), 'g', 'filled');
axis([-4,11,min(real(x))-1,1.2*max(real(x))])
title('复指数序列')
ylabel('实部');grid;
subplot(212)
stem(n, imag(x), 'r', 'filled');
axis([-4,11,min(imag(x))-1,1.2*max(imag(x))])
ylabel('虚部');xlabel('n');grid;
5. 延拓5个周期序列
clear;
%延拓5个周期序列出来
x=[1,2,3,4];N=length(x);k=5;
nx=0:N-1;
ny=0:(k*N-1); % 延拓
y=x(mod(ny,N)+1); %mod函数 求余数
subplot(211),stem(nx,x,'g','filled');
axis([-1,N+1,0,5]);grid;
subplot(212),stem(ny,y,'r','filled');
axis([-1,k*N,0,5]);grid;
运行效果如下:
二、序列运算的MATLAB实现
1. 相加和相乘
已知两序列为:x1(n)=[1,3,5,7,6,4,2,1],起始位置ns1=-3;x2(n)=[4,0,2,1,-1,3],起始位置ns2=1,求他们的和ya以及乘积ym
clear;
x1=[1,3,5,7,6,4,2,1];ns1=-3; %给定x1及它的起始点位置ns1
x2=[4,0,2,1,-1,3];ns2=1; %给定x2及它的起始点位置ns2
%求出x1,x2的终点位置nf1,nf2
nf1=ns1+length(x1)-1;
nf2=ns2+length(x2)-1;
%故有nx1=ns1:nf1,nx2=ns2:nf2
n1=ns1:nf1;
n2=ns2:nf2;
n=min(ns1,ns2):max(nf1,nf2); %y的位置向量
y1=zeros(1,length(n));y2=y1; %y1,y2序列的初始化
y1((n>=ns1)&((n<=nf1)==1))=x1; %给y1赋值x1
y2((n>=ns2)&((n<=nf2)==1))=x2; %给y2赋值x2
%序列相加 相乘
ya=y1+y2;ym=y1.*y2;
subplot(221);stem(n1,x1,'m','filled');xlabel('n');title('x1(n)');grid;
subplot(223);stem(n2,x2,'g','filled');xlabel('n');title('x2(n)');grid;
subplot(222);stem(n,ya,'r','filled');xlabel('n');axis([-4,6,0,12]);title('y1(n)+y2(n)');
subplot(224);stem(n,ym,'b','filled');xlabel('n');title('y1(n)*y2(n)');axis([-4,6,0,28]);grid;
运行效果如下:
2. 两有限长序列的卷积运算
求解:x(n)=[1,2,3,-1,-2],nx=[-1,3] 与 h(n)=[2,2,1,-1,4,-2],nh=[-3,2]的卷积
clear;
%计算两序列卷积
x=[1,2,3,-1,-2];nx=-1:3; %有限长序列x 及其范围
h=[2,2,1,-1,4,-2];nh=-3:2; %有限长序列y 及其范围
ny=min(nx)+min(nh):max(nx)+max(nh); %卷积后索引的范围
y=conv(x,h); % 计算卷积的函数
disp(y);disp(ny); %打印结果
%绘图
stem(ny,y,'r','filled');xlabel('n');ylabel('y(n)');
title('x(n) * h(n)');grid;
运行效果如下:
>> test_007
2 6 11 5 -1 -2 7 -8 -6 4 # 卷积后的结果
-4 -3 -2 -1 0 1 2 3 4 5 # 卷积后索引范围
3. 两有限长序列的互相关运算
clear;
%两有限长序列
x=[2,1,3,2,1,5,1];
y=[2,1,3,4];
N1=length(x)-1;N2=length(y)-1;
%计算两序列互相关性
rxy=conv(fliplr(x),y);k=(-N2):N1; %将序列x翻转 算卷积
ryx=conv(fliplr(y),x);k=(-N2):N1; %将序列y翻转 算卷积
%绘图
subplot(211);
stem(k,rxy,'g', 'filled');
title('rxy(n)');
subplot(212);
stem(k,ryx,'r', 'filled');
xlabel('n');title('ryx(n)');
axis([-N2,N1,0,35]);grid;
运行效果如下:
4. 差分方程求解,输入单位抽样序列的输出
输入单位抽样序列,取其长度为6,差分方程为:y(n)-0.5y(n-1)=x(n),初始条件为y(-1)=0,输入为δ(n),求输出y(n)=h(n)
clear;
b=1;a=[1,-0.5];L=6;
[h,n]=impz(b,a,L); %数字滤波器单位抽样响应
y=filter(b,a,[1,0,0,0,0,0]); %直接滤波器
stem(n,h,'r','filled');xlabel('n');title('h(n)'); %绘图
disp(y); %打印输出结果
运行效果如下:
>> test_009
1.0000 0.5000 0.2500 0.1250 0.0625 0.0313
3. 回声检测的MATLAB代码实现
clear;
load mtlb;x=mtlb; %加载mtlb文件 声音文件
M = length(x);
a = 0.9; N = 5000;
x0 = [x', zeros(1, N)];
xN = [zeros(1, N), x'];
y0 = x0 + a.*xN;
subplot(2, 2, 1); stem(x0, 'g.');
title('Signal x[k]'); grid on
subplot(2,2,3); stem(y0,'g.');
title('y[k]=x[k] + 0.9*x[k-N]'); grid on
[Rxx,n] = xcorr(x0,x0); %自相关
subplot(2, 2, 2);
stem(n,Rxx,'r.'); title('Rxx[n]'); grid on
[Ryy,n] = xcorr(y0,y0);
subplot(2, 2, 4);
stem(n,Ryy,'r.'); title('Ryy[n]'); grid on;
运行效果如下: