MATLAB之卷积

文章目录

  • 卷积的物理意义
  • 相关卷积定理
    • 卷积与互相关,自相关函数的关系
    • 卷积与单位脉冲响应的关系
  • 卷积的计算
    • 卷积向量表示形式
    • 卷积矩阵表达形式
    • 基于法一,用MATLAB求X矩阵的三种方法
    • 线性系统三个参数,已知两个求另外一个

卷积的物理意义

输入信号通过一个新兴因果移不变系统后的输出为信号与该系统的冲击响应的卷积。任何一个信号都可以表示为单位冲击信号之和。

相关卷积定理

卷积与互相关,自相关函数的关系

条件:假设系统的输入,输出,和单位脉冲响应分别为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

卷积矩阵表达形式

将上式写成矩阵形式:
法一:
MATLAB之卷积_第1张图片
法二 :
MATLAB之卷积_第2张图片

基于法一,用MATLAB求X矩阵的三种方法


% 功能:用上述的法一用三种方法求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);

你可能感兴趣的:(信号处理)