這個問題是從 Signal Processing Stack Exchange遷移過來的,因為它可以在 Stack Overflow 上回答。 昨天遷移 。
我有以下降噪代碼:
[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;
uj5u.com熱心網友回復:
我認為你的Z = fft( ___ )行的輸出將是一個列向量,但你初始化tail為一個行向量tail = zeros(1,256);
所以在這一行:
zproc = zproc tail;
隱式擴展將生成zproc一個 256*256 的方形矩陣。
然后您的索引失敗,正如錯誤訊息所指定的那樣,因為您試圖將此方陣分配給您使用zproc_vec(k 1:k 256).
初始化tail為列向量應該可以解決問題。
或者,您可以采取“懶惰”的方式,并確保您只對列向量進行操作以創建 zproc
zproc = zproc(:) tail(:); % Make both terms column vectors for addition
uj5u.com熱心網友回復:
''無法執行賦值,因為左側和右側的元素數量不同''
你不明白錯誤資訊的哪一部分?這意味著等號左側和右側的變數具有不同的大小,因此您不能將正確的事物分配給左側的事物。
檢查尺寸并確保它們相同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/354188.html
上一篇:如何在plot3中使用漸進著色?
