将数组分配给函数中的矩阵,语法问题

时间:2015-04-24 15:18:06

标签: matlab matrix

我在Matlab中遇到了语法问题。

我正在尝试将音频信号分成不同的段(帧)。

我想将y轴值返回到矩阵(每个段都有自己的列),以及相应的时间值,每个段都有自己的行。

我甚至无法让它返回一个单列和行对(即一帧)。我只是得到了两个空矩阵。这是我的代码。

function [mFrames, vTimeFrame] = Framing(vSignal,samplingRate,frameLPerc,frameshPerc)


totalTime=size(vSignal,1)/samplingRate

frameLength = totalTime*frameLPerc;
frameShift = totalTime*frameshPerc;

frameNumber =0;
check=frameLPerc;

while check<1
    check = check+frameshPerc;
    frameNumber=frameNumber+1;
end

start = 1;
% problem part
    mFrames = vSignal(round((start:1/samplingRate:frameLength)*samplingRate));
    vTimeFrame = round((start:1/samplingRate:frameLength)*samplingRate);

end

最后,我希望能够将我的整个信号分割成mFrames(i)和vTimeFrame(i)并使用for循环,但不要介意我甚至不能让我的函数返回第一个(如我说空矩阵。)

我知道我的段代码应该是正确的,因为我有另一个脚本使用相同的vSignal(顺便说一下它是一个列向量),工作正常(y == vSignal):

voiced = y(round((1.245:1/Fs:1.608)*Fs));
plot(1.245:1/Fs:1.608,voiced)

我用语法问题命名这个,因为我对matlab很新,习惯于Java。没有初始化任何东西感觉很奇怪,所以我不确定我的代码是否真的有意义。

测试时我输入[m1,m2] = Framing(y,16000,0.1,0.05)。

1 个答案:

答案 0 :(得分:0)

我明白了。

开始不在正确的域中。这是正确的:

轮((开始/采样速率:1 /采样速率:帧长度)*采样速率)

当我绘制(m2,m1)时,我现在得到了正确答案。

我还有另外一个问题,我怎样才能将这些段分配给我的矩阵?

for i=1:frameNumber
    mFrames(:,i) = vSignal(round((start/samplingRate:1/samplingRate:frameLength)*samplingRate));
    vTimeFrame(i) = round((start/samplingRate:1/samplingRate:frameLength)*samplingRate);

    start=start+frameShift; 
    frameLength=frameLength+frameShift;

end

我收到此错误

In an assignment  A(I) = B, the number of elements in B and I must be the same.

就像我说的那样,我试图将y轴数字放在彼此相邻的列中,将x轴放在行中。