fft失败的噪声消除-无法分配元素



我有以下噪音消除代码:

[z,fs] = audioread('noisy_voices.wav'); % Use >>soundsc(z, fs) to hear the unprocessed signal
zproc_vec=zeros(1,length(z));
tail = zeros(1,256);
for k = 0:128:length(z)-256
Z = fft(z(k +1:k + 256).* hann(256));
[zmax, zl] = max(abs(Z(1:128)));
Z(zl-3: zl +3)=0;
Z(256-(zl-3:zl +3)+2)=0;
zproc = ifft(Z);
zproc = zproc+tail;
tail(1:128) = zproc(129:256);
zproc_vec(k+1:k+256)=zproc;
end
soundsc(zproc_vec , fs)

有人能告诉我为什么会出现这个错误吗?

无法执行分配,因为左侧和右侧具有不同数量的元素

task_one中出错(第12行(zproc_vec(k+1:k+256(=zproc;

我认为Z = fft( ___ )行的输出将是列向量,但您使用tail = zeros(1,256);tail初始化为行向量

所以在这条线上:

zproc = zproc+tail;

隐式展开将使zproc成为一个256*256平方矩阵。

然后,您的索引将失败,正如错误消息所指定的那样,因为您正试图将此平方矩阵分配给使用zproc_vec(k+1:k+256)进行索引的256个元素。

tail初始化为列向量应该可以解决此问题

或者,您可以选择";懒惰;方法,并确保您只对列向量进行操作以创建zproc

zproc = zproc(:)+tail(:); % Make both terms column vectors for addition

'由于左侧和右侧的元素数量不同,无法执行赋值''

您不理解错误消息的哪一部分?这意味着等号左边和右边的变量有不同的大小,所以你不能把右边的东西分配给左边的东西。

检查尺寸并确保它们相同。

相关内容

  • 没有找到相关文章

最新更新