无法执行赋值,因为左侧的大小为 1×256,右侧的大小为 256×256。alpha = 2; beta = 1.5; G = zeros(frameNum, nFFT); for i = 1:frameNum tmpSpec = abs(fft(frames(i, :))).^2; noiseGate = max(tmpSpec - alpha * noiseSpec, 0); SNR = tmpSpec ./ (beta * noiseSpec + eps); G(i, :) = (noiseGate .* SNR ./ (1 + SNR))'; end 怎么改
时间: 2024-01-15 17:05:12 浏览: 238
在代码中,G是一个大小为 frameNum × nFFT 的矩阵,而在循环中,你尝试将一个大小为256×256的矩阵分配给G的一行,因此出现了左右大小不一致的错误。
如果你想要将一个256×1的向量分配给G的一行,你需要对它进行转置。可以通过在最后一个分配语句中添加一个单引号来实现:
```matlab
G(i, :) = (noiseGate .* SNR ./ (1 + SNR))';
```
这将使向量转置为一个大小为1×256的行向量,与G的一行大小相同。
相关问题
无法执行赋值,因为左侧的大小为 256-by-1,右侧的大小为 1-by-128。
这个错误通常出现在使用矩阵运算时,左侧的矩阵维度与右侧的矩阵维度不匹配。在这种情况下,左侧的矩阵应该与右侧的矩阵具有相同的维度,或者右侧的矩阵应该与左侧的某个维度具有相同的大小。
例如,如果左侧的矩阵是一个 256-by-1 的矩阵,右侧的矩阵是一个 1-by-128 的矩阵,那么它们的维度不匹配,无法执行赋值操作。
要解决这个问题,您需要检查左侧和右侧矩阵的维度,并确保它们匹配。如果需要,您可以使用矩阵转置或重新排列维度来实现匹配。
无法执行赋值,因为左侧的大小为 1×256,右侧的大小为 256×256。 出错 untitled2 (第 35 行) G(i, :) = noiseGate .* SNR ./ (1 + SNR);怎么改
你可以使用矩阵转置操作来解决这个问题,将右侧的矩阵转置为 256 行 1 列的矩阵,然后再进行赋值,即可保证左右矩阵的大小一致。修改后的代码如下:
```
G(i, :) = (noiseGate .* SNR ./ (1 + SNR))';
```
这里使用了单引号来进行转置操作,将右侧矩阵转置为列向量,然后再进行赋值。注意,这里的转置操作只需要在右侧矩阵上进行,左侧矩阵不需要进行转置。
阅读全文