假设 FFT 结果错误
Posted
技术标签:
【中文标题】假设 FFT 结果错误【英文标题】:Assumingly faulty FFT result 【发布时间】:2015-04-07 06:32:52 【问题描述】:我有一个混频器,我想从输出时域信号中提取频率。输出时域信号为:
Vd = (Rd/(33e3+Rd))*(Vrf*sin(Wrf*t)+Vlo*sin(Wlo*t));
y_t = 11*Vd;
func_ = y_t;
地点:
Vrf=27e-3;
Vlo=140e-3;
Frf=10e6;
Flo=9.9e6;
Wrf=Frf*2*pi;
Wlo=Flo*2*pi;
Rd = 70;
我正在尝试通过以下循环从时域信号中计算傅立叶系数:
order_max=10;
f_ = 0;
for m = -1*order_max:order_max
for n = -1*order_max:order_max
if (m*Wrf+n*Wlo <= 0);
continue;
end
k = (m*Frf+n*Flo)*T0;
f_ = f_ + 1;
Func(f_) = integral(@(t)subs(func_).*exp(-1i*2*pi*k*t/T0), -T0/2, T0/2)/T0;
f(f_) = k/T0;
end
时域信号如下: 1
系数为: 2
从傅里叶系数可以看出,与时域信号相比,1e5的频率幅度非常低。
我认为傅里叶系数和时域信号不匹配!
你能帮我找出问题吗?
【问题讨论】:
除了这不是FFT 之外,1e5 的幅度非常低,因为信号不包含该频率的频率分量。您可能正在考虑的时间信号中的 1e5 分量很可能是在该频率下显示为正弦包络的节拍效应,但这是两个相似频率(10e6 和 9.9e6)的音调的结果。这些音调似乎确实出现在您的傅立叶系数图中(尽管在您选择的对数刻度中重叠)。 【参考方案1】:1e5 频率分量的幅度非常低,因为信号在该频率不包含显着的能量,
该信号实际上由参数Flo=9.9e6
和Frf=10e6
指定的频率处的两个频率分量组成。
请注意,这两个频率确实出现在您的频率图中,并且它们的幅度似乎也对应于由下式给出的时间信号正弦系数:
> 11*(Rd/(33e3+Rd))*[Vrf Vlo]
ans =
6.2867e-004 3.2598e-003
相应地,频率分量为:
> abs(Func(find(abs(f-10e6)<1))) % Frf component
ans = 6.2867e-004
> abs(Func(find(abs(f-9.9e6)<1))) % Flo component
ans = 0.0032598
您可能认为时间信号中的 1e5 分量很可能来自信号的包络,该信号显示为频率为 1e5 的节拍。
作为一个例子,如果我们用一个非常简单的Envelope detector来计算包络:
func y = envelopedetector(x)
k = 0.999; % decay factor
y(1) = x(1);
for i=2:length(x)
if (x(i) > y(i-1))
y(i) = x(i);
else
y(i) = k*y(i-1);
end
end
end
我们得到了我在你的时间信号图上覆盖的红色曲线:
如果我们随后计算包络信号的傅立叶系数,我们确实得到了 1e5 处的分量(请注意,该图没有显示对应于 DC 偏置的另一个重要分量 0):
现在既然您提到了 FFT,就可以使用 FFT 获得傅里叶系数的近似值。 回忆一下傅立叶系数由下式给出:
将基本周期T0分成N个样本,积分可以近似为(随着N的增加,近似值越来越精确)为:
这与离散傅里叶变换密切相关。因此,给定func_
在基本周期内进行评估,傅立叶系数约为:
T0 = 1e-5;
t = [0:N-1]*T0/N;
y = func_(t);
Func = fft(y)*2/N;
Func(1) = 0.5*Func(1); % scaling factor is 1/N (instead of 2/N) for f=0
【讨论】:
以上是关于假设 FFT 结果错误的主要内容,如果未能解决你的问题,请参考以下文章