## time shifting

on 20 Feb 2011

### Jan Simon (view profile)

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')
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.

Paulo Silva

### Paulo Silva (view profile)

on 20 Feb 2011

What kind of signal and why use switch statement?
usually switch statements are for more complex problems.

Matt Tearle

### Matt Tearle (view profile)

on 20 Feb 2011

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

### ap singh (view profile)

on 21 Feb 2011

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

### Jan Simon (view profile)

on 21 Feb 2011

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
```

ap singh

### ap singh (view profile)

on 21 Feb 2011

will this program work??
is this right??...

### Walter Roberson (view profile)

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'.

ap singh

### ap singh (view profile)

on 21 Feb 2011

ok but but my college sir told me that square [] are to be put so i put them.... now you hav told me to do it without brackets i will try it.. thnks

### Matt Tearle (view profile)

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?

ap singh

### ap singh (view profile)

on 21 Feb 2011

yes sure i can..

but i am learning the use of the SWITCh statement...

### ap singh (view profile)

on 21 Feb 2011

thanks to

Walter Roberson,Matt,Jan Simon,Paulo Silva for commenting & answering to my question!!!.....

meet u 2mmrw

### ap singh (view profile)

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')
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)"

Jan Simon

### Jan Simon (view profile)

on 22 Feb 2011

Do not access elements out of range:
for i=1+n:1:21+n
==>for i=1+n:min(21+n, length(x))
(a:1:b is the same as a:b)
and
for i=1-n:1:21-n
==>for i=1:21-n
You cannot access x(22) or x(0).

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