我正在为信号分析课程做作业,我必须分析信号。我现在已经尝试了很多事情,但是仍然让我感到困扰的是FFT看起来很奇怪,而且看起来不像我们在课堂上学到的“正常外观” 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')
谢谢!
答案 0 :(得分:2)
您所看到的看起来是正确的:您的信号是一个带有一定噪声的脉冲,并且FFT本质上是sinc
函数(或abs
的Sinc函数,因为您应该将其绘制为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中。通常,其频谱质量通常会远离正弦的低频,但这可能取决于噪声的确切性质。