问题描述
我测量了系统输入(粉红噪声)和输出的时间信号。我需要计算系统的 TF 及其脉冲响应。
为了计算 TF,我可以在 Matlab 中直接执行 TF = tfestimate(in,out)
或计算 fft
然后执行 TF = fft(out)./fft(in)
。在这一点上,一切都对我来说是清楚的和预期的,但是当我通过执行 ifft(fft(out)./fft(in))
计算系统的脉冲响应时,我得到最后有尾部的脉冲响应。我在想我的测量可能有问题,并决定在 matlab 中重复实验,合成指数啁啾并将其通过具有以下脉冲响应计算的滤波器。然后我在最后得到了“相同”的故事:
Impulse response with a "tail" at the end
请看下面的代码
t = 0:1/48000:10;
fo = 1;
f1 = 24000;
x = chirp(t,fo,10,f1,'logarithmic');
x = x(:);
y = lowpass(x,1000,48000);
y = y(:);
% playing with FFT length here
% nfft=length(x)*2-1;
% nfft = 4*1024;
nfft=length(x);
tf = tfestimate(x,y,hann(nfft),nfft/2,nfft,48000);
if mod(length(tf),2)==0 % iseven
tf_sym = conj(tf(end:-1:2));
else
tf_sym = conj(tf(end-1:-1:2));
end
ir_from_tfestimate = ifft([tf; tf_sym]);
in = fft(x,nfft);
out = fft(y,nfft);
tf1 = out./in;
ir_from_fft = ifft(tf1);
figure
stem(ir_from_tfestimate)
hold on
stem(ir_from_fft)
set(gca,'XScale','log')
-
当我尝试恢复从
tfestimate
获得的频谱的对称部分时,我是否正确执行:?
if mod(length(tf),2)==0 % iseven
tf_sym = conj(tf(end:-1:2));
else; tf_sym = conj(tf(end-1:-1:2));end
谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)