2014-03-29 3 views
0

누구나 루프 배열 값 pp1에 대해 pp의 단일 값과 비교하는 방법을 알려 줄 수 있습니까? pp 값이 pp1에 있으면 1을 표시해야합니다 아니면 0으로 보여줘야합니다. 나는 pp1의 마지막 값만을 얻고 있습니다. 코드는 다음과 같습니다.matlab에서 배열의 값을 비교하는 방법

[pp,pf1]=pitchauto(x,fs); 

for ix=1:2 
    V='.wav'; 
    ie=num2str(ix); 
    Stc=strcat(ie,V); 
    [x1,fs1]=wavread(Stc); 
    figure,plot(x1); 
    title('Test Audio'); 
    [pp1,pf1]=pitchauto(x1,fs1); 
end 

if (pp==pp1) 
    msgbox('Matching'); 
else 
    msgbox('Not Matching'); 
end 

정답으로 답장하십시오.

+0

테스트가 루프 뒤에서 이루어 지므로 물론 마지막 항목 만 가져옵니다. 순차적으로 각 항목을 테스트하려면 테스트를 루프 안에 두십시오. – Notlikethat

+0

그 pp 값을 루프 안에 넣어야합니까? –

+0

은'ismember'를 사용합니다. –

답변

0

매번 pp1의 값을 계산하고 아무 것도하지 않고 다음 루프 반복으로 덮어 씁니다. 그것의 사용을 확인하거나 루프 내부 테스트를 넣으려면 :

for ix=1:2 
    V='.wav'; 
    ie=num2str(ix); 
    Stc=strcat(ie,V); 
    [x1,fs1]=wavread(Stc); 
    figure,plot(x1); 
    title('Test Audio'); 
    [pp1,pf1]=pitchauto(x1,fs1); 

    if (pp==pp1) 
     msgbox('Matching', num2str(ix)); % show the index number as msgbox title 
    else 
     msgbox('Not Matching', num2str(ix)); 
    end 
end 

또는 나중에 테스트 할 배열에 pp1의 값을 수집 :

for ix=1:2 
    V='.wav'; 
    ie=num2str(ix); 
    Stc=strcat(ie,V); 
    [x1,fs1]=wavread(Stc); 
    figure,plot(x1); 
    title('Test Audio'); 
    [pp1(ix),pf1]=pitchauto(x1,fs1); % assuming pitchauto returns a scalar 
end 

matchidx = (pp == pp1); 
if any(matchidx) 
    msgbox(strcat('Matching indices: ', num2str(find(matchidx)))); 
else 
    msgbox('Not Matching'); 
end 

스칼라하지 않은 경우 ,이 접근법은 좀 더 어렵습니다. 동일한 크기의 벡터를 수집하기 위해 행렬을 사용하거나, 아무것도 모으기 위해 셀 배열을 사용할 수 있습니다. 그러나이 경우 첫 번째 접근 방식을 고수하는 것이 더 쉽습니다.

+0

고마워요. –

+0

루프가 실행될 때마다 분류 한 첫 번째 코드입니다. 두 번째 코드는 완벽하게 작동합니다. 다시 한번 고마워요. –

관련 문제