如何在matlab中将数组的值与单个值进行比较

时间:2014-03-29 09:51:53

标签: matlab for-loop compare signals speech

任何人都可以告诉我如何将这个循环数组值pp1与pp的单个值进行比较。如果pp的值出现在pp1中那么它必须显示1或必须显示0.我只得到1 pp1的值。代码是:

[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

请回答正确答案。

1 个答案:

答案 0 :(得分: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

如果值不是标量,那么这种方法有点困难 - 你仍然可以使用矩阵来收集相等大小的向量,或者使用单元格数来收集任何东西 - 但在这种情况下,坚持使用第一种方法可能更容易。