我有一个调音台,我想从输出时域信号中提取频率。输出时域信号为:
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的频率幅度非常低。
我认为傅里叶系数和时域信号不匹配!
请你帮我找出问题吗?
答案 0 :(得分:0)
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的分量(注意该图没有显示0处的另一个重要分量,它对应于DC偏差):
现在,由于您提到了FFT,因此可以通过FFT获得傅立叶系数的近似值。 回顾傅立叶系数由下式给出:
并且将基本周期T 0 分成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