Re: [讨论] 如何处理fractional delay

楼主: mp19990920 (郝渴连)   2020-03-04 15:06:26
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

Links booklink

Contact Us: admin [ a t ] ucptt.com