Matlab没有在数组中取最后一个数字?

时间:2015-05-07 10:00:05

标签: matlab for-loop

我遇到了Subscripted assignment dimension mismatch问题。

我已经对问题进行了本地化,并确切知道发生了什么,我只是不知道为什么。

这是一段有问题的代码:

mFrames(:,i) = vSignal(round(start:1:frameLength*samplingRate));
start=start+frameShift*samplingRate; 
frameLength = frameLength+frameShift;

我已经检查过debugmode中发生了什么;通常我的mFrames列长度为128,在i=1004之前保持不变。然后,我的列长变为127

我在调试模式下检查了所涉及的值,它根本没有意义发生了什么。在i==1004 start=32097frameLength*samplingRate=32224。 这是127意味着128点的差异,这应该有用。

但是当我指定一个向量A=round(start:1:frameLength*samplingRate)

B=start:1:frameLength*samplingRate

在这两种情况下,我都会得到一个从3209732223的向量。当我放入frameLength*samplingRate matlab时,这已经给了我32224

换句话说,matlab告诉我它正在使用一个数字,但是当我测试时我发现它使用的是另一个数字。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:0)

我怀疑你的dnu list -a实际上不是32224。 MATLAB的默认格式只显示如此多的小数位,因此在处理浮点数时,屏幕上打印的内容不一定是" exact"值。

让我们回过头来看一下synatx 32224的工作原理。

x = start:step:end应该以1到1的步长给出数字。公平,这是有道理的。如果我们将最终值设置为略高于10的东西怎么办?

e.g:

1:1:10

好吧,它仍然给我们1:1:10.1,(或1:1:10,1是默认步骤)因为我们的值不能高于终点,所以{{1} } isn' ta correct step。

那么这个:

1:10

剧透:它与11

相同

这个?

1:1:9.99

是的,仍然是1:9

但如果我们这样做:

 1:1:9.9999999

然后使用默认格式,1:9的值将显示在命令行上,并在工作区变量列表中显示为10.0000。

现在,如果a = 9.9999999; a都存储为浮点数,那么您看到frameLength的数字可能不是samplingRate但是略低于此。您可以通过更改默认格式来检查 - 例如32224在命令行 - 显示更多小数位。

最简单的解决方案可能是做:

32224

或者尝试将相关值存储为整数(例如format long)。