我有以下噪音消除代码:
[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
'由于左侧和右侧的元素数量不同,无法执行赋值''
您不理解错误消息的哪一部分?这意味着等号左边和右边的变量有不同的大小,所以你不能把右边的东西分配给左边的东西。
检查尺寸并确保它们相同。