所以我想做以下卷积
(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)
问题是
conv
对时间轴一无所知。当您计算 w = conv(x,y)
时,仅假设
x
和 y
,样本之间的时间是恒定的。
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=a 和 t=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 处.