How to store data into a matrix?

8 views (last 30 days)
Lara Lirnow
Lara Lirnow on 13 Mar 2017
Answered: Guillaume on 13 Mar 2017
I'm calculating Zerocross (ZCR) and Short term energy (STE) for a signals in a matrix. After I calculate these features I want to store results into one matrix F to contain both features STE and ZCR, like this :
F=[STE1][ZCR1]
[STE2][ZCR2]
[STE3][ZCR3]...
B is 1x59 cell array which cells are matrixes B = {[240x1], [480x1],[960x1] ...} so each cell is another matrix.
So I want my output to be like this
F = [240x1][ZCR1]
[480x1][ZCR2]
[960x1][ZCR3] ...
% first column (e.g.[240x1]) is STE calculation of the first column in B, and second column is a calculation of the Zerocross also of the first column of the cell array B..and so on
How can I get that output? My code is next:
for i=1:length(V)
V=B{1,i}
%zerocross
zcd = dsp.ZeroCrossingDetector;
numZeroCross = step(zcd,V)
ZER{i}=numZeroCross %output for zerocross
%short term energy
winLen=length(V)
energyST = sum(V.^2,winLen)
EN{i}=energyST %output for STE
end
  2 Comments
Jan
Jan on 13 Mar 2017
Matrix B is 1x59 cell array which looks like this
B = {[240x1], [480x1],[960x1] ...} so each cell is a matrix.
This is not easy to understand. What is "B"? If B is a "matrix", it is not a "cell vector". What is the relation between "B" and the shown "F"? What exactly does "[240x1,ZCR1]" mean? What is "ZCR1"?
Lara Lirnow
Lara Lirnow on 13 Mar 2017
Hi, I edited my question. I hope I explained it a bit better. Thank you

Sign in to comment.

Accepted Answer

Guillaume
Guillaume on 13 Mar 2017
I assume that
for i=1:length(V)
is meant to be
for i=1:length(B) %numel instead of length would be safer
otherwise your code makes no sense.
On the same level,
winLen=length(V) %would be 240 for B{1}
energyST = sum(V.^2,winLen) %would sum along dimension 240, so would sum nothing!
is complete nonsense and produces the same result as:
energyST = V.^2;
To answer your question, this should produce the result that you want:
F = cell(numel(B), 2); %preallocate result.
zcd = dsp.ZeroCrossingDetector; %no need to recreate it at each step of the loop
for i = 1:numel(B)
V = B{i}; %simpler and safer than B{i, 1} as it will work whatever the shape of B
F{i, 2} = step(zcd, V);
F{i, 1} = someenergyfunctionof(V);
end

More Answers (1)

Lara Lirnow
Lara Lirnow on 13 Mar 2017
I solved my question. I got that output like this:
F{i} = {energyST,numZeroCross}

Categories

Find more on Shifting and Sorting Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!