【问题标题】:Assigning arrays to a matrix in a function, syntax problems将数组分配给函数中的矩阵,语法问题
【发布时间】:2015-04-24 23:53:27
【问题描述】:

我在 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

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

我知道我的段代码应该是正确的,因为我有另一个脚本使用相同的 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)。

【问题讨论】:

  • 在我看来,您的方法中几乎没有不需要的东西,例如移帧和 frameNumber。 while循环的目的是什么?使用 vTimeFrames 来索引 vSignal。
  • 就像我说过的那样,我会使用 for 循环来查看整个信号。要知道我必须换班多少次,我有 frameNumber 可以通过 while 循环计算出来。当然,当我查看不同的片段时,我将不得不改变我的起点,这就是为什么 frameShift: 所以 for 循环将是 for i=1:frameNumber (start=start+frameShift)

标签: matlab matrix


【解决方案1】:

我明白了。

start 不在正确的域中。这是正确的:

round((start/samplingRate:1/samplingRate:frameLength)*samplingRate)

当我绘制(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 轴。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2019-03-17
    • 2014-10-07
    • 1970-01-01
    • 2021-07-21
    • 2013-04-06
    相关资源
    最近更新 更多