我测量了系统输入(粉红噪声)和输出的时间信号。我需要计算一个系统的 TF 和它的脉冲响应。
为了计算 TF,我可以直接在 Matlab 中执行TF = tfestimate(in, out)
或计算fft
两者然后执行TF = fft(out)./fft(in)
。在这一点上,一切对我来说都很清楚和预期,但是当我通过这样做计算系统的脉冲响应时,ifft(fft(out)./fft(in))
我得到了最后有尾巴的脉冲响应。我在想我的测量可能有问题,并决定在 matlab 中重复实验,合成指数啁啾,并通过滤波器通过以下脉冲响应计算。然后我在结尾得到了“相同”的故事:结尾
带有“尾巴”的冲动反应
请看下面的代码
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')
所以我想知道这个故事的本质是什么?也许我的代码有错误?我是谷歌并寻找这个问题/解释,但没有找到任何东西
它可以与我如何定义 nfft 以及点数的正确选择有关吗?我们可以说如果 nfft 定义不正确,脉冲响应将不正确吗?
当我试图恢复从 获得的频谱的对称部分时
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
谢谢!