前言:
请记住,若系统时不变(Time invariant),则“延迟后的变换=变换后的延迟”
解释:①输入信号x[n]延迟或提前后输入系统得到输出y1[n]
②输入信号x[n]得到输出y[n]后将y[n]延迟或提前与①相同单位,得到y2[n]
③若y1[n] = y2[n]则判时不变,反之则时变
以下用T{x[n]} = x[n]*u[n]演示
源码:
%Time invariant
%延迟后的变换=变换后的延迟
%T{x[n]} = x[n]*u[n]
clc
clear
n = 1:100;
x1 = rand(1,length(n));
[u0,n0] = stepseq(0,1,100);%定义阶跃信号
[xin,nin] = sigshift(x1,n,1);% xin = x[n-1]
[b,nb] = sigmult(xin,n,u0,n0);%延迟后的变换()
[mx1,nx1] = sigmult(x1,n,u0,n0);%T{x[n]}
[you,mn] = sigshift(mx1,nx1,1);%变换后的延迟
if(b - you)<1e-6
disp('Time invariant');
else
disp('Time variant');
end
figure;
subplot(2,1,1)
title('变换后的延迟')
stem(mn,you);
stem(nb,b,'r');
subplot(2,1,2)
title('延迟后的变换')
%stepseq.m
function [x,n] = stepseq(n0,n1,n2)
% Generates x(n) = u(n-n0); n1 <= n <= n2
% ------------------------------------------
% [x,n] = stepseq(n0,n1,n2)
%
close all
n = [n1:n2]; x = [(n-n0) >= 0];%n小于n0逻辑假=0;反之为1;
figure;
stem(n,x);
%sigshift.m
function [y,n] = sigshift(x,m,k)
% implements y(n) = x(n-k)
% -------------------------
% [y,n] = sigshift(x,m,k)
%
n = m+k;%[y,n] = sigshift(x,n,k), n = n+k 自变量n向右移动k个单位
y = x;
%n = -2 :10;
%x = [1 2 3 4 5 6 7 6 5 4 3 2 1];%长13
%figure;
%stem(n,y);
%sigmult
function [y,n] = sigmult(x1,n1,x2,n2)
% implements y(n) = x1(n)*x2(n)
% -----------------------------
% [y,n] = sigmult(x1,n1,x2,n2)
% y = product sequence over n, which includes n1 and n2
% x1 = first sequence over n1
% x2 = second sequence over n2 (n2 can be different from n1)
n = min(min(n1),min(n2)):max(max(n1),max(n2)); % duration of y(n)
y1 = zeros(1,length(n)); y2 = y1; %
y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; % x1 with duration of y
y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; % x2 with duration of y
y = y1 .* y2; % sequence multiplication
输出:
结果证明该系统时不变
结语:
延迟后的变换无法绘制,数组没有错误,如果知道原因的请务必告诉我!
作者学生初接触Matlab与DSP,才疏学浅,不足之处请多指点。