# Created Matlab echo signal: Is it an actual “echo?” Or am I just manipulating the signal to make it seem like an echo?

This is just an outline of what I did (assume that all my dimensions fit):

    (code that imports audio to read audio as function x)
X=fft(x);
(code to define time t and frequency f)

H=L+M*exp(-1i*2*pi*f*N)+O*exp(-1i*2*pi*f*P);
% This is where it gets tricky
% In the frequency domain I have the function above where f is the frequency
% variable and L M N O P are arbitrary values

Y=X.*H;
% again assume dimensions fit

y=real(ifftshift(ifft(Y)*length(t)));
%Taking the inverse fft and fftshift was the only way I could get back a signal
% Once again assume the dimensions fit


Here L M N O P = [.9 .75 1.0 .5 .5]  Is this legit? or am I just pulling my own leg? Is it an actual "echo?" Or am I just manipulating the signal to make it seem like an echo?

• +1 for absolutely ridiculous ASCII plots without any description. One more vote and you will get 11 points... – jojek Jul 19 '14 at 11:54
• By duality, multiplying by a complex sinusoid in the time domain is equivalent to convolving with a delta in the time domain (shift in time), so, yes, I'd expect this to be an echo. Note that it's a shift in a circular time axis, so it will shift in from the start if it goes off the end. H consists of three complex sinusoids (at zero, N, and P cycles per window), so I'd actually expect three images. Not sure where the time reversed image comes from. fftshift seems not appropriate. – dpwe Jul 19 '14 at 15:23
• @dpwe thank you. I also would expect three signals and do not know where the time reversed comes from. I will update when I get to that point. – user3822637 Jul 19 '14 at 19:42
• Thank you! I finally got three time shifted signals. There is quite a bit of noise though. – user3822637 Jul 20 '14 at 3:48

To generate a repetitive echo all you need to do is pass your signal through an appropriate AR filter with a delay corresponding to the echo period. For instance the following code generates (for a damped 1 Hz sinusoid sampled at 100 Hz) an echo which repeats every 1000 samples. The strength of the echo can be adjusted by the AR filter coefficient (0.5 here)

Example Matlab code

% generate 10000 samples of a damped sinusoid at 100 Hz
sig = sin(2*pi*(0:9999)/100).*exp(-(0:9999)/200);

% AR filter to generate a repetitive echo, period 1000 samples (10 seconds)
b = 1;
a= [1 zeros(1,999), 0.5];

echo = filter(b,a,sig);


You may want to experiment with your AR filter to match your echo decay. Also look into 'gapped deconvolution' Addendum to my earlier post - the AR model for echo generation leads to an infinite number of echos (most of them damped out after a while depending upon the filter coefficient). To generate a finite number of echos use the MA approximation to the AR model, which is:

$$H(z) = \frac{1}{1 - az^{-N}}$$

where $|a| < 1.0$, and $N$ is the reverberant delay in samples.

The MA approximation (series expansion) of the AR transfer function $H(z)$ is

$$H_{MA}(z) = 1 + az^{-N} + a^2z^{-2N} + \ldots$$

So, for instance, to generate just one echo you may want to just filter your signal through an MA filter of the form

$$H_{MA}(z) = 1 + az^{-N}$$

To generate two unequally spaced echoes with differing intensities you could, for example, use an MA filter of the form

$$H_{MA,2}(z) = 1 + az^{-N} + bz^{-M}$$

The Matlab code below generates (a) one echo and (b) two unequally spaced echoes

% generate 10000 samples of a damped sinusoid at 100 Hz
sig = sin(2*pi*(0:9999)/100).*exp(-(0:9999)/200);

% MA filter to generate an echo beginning at 1000 samples (10 seconds)
a = 1;
b= [1 zeros(1,999), 0.5];

% generate echo
reverb1 = filter(b,a,sig);

% MA filter to generate two echos beginning at samples 1000 and 3000
a = 1;
b= [1 zeros(1,999), 0.5 zeros(1,1999) 0.25];

% generate signal with 2 echoes
reverb2 = filter(b,a,sig);


The figure below shows the original signal and the signal with echoes suprimposed from the Matlab output • Why not to edit the original answer and join it together, instead of posting from multiple accounts? – jojek Jul 25 '14 at 7:45