Asked by ap singh
on 20 Feb 2011

i want the program to advance or delay the signal... by taking input from user whether to advance or delay & by what number?.... please use switch statement?.... any signal like-ramp,step,exponential in it i am using subplot to plot the original signal & shifted version of the signal..

i have a program something like this-- *clear all close all clc disp('given function is') x=(-10:10); for i=1:1:21 if(x(i)>0) y(i)=exp(x(i)); else y(i)=0; end end subplot(1,2,1) stem(x,y) disp('enter whether to advance or delay') s=input('1>advance\n 2>Delay') n=input('enter the no of step by which signal is to be shifted') switch(s) case 1 [ for i=1+n:1:21+n if(x(i)>0) y(i)=1; else y(i)=0; end ] case 2 [ for i=1-n:1:21-n if(x(i)>0) y(i)=1; else y(i)=0; end ] subplot(1,2,2) stem(x,y)

but when i run the program it gives error in the 'for' command in case 1.

Answer by Jan Simon
on 21 Feb 2011

Accepted Answer

Omit the square brackets around the case blocks and close the SWITCH and IF blocks with an END.

switch(s) case 1 for i=1+n:1:21+n if(x(i)>0) y(i)=1; else y(i)=0; end end case 2 for i=1-n:1:21-n if(x(i)>0) y(i)=1; else y(i)=0; end end end

Answer by Walter Roberson
on 21 Feb 2011

You cannot have an 'if' statement inside of [] . But you don't need to mark the beginning and end of the code for an individual case: all code is executed until the next 'case' or unmatched 'end'.

Answer by Matt Tearle
on 21 Feb 2011

On top of the syntax issues Walter and Jan point out...

1. Why use `switch`? You could easily use a simple `if`/|else|. But why not just flip the sign of the offset. Something like `n = sign(1.5-s)*n`

2. You can make the unshifted signal in a couple of lines:

y = exp(x); y(x<=0) = 0;

3. What you have in the switches will cause an error because it will try to reference `x(22)` (or higher), but `x` only has 21 elements. What are you trying to do here? I would have thought that what you want mathematically is y(x+dx). In which case you could repeat the above lines with a shifted `x`:

x2 = x + dx; y = exp(x2); y(x2<=0) = 0;

Also, what you have there sets `y` to just 0 or 1, rather than 0 or `exp(x)`. Was that what you intended?

Answer by ap singh
on 22 Feb 2011

as Jan Simon remove square brackets

i have written it like

clear all close all clc disp('given function is') x=(-10:10); for i=1:1:21 if(x(i)>0) y(i)=exp(x(i)); else y(i)=0; end end subplot(1,2,1) stem(x,y) disp('Enter whether to advance or delay') s=input('1>advance\n 2>Delay=\n') n=input('enter the no of step by which signal is to be shifted=') switch(s) case 1 for i=1+n:1:21+n if(x(i)>0) y(i)=exp(x(i)); else y(i+n)=0; end end case 2 for i=1-n:1:21-n if(x(i)>0) y(i)=exp(x(i)); else y(i-n)=0; end end end subplot(1,2,2) stem(x,y)

**but still gives error as**

" given function is Enter whether to advance or delay 1>advance 2>Delay= 1

s =

1

enter the no of step by which signal is to be shifted=1

n =

1

??? Attempted to access x(22); index out of bounds because numel(x)=21.

Error in ==> Untitled2 at 21 if(x(i)>0)"

please help...

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today
## 3 Comments

## Paulo Silva (view profile)

Direct link to this comment:https://www.mathworks.com/matlabcentral/answers/1661-time-shifting#comment_3083

What kind of signal and why use switch statement?

usually switch statements are for more complex problems.

## Matt Tearle (view profile)

Direct link to this comment:https://www.mathworks.com/matlabcentral/answers/1661-time-shifting#comment_3089

Can you please explain in more detail what you're trying to do? Do you have a time base vector t and a signal y(t) and you want the user to input a dt... and then do... what with it exactly?

## ap singh (view profile)

Direct link to this comment:https://www.mathworks.com/matlabcentral/answers/1661-time-shifting#comment_3120

i am begneer to matlab...

so Paulo Silva & Matt if you can help me in some more programs i will be very thankfull to u...

i need code to this programm

tell me the problem in the above program

thxs

Log in to comment.