0

我是MatlabFFT的新手。
我需要从幅度和频率变化的信号中提取主频率。我尝试执行去趋势,然后执行FFT以获得频率,但无法摆脱 0Hz 处的大峰值(直流分量?)。我对信号使用了diff函数,结果信号通过FFT处理。在这种情况下,FFT输出没有峰值为零。我比较了两条FFT曲线,似乎除了零处的峰值外,两者显示出相似(不相同)的光谱。我想知道是否差异函数是一种有效(并且非常有效)的去趋势方法,还是我在这里丢失了一些信息?换句话说,区分信号是否对其频率有任何影响:[ diff(sin(omega.t))= cos(omega.t)- 频率没有变化]?

非常感谢!

4

2 回答 2

2

通过区分信号,您实际上应用了一种高通滤波器,一种不那么智能的高通滤波器,它会破坏您的信号。相反,您可以尝试其他一些过滤器,例如:

b=fir1(32,2*0.01/fs,'high');
a=1;
FilteredX=filtfilt(x,a,b)

在哪里:

x 是您的原始信号,

FilteredX 是滤波后的信号。

fs - 你的采样频率。

这样,您将滤除任何低于 0.01 的频率,并且几乎不会损害频谱的其余部分,从而使您可以根据需要检测峰值。

于 2013-04-10T07:20:57.540 回答
1

X信号的离散傅立叶变换x定义为(直至缩放)

X(k) = Sum[ exp(2*pi*i*k*n/N) * x(n) ]

如果我们对你得到的信号进行第一次差分

Sum[ exp(2*pi*i*k*n/N) * (x(n) - x(n-1)) ]

你可以重新安排给

(1 - exp(2*pi*i*k/N)) * Sum[ exp(2*pi*i*k*n/N) * x(n) ]

即它是原始傅立叶变换的倍数。在这种k = 0情况下(即零频率分量),乘数为零,这解释了为什么这会消除 处的尖峰k = 0

但是请注意,乘数取决于 的值k,因此您不会得到相同的信号 - 您不能只采用一阶差分来消除尖峰。可以与连续傅立叶变换进行比较,其中如果g = F(f)h = F(df/dx),则

h(k) = i * k * g(k)

即导数的傅立叶变换是原函数的傅立叶变换,乘以ik

于 2013-04-10T07:33:08.137 回答