我遇到了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=32097
和frameLength*samplingRate=32224
。
这是127
意味着128
点的差异,这应该有用。
但是当我指定一个向量A=round(start:1:frameLength*samplingRate)
或B=start:1:frameLength*samplingRate
在这两种情况下,我都会得到一个从32097
到32223
的向量。当我放入frameLength*samplingRate
matlab时,这已经给了我32224
。
换句话说,matlab告诉我它正在使用一个数字,但是当我测试时我发现它使用的是另一个数字。
任何帮助表示感谢。
答案 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
)。