How to plot a time-delayed ersion of a signal ??

cananyone tell me how to plot the time-delayed version of a signal ?
Imagine the simplest case, y=cos(x), I want to delay it by 2 units. But I get some strange results!
clc ; clear all; close all x=(0.00001:0.01:2)*pi; y=cos(x); plot(x,y) hold on [Nrow Ncol]=size(y); m=2; % Delay step z=zeros([Nrow Ncol]); for i=3:Ncol-m j=i-m; z(i,1)=y(j,1);
end plot(z,'r')

1 Comment

Please use code formatting to improve the readability of the code.
"Some strange results" is a vague description only. It is always a good idea to describe the results with as much details as needed to solve the problem.

Sign in to comment.

 Accepted Answer

x=0:0.01:2*pi
y=cos(x)
plot(x,y)
hold on
d=2;
y=[ones(1,d)*nan y(1:end-d)];
plot(x,y,'r')
legend('signal',['delayed signal by' num2str(d) 'units'])

5 Comments

Thanks a lot Paulo, it works; But could you please explain to me what this line in your code is?
y=[ones(1,d)*nan y(1:end-d)];
ones(1,d) creates a vector with just a row and d columns, all values are ones, nan values are not plotted by plot so the code inserts those nan just to fill the first d values, y(1:end-d) removes d elements from the end of y, this is needed so the number of elements of y are equal to the number of elements of x, plot(x,y) requires that in order to work properly.
"nan(1, d)" is nicer and faster than "ones(1, d)*nan".
Thanks a lot :)
x=0:0.01:2*pi y=cos(x) plot(x,y) hold on d=2; y=[ones(1,d)*nan y(1:end-d)]; plot(x,y,'r') legend('signal',['delayed signal by' num2str(d) 'units'])
I tried the above code but no delay signal produced. Both signals superimposed one on top of another!

Sign in to comment.

More Answers (0)

Tags

Asked:

on 31 Mar 2011

Commented:

on 27 Mar 2015

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!