How do I store result from a loop into matrix?

조회 수: 1 (최근 30일)
Syed Farez
Syed Farez 2018년 5월 6일
댓글: Syed Farez 2018년 5월 6일
I have 360 signals to be processed and I'm using STFT for my project. The result for one signal returns:
S = 33x147 double
How do I take only the first column from every 360 signals processed and store it in the same matrix? And how do I make a loop to make it do the same thing but advance to the next column up to the 147th column until I've 147 different matrices of result S?
Thank you in advance.
  댓글 수: 2
Ameer Hamza
Ameer Hamza 2018년 5월 6일
Does your result require 147 matrices at the end? Like this
Result{1} = [first columns of S for all 360 signals] = 33 x 360 matrix
Result{2} = [second columns of S for all 360 signals] = 33 x 360 matrix
....
Result{147} = [147th columns of S for all 360 signals] = 33 x 360 matrix
Syed Farez
Syed Farez 2018년 5월 6일
편집: Syed Farez 2018년 5월 6일
Yes Ameer, exactly like that brother. Sorry for the misguided question. I've corrected it.

댓글을 달려면 로그인하십시오.

채택된 답변

Wick
Wick 2018년 5월 6일
편집: Wick 2018년 5월 6일
The first column of S can be indexed S(:,1). The nth is S(:,n);
Instead of making 360 different matrices with different names, we're going to make a three-dimensional array, A, with 360 different pages.
clearvars
num_rows = 33;
num_signals = 360;
num_pages = 147;
A = zeros(num_results, num_signals, num_pages);
for jj = 1:num_signals
% replace the following line with your calculation of S
S = rand(num_results,num_pages);
A(:,jj,:) = reshape(S,num_results,1,num_pages);
end
Each page of A (the different columns from your values of S pasted together into a matrix) can be indexed as:
page_of_columns = A(:,:,n)
where 'n' is the column id you want (from 1 to 147 in your example)
  댓글 수: 7
Wick
Wick 2018년 5월 6일
편집: Wick 2018년 5월 6일
clearvars
num_rows = 33;
num_signals = 360;
num_pages = 147;
num_results = 1;
A = zeros(num_results, num_signals, num_pages);
% load a .mat file
load ('Defect_Signals_with_Labels.mat');
for jj = 1:num_signals
x = Signals_Combined(:,jj);
.....
S = 20*log10(S + 1e-6);
A(:,jj,:) = reshape(S,num_results,1,num_pages);
end
The assumption is that 'S' is different each time based on whatever is above it inside the loop.
Syed Farez
Syed Farez 2018년 5월 6일
Okay. I think I've got it now and it worked like a charm. Just needed a bit troubleshooting. Thank you very much for your help!! You certainly saved me today Sir. :')

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Signal Processing Toolbox에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by