Re: [討論] 如何處理fractional delay

看板MATLAB作者 (郝渴連)時間4年前 (2020/03/04 15:06), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
kampa 您好: 這不是一個簡單的問題, 用下列幾個關鍵字來搜尋學術研究吧: fractional delay, farrow structure,... 主要方法是用訊號重建的角度來看的, 所以您搜尋時會發現下列關鍵字也常出現: interpolation, sampling rate conversion,... 最出名的論文是 C. W. Farrow 的: A continuously variable digital delay element, ISCAS (1988), 2641-2645 doi:10.1109/ISCAS.1988.15483 但基礎理論我建議參考這篇,會比較完整: C. C. Ko, Y. C. Lim, Approximation of a variable-length delay line by using tapped delay line processing, Signal Processing 14 (1988), 363-369 doi:10.10160165-1684(88)90094-1 ※ 引述《kampa (軋車)》之銘言: : 各位大神好 : 我想要在頻率域中設計一個有Delay的filter : 但是實際delay的秒數並非取樣點能夠取到的地方 : 例如以下code,取樣率為16k,需要delay的時間為0.0017秒 : 這樣的話我的sample點為16k * 0.0017 = 27.2點 (非整數點0.2無法被取到) : 導致畫出時域的filter很毛 (正常應該是只有一個點為1其餘為零) : 想請問大神們若要處理像這樣的fractional delay問題該使用什麼方法較好呢? : ps.可能不能直接近似sample的點數到整數點,因為之後會設計多個等間的delay channel : 若是直接近似的話可能會使channel跟channel間的delay 間隔不一致。 : 謝謝! : fs = 16000; : H_pts = 1024; : NN=2^nextpow2(H_pts); : df=fs/NN; : freqs=fs/2*linspace(0,1,NN/2+1);%0:df:(NFFT/2)*df; : delay_second = 0.0017; : delay = zeros(length(freqs), 1); : for dd = 1:length(freqs) : delay(dd,1) = exp(-1j*2*pi*freqs(dd)*delay_second); %delay time term : end : delay_symm = [delay;conj(flipud(delay(2:end-1)))]; : delay_timed = real(ifft(delay_symm)); % Impulse respons : delay_tt = 0:1/fs:(length(delay_timed)-1)/fs;% time axis : figure;plot(delay_tt, delay_timed); % Plot the impulse response in time domain -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 175.97.0.55 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1583305589.A.6F9.html
文章代碼(AID): #1UNrDrRv (MATLAB)
文章代碼(AID): #1UNrDrRv (MATLAB)