So I want to do the following convolution (dirac(t+1)+2*dirac(t-1))*dirac(t-3), but I get a weird value. Normally I would think every thing is shifted with 3 units to the right but the 2*dirac(t-1) stays at t=2 instead of the expected t=4. Why is this?
%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)
The problem is in your second to last line,
t_2 = linspace(-5,5,length(w));
To understand how to fix this line, it should be first noted that conv knows nothing about the time axes. When you compute w = conv(x,y), it is only assumed that
x and y.x and y are thought of as being implicitly extended with zeros to the left and to the right.The result w has a length equal to the length(x)+length(y)-1. This is because conv computes the output with the minimum length that ensures that all values outside that length would necessarily be zero (because of assumption 2). For example,
>> x = [1 1 1];
y = [1 1 1 1];
w = conv(x, y)
w =
1 2 3 3 2 1
As is seen, there is no reference to the time axes in the inputs or in the output. It does not matter, for example, if x starts at t=0 or at t=8. So you need to keep track of the time axes separately. Specifically, if (the specified portions of) x and y start at t=a and t=b respectively, you know that the result w will start at t=a+b. Since you also know the length of w and the time between samples Ts, you can define the time axis for w as a+b + (0:length(w)-1)*Ts.
In your case, since
t = -5:0.1:5;
you are defining x and y with time origin t(1) = 5 and sample spacing t(2)-t(2)= 0.1. So you need to create the time axis for w as follows (replace your second to last line):
t_2 = 2*t(1) + (0:length(w)-1)*(t(2)-t(1));
With this, you will see that the two deltas of x, located at t=-1 and t=1, appear at t=2 and t=4 respectively when you run stem(t_2,w).