输入信号通过一个新兴因果移不变系统后的输出为信号与该系统的冲击响应的卷积。任何一个信号都可以表示为单位冲击信号之和。
条件:假设系统的输入,输出,和单位脉冲响应分别为x(n), y(n), h(n).
Rxy(m) = Rxx(m)*h(m)
对上式进行傅里叶变换,得:
Sxy(w) = Sxx(w)*H(jw)
x(t)*δ(t) = x(t)
x(t)*δ(t-t0) = x(t-t0)
一方不动,另一方前后倒置,从左向右移动,每次移动后重叠部分的乘积,再组合起来即输出信号
h1 h2 h3
x4 x3 x2 x1
已知:
输入信号:x=[x1,x2,x3,x4] 维度:4
系统响应:h=[h1,h2,h3] 维度:3
输出信号:y=[y1,y2,y3,y4,y5,y6] 维度:4+3-1=6
其中:
y1=x1*h1
y2=x1*h2+x2*h1
y3=x1*h3+x2*h2+x3*h1
y4=x2*h3+x3*h2+x4*h1
y5=x3*h3+x4*h2
y6=x4*h3
% 功能:用上述的法一用三种方法求X大矩阵
% 编辑者:lily
% 日期:2019,4,14
clear;
clc;
close all;
% ======================= input signal ==========================
x=[1,2,3,4];
h=[5,6,7];
%求矩阵的向量个数
xn=size(x,2);%求矩阵列数,即几个
hn=size(h,2);
% ============================ 方法1 ====================================
% 原理:按列放
X=zeros(xn+hn-1, hn);%初始化大矩阵
% 观察列的补0规律,求大矩阵X
for ind=1:hn
xi= [zeros(hn-ind,1);x';zeros(ind-1,1)];
X(:,ind)=xi;
end
Y_noconv=X*rot90(h);
Y_noconv = Y_noconv';
conv=conv(x,h);
% ============================ 方法2 ====================================
% 原理:元素一个一个放
X=zeros(xn+hn-1, hn);%初始化大矩阵
for c = hn:-1:1 % 换列
s = hn - c + 1; % 从第几行开始放
m = 1;
for r = s:s + xn - 1 % 换行放元素
X(r,c) = x(m);
m = m + 1;
end
end
% ============================ 方法3 ====================================
% 原理:circshift(x, A).将列矩阵往下移动A个数,将其挪到上面
%第一列的0的个数
Mzeros=zeros(1, hn-1);
%第一列元素
Xvec=[Mzeros, x]';
%构造大矩阵
Xmat = [Xvec];
for c = 1:hn-1
Xvec_shift = circshift(Xvec, -c);
Xmat = [Xmat,Xvec_shift];
end
条件:假设系统的输入,输出,和单位脉冲响应分别为x(n), y(n), h(n).
% 功能:输入信号:x,系统响应h,输出信号y。根据两个求一个
% 用conv,deconv函数,或者写出大矩阵,用矩阵乘法求解
% 编辑者:lily
% 日期:2019,4,14
clear;
clc;
close all;
% ============================ 已知x,h,求y ====================================
x=[1,2,3,4];
h=[5,6,7];
y = conv(x,h); % or y = conv(h,x);
% ============================ 已知x,y,求h ====================================
h1 = deconv(y,x);
% ============================ 已知h,y,求x ====================================
x1 = deconv(y,h);