使用 matlab 进行卷积 2 dirac delta

问题描述 投票:0回答:1

所以我想做以下卷积

(dirac(t+1)+2*dirac(t-1))*dirac(t-3)
,但我得到了一个奇怪的值。通常我会认为每件事都向右移动 3 个单位,但
2*dirac(t-1)
保持在 t=2 而不是预期的 t=4。这是为什么?

%Chapter 3_a
clear all 
close all
clc

%% excercise 3

t = -5:0.1:5;
x_1 = dirac(t+1);
idt = x_1 == Inf; % find Inf
x_1(idt) = 1;     % set Inf to finite value


x_2 = 2*dirac(t-1);
idt = x_2 == Inf; % find Inf
x_2(idt) = 1;     % set Inf to finite value

figure
x = x_1 + x_2;
stem(t,x)
hold on

figure
y = dirac(t-3);
idt = y == Inf; % find Inf
y(idt) = 1;     % set Inf to finite value
stem(t,y)

figure
w = conv(x,y)
t_2 = linspace(-5,5,length(w));;
stem(t_2,w)
matlab convolution
1个回答
0
投票

问题是

conv
对时间轴一无所知。当您计算
w = conv(x,y)
时,仅假设

  1. 对于输入 x
    y
    ,样本之间的
    时间是恒定的
  2. 有限序列
    x
    y
    可以被认为是用零向左和向右隐式扩展。

计算结果

w
的长度等于
length(x)+length(y)+1
。这是因为
conv
使用 最小长度 计算输出,确保该长度之外的所有值都必然为 0(因为假设 2))。

例如,

x = [1 1 1];
y = [1 1 1 1];
w = conv(x, y);

给予

w =
     1     2     3     3     2     1

请注意,输入或输出中没有参考时间轴。例如,如果

x
开始于 t=0 或t=5,这并不重要。您需要单独跟踪时间轴。具体来说,如果
x
y
(的指定部分)分别从 t=at=b 开始,您就知道结果
w
将从 t= 开始a+b。由于您还知道
w
的长度和样本
Ts
之间的时间,因此您可以将
w
的时间轴定义为
a+b + (0:length(w)-1)*Ts

在你的例子中,因为你有

t = -5:0.1:5;

您正在定义

x
y
,时间原点
t(1)
= 5,样本间距
t(2)-t(2)
= 0.1。因此,您需要为
w
创建时间轴 as

t_2 = 2*t(1) + (0:length(w)-1)*(t(2)-t(1));

这样,当您运行

x 时,您将看到位于 
t=-1 和 t=1 的 stem(t_2,w) 的两个增量分别出现在 t=2 和 t
=4 处
.

© www.soinside.com 2019 - 2024. All rights reserved.