For loop in a for loop doesn't work

조회 수: 1 (최근 30일)
Nicola Caldognetto
Nicola Caldognetto 2017년 11월 4일
답변: Nicola Caldognetto 2017년 11월 5일
So I'm playing with audio data and I have created a script which downsamples an audio file. Now I'm trying to write a script that tries to recompose the original audio copying the value of the data lost with the downsampling. This is my script
prompt = 'Specific matrix ';
matrix = input(prompt); %audio matrix 1 column
prompt = 'Specific frequency destination ';
freqdest = input(prompt);
prompt = 'Specific frequency signal ';
frq = input(prompt);
sstep = freqdest/frq;
X=ones(length(matrix)*sstep,1); %creating the new matrix
for n=1:length(matrix) % n counter matrix total
for m=0:sstep-1
X(n+m)=matrix(n);
end
end
The inside for
for m=0:sstep-1
X(n+m)=matrix(n);
end
Seems not working at all. The script creates correctly the matrix with the right dimension but copy all the value of "matrix" in "X" without launch the script for every value. Why? Has someone a solution? Thanks

채택된 답변

Nicola Caldognetto
Nicola Caldognetto 2017년 11월 5일
for n=1:length(matrix) % n counter matrix total
for m=0:sstep-1
X(n+m+h)=matrix(n);
end
h=h+sstep-1;
end
This is the right loop

추가 답변 (3개)

M
M 2017년 11월 4일
You should be careful when manipulating matix.
M(i,j)
returns the value of the ith row and jth column of the matrix.
In your example you just give one argument to your matrices.
  댓글 수: 2
Nicola Caldognetto
Nicola Caldognetto 2017년 11월 4일
Yeah because my matrix has only one column. I have tried also with ,1 but it doesn't work
Walter Roberson
Walter Roberson 2017년 11월 4일
That is okay. The comments indicate that it is a vector with one column.

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


Walter Roberson
Walter Roberson 2017년 11월 4일
X(n+m)=matrix(m);
perhaps? You were always copying the same value, matrix(n)
  댓글 수: 1
Nicola Caldognetto
Nicola Caldognetto 2017년 11월 5일
yeah because the internal loop copy the same value for sstep times but when it ends it should go through the next n values, but it doesn't

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


Jan
Jan 2017년 11월 5일
Use the debugger to find out, what's going on: Set a breakpoint inside the loop and step through the code line by line observing the values of the counters.
for n=1:length(matrix) % n counter matrix total
for m=0:sstep-1
X(n+m)=matrix(n);
end
end
Note that e.g. x(2) is assigned by n=1 and m=1 and by n=2 and m=2. Perhaps you want:
X = repmat(matrix, 1, sstep)
or
X = repelem(matrix, 1, sstep)
or perhaps the same with matrix(:) or a transposition.
  댓글 수: 1
Nicola Caldognetto
Nicola Caldognetto 2017년 11월 5일
Oh I found the bug thanks to your phrase "n=1 and m=1 and by n=2 and m=2" It's my logic error, I will fix it and post the correct code

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

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by