Cut a continuous signal into frames

Hey everyone,
I have a continuous signal with size 1x400000 (analog data that corresponds to a 20 min signal) and I would like to frames with 1 min each and do some signal processing on each. I wrote this code and tried it for a small matrix but when I increased the size of my matrix matlab was busy for a very long time. So, what is wrong and what can I do to improve it.
The code: t= [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 17 17.01 17.02 17.03 17.4 18];
for i =1:length(t)
if t(i) <= 17
T(i)= t(i);
else
break;
end
end
plot(T, D(1:length(T))) %matrix D corresponds to the amplitude of my signal
when I used t= [1*ones(1,400000) 17 17 17.01 17.02 17.03 17.4 18] with the same code the program just like hanged!!!!
Any help will be appreciated.

4 comentarios

Luffy
Luffy el 7 de Jul. de 2012
t= [1*ones(1,400000) 17 17 17.01 17.02 17.03 17.4 18];
T = t.*(t<=17) + 0*(t>17);
This generated T,but when i wanted to see it in variable editor it got hanged,however it ws able to plot plot(T,T),any other plot it showed out of memory
Image Analyst
Image Analyst el 7 de Jul. de 2012
What does 17 have to do with anything? Is that where you detect the separation of one "frame" from the next "frame"???
Yasmin Tamimi
Yasmin Tamimi el 11 de Jul. de 2012
@Luffy Thanx for the code but I want to cut the signal and not introduce zeros!! The plot was wrong,, but thanx anyway.
Yasmin Tamimi
Yasmin Tamimi el 11 de Jul. de 2012
@Image Analyst It is only a number where I want to cut the signal. In my real scenario I want to cut the signal into frames at multiples of 60.

Iniciar sesión para comentar.

 Respuesta aceptada

Wayne King
Wayne King el 7 de Jul. de 2012
Editada: Wayne King el 7 de Jul. de 2012
I'm guessing by your description, 400000 samples in 20 minutes that your sampling interval is 3 msec. So I'll use that value which gives 20000 samples in 1 minute.
You can just use reshape()
% just making up some data the length of your signal
x = randn(400000,1);
xnew = reshape(x,20000,20);
Now each column of the matrix xnew is a segment (frame) of your signal 1-minute in length, you can now do your processing on the columns of the matrix.
If you have the Signal Processing Toolbox, see the help for buffer() also, which enables you to do the same thing but works when you want some overlap between the columns, or you do not have exactly the number of samples required for reshape.

1 comentario

Yasmin Tamimi
Yasmin Tamimi el 11 de Jul. de 2012
Editada: Yasmin Tamimi el 11 de Jul. de 2012
Thanx it really helped. I have tried another way:
t(t>60)=[];
As for buffer() i'm still trying it to make it work!

Iniciar sesión para comentar.

Más respuestas (0)

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by