信号的阻尼正弦形式 FFT

Damped sinusoidal form FFT of signal

我正在为信号分析课程做作业,我必须在其中分析信号。我现在已经尝试了很多东西,但仍然困扰我的是 FFT 看起来很奇怪,看起来不像我们在 class.

中学到的 'normal look' FFT

FFT(复数值的绝对值): FFT abs values - FFT abs values zoomed in

FFT(无绝对值): FFT zoomed in

上图中看到的 FFT 在 0-30Hz 频率范围内放大。其余频率范围没有显示很多(高)峰值,这可能是由噪声引起的。

该信号是在焊接过程中使用采样频率为 1000Hz 的示波器创建的。我对信号进行了滤波以去除噪声,然后使用 MATLAB 的 fft 函数将信号转换为频谱。

滤波前后信号: Original signal and filtered signal

我的一般问题是,显示的 FFT 是否有效,还是我弄错了?我估计地面频率在5.5Hz左右,当我取大正弦波的一个周期时可以这样说吗?我还注意到一个(地??)周期内大约有64个小正弦波,这是高次谐波吗?

如果我的理论是正确的,是什么导致 fft 成为阻尼正弦形式?

我使用的代码基本如下。我把噪音过滤的部分去掉了,因为我认为这道题没有必要。数据集是一个 40100 行的矩阵。

fs = 1000;
cleanSignaal = data(:,4);
fftSignal = fft(cleanSignaal)/lenght(cleanSignaal);
f = fs/(2*length(fftSignal)):fs/length(fftSignal):fs;
plot(f,abs(fftSignal));
xlim([0 fs(m)/2]);
title('Fast Fourier Transform')
xlabel('Frequentie (Hz)')
ylabel('Magnitude')

谢谢!

你所看到的看起来是正确的:你的信号是一个带有一些噪声的脉冲,FFT 基本上是一个 sinc 函数(或者你应该绘制它的 sinc 的 abs一个 FFT),这就是您所期望的脉冲。

这是一个简单的演示。 (顺便说一句,为了使 sinc 更宽,我将脉冲比你的窄一点,这是有效的,因为宽度是成反比的。这样我就不必放大了。)

import numpy as np
import matplotlib.pyplot as plt # For ploting

N = 1000
t = np.linspace(0, 1., N)
y = ( (t>0.46) & (t<0.54)).astype(float)

f = np.abs(np.fft.rfft(y))
faxis = np.fft.rfftfreq(y.size, 1./N)

plt.figure()
plt.subplot(211)
plt.plot(t, y)
plt.ylim(-.1, 1.1)
plt.subplot(212)
plt.plot(faxis, f)
plt.ylim(0, 90)
plt.show()

在脉冲之上,您有很多尖峰噪声,这些噪声被添加到 FFT 中。这通常具有远离 sinc 低频的频谱质量,但这可能取决于噪声的确切性质。