1

我测量了系统输入(粉红噪声)和输出的时间信号。我需要计算一个系统的 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')
  1. 所以我想知道这个故事的本质是什么?也许我的代码有错误?我是谷歌并寻找这个问题/解释,但没有找到任何东西

  2. 它可以与我如何定义 nfft 以及点数的正确选择有关吗?我们可以说如果 nfft 定义不正确,脉冲响应将不正确吗?

  3. 当我试图恢复从 获得的频谱的对称部分时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

谢谢!

4

0 回答 0