# Concatinating signals on Matlab

1. Jan 31, 2013

### princess Maro

Hiiiiii Everyone ,

It is My First Post ....And I will be Very pleased if You helped me find a solution to my problem .

well... It is a Matlab code &

I have different type of signals (impulse ,Ramp, sinusoidal,Dc ,exponintial )

& the type of signal is determined by the user ( the user enter a number from 1 to 5) to determine the signal & the user can have multiple selection ..& the user tells me how many time he want to select signals

But The Problem i don't Know how to concatenate the signal .. I tried to make it like this
A=[];
for i=1:c+1
A=[A y(choice)]
end
but an error keeps bothering me
??? In an assignment A(I) = B, the number of elements in B and
I must be the same.

2. Jan 31, 2013

### Simon Bridge

So if you are storing the possible signals in vectors m1 m2 etc, and the user constructed vector is a, then, at each selection, you are doing a=[a,m1] (if type 1 was selected).
I think your error means that you have made a mistake in your assignments to do with the vector size. Check that you are concatenating to the right place with the correct orientation.

But I suspect it is the y(choice) part ... matlab would see that as an assignment of form A(I)=B you see?

i.e.
Code (Text):

7> m=magic(4)
m =

16    2    3   13
5   11   10    8
9    7    6   12
4   14   15    1

8> a=m(1,:)
a =

16    2    3   13

9> a=[a,m(4,:)]
a =

16    2    3   13    4   14   15    1

10> a=[a,m(:,3)]
error: number of rows must match (4 != 1) near line 10, column 6

10> a=[a;m(3,:)]
error: number of columns must match (4 != 8)

To be able to tell what is going wrong for you I need to see the code and the context for the error (the actual error message copy-and-past).

3. Feb 1, 2013

### princess Maro

Thanks Monsieur simone For Your Help :)

But That wasnot the point that i was asking about .. You R Right you have to see the code to be able to see the problem

c=input('enter the number of break point: ');

for n=1:c
m(1,k)=input('enter positions of break point:');
k=k+1;
end
p=[-5 m 3]; % The signal start at -5 & end at 3 & m is the position of the break

for k = 1:c+1
t=linspace(p(1,k),p(1,k+1),(p(1,k+1)-p(1,k))*100); % the frequency =100
if choice==1
g=p(1,k+1)-p(1,k);
y(1)=[4 zeros(1,(g-1))];
end
if choice==2
y(2)=5*ones(1,t);
end
if choice==3
y(3)=3*t+1;
end
if choice==4
y(4)=3*exp(-2);
end
if choice==5
y(5)=5*sin(100*t+30);
end

% Here i want to conatenate all the choosen signals & Plot it With T
% But i can't Write the proper code of concatination

T=linspace(-5,3,(3+5)*100);
A=ones(1,(3+5)*100);

end

4. Feb 1, 2013

### Simon Bridge

I can see a number of problems with the below:

c=input('enter the number of break point: ');

for n=1:c
m(1,k)=input('enter positions of break point:');
k=k+1;
end
... you have not defined k - change the n to a k or the k to an n.

With this change, the output looks like this:
Code (Text):
48> sig
enter the number of break point: 3
enter positions of break point:0.1
enter positions of break point:0.2
enter positions of break point:2
Choose a type

[ 1] y(1)
[ 2] y(2)
[ 3] y(3)
[ 4] y(4)
[ 5] y(5)

pick a number, any number: 1
error: A(I) = X: X must have the same size as I
error: called from:
error:   /home/simon/sig.m at line 15, column 5

line 15 is:
if choice==1
g=p(1,k+1)-p(1,k);
y(1)=[4 zeros(1,(g-1))];
end

consider: what does "y(1)" mean to matlab?

- what do you y to look like?
if you want y to be a row vector containing the signal, then you can build it as you go.
something like:

y=[y,[4 zeros(1,(g-1))] ];

That gets rid of the error but there are other problems.

Work through your loops by hand - pick c=1 and choose 0 so that p=[-5,0,3] and see what happens. Make sure it's what you want to happen.
What happens if the user chooses break point positions out of order? i.e. if c=2, and the first point is 2 and the second is -1?
What happens if the user chooses non-integer break point positions?
I'm guessing you'll work out how to build a horizontal axis later?

-------------------------

[*] Shouldn't that be by Monsieur (Simon) Dupont for French? IIRC: "Simone" is the feminine spelling in French as it is in English so you are kinda implying that you think I'm a girl? Mind you - if I'm an honorary woman then I get to be "right" don't I so... no complaints there ;)

It is masculine in Italian though - for "Signor (Simone) Ponte" or something(?)

Last edited: Feb 1, 2013