MATLAB Answers

How do I take the 'left' side of a matrix? (row-wise)

4 views (last 30 days)
Niels van Dalen
Niels van Dalen on 30 Jun 2020
Commented: Niels van Dalen on 30 Jun 2020
General question:
imagine my matrix being:
a =
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
then i want to get a matrix:
b =
1 2 3
1 2 3
1 2 3
More specifically:
I have a matrix of size n x 59577, a for loop adds a new row of data to the matrix depending how many audio files are being read.
numSamples = 59577; %the length of the audio files in samples
files = [1,3]; %These numbers can be chosen (values point to a different audio file)
nLoadedFiles = length(files);
for ii = 1:nLoadedFiles
%Get the audio samples from the cell array and store them as rows in 'samples'
samples(ii,:) = audioData{files(ii)};
%Take the fft of all loaded samples
ffts(ii,:) = fft(samples(ii,:));
SSBs(ii,:) = ffts(ii(1:numSamples/2),:); %This gives: Index exceeds the number of array elements (1).
%So im looking for how to declare
SSBs = %SHOULD BE A COPY OF THE ROWS IN FFTS, BUT THEN ONLY THE FIRST HALF, IE. (1:numSamples/2)
end
Maybe the error is caused by numSamples being odd? (59577)

  0 Comments

Sign in to comment.

Answers (1)

KSSV
KSSV on 30 Jun 2020
For your first example:
b = a(:,1:3) ;
If A is your matrix..if your first first n columns
B = A(:,1:n) ;
If you want first n rows..
C = A(1:n,:) ;

  3 Comments

Niels van Dalen
Niels van Dalen on 30 Jun 2020
I get this, I think I'm going wrong at the row indexing as
SSBs(ii,:) = ffts(ii(1:numSamples/2),:)
Or maybe at the fact that numSamples/2 = 29788.5 ? (which doesn't seem like a proper index XD)
KSSV
KSSV on 30 Jun 2020
Yes theindex is a fraction..you will get error..use
SSBs{ii} = ffts(1:round(numSamples/2),:) ;

Sign in to comment.

Tags