Python、FFT和DC偏置分析
Python, FFT and DC offset analysis
我在占空比为 50% 的方波信号(100Hz,0V-5V)上测试了 FFT,但我不明白为什么我的直流偏移很大?
理论上应该是2.5V?
谢谢,
最好的问候。
基波正常,其他谐波正常
square signal 100Hz, TTL compatible 0V-5V, 50% duty cycle
FFT, DC offset problem, fundamental ok, harmonics ok
from scipy.fftpack import fft
from scipy import signal
import matplotlib.pyplot as plt
import numpy as np
#
# configuration
# time analyse = L * (1/Fsample)
#
L = 512 # lenght buffer
Fsample = 2000 # frequency sample
Fsignal = 100 # frequency
#********************************
# perdiode sample
Tsample = 1.0/Fsample
# time vector, start = 0s, stop = 0.1024s, step = (0.1024s / (1/Fe))
t = np.linspace(0.0, L*Tsample, L)
# signal definition, DC offet = 2.5V, Amplitude = 2.5V
signal = 2.5 + 2.5*signal.square(2 * np.pi * Fsignal * t, 0.5)
# plot time signal
plt.subplot(2,1,1)
plt.plot(t, signal)
# fft of time signal
yf = fft(signal)
# time vector of fft
xf = np.linspace(0.0, 1.0/(2.0*Tsample), L//2)
# plot spectral
plt.subplot(2,1,2)
plt.plot(xf, 2.0/L * np.abs(yf[0:L//2]))
在最后一行,归一化因子是错误的。
不是 2/L
,而是 1/L
。
正确的归一化因子plt.plot(xf, 1.0/L * np.abs(yf[0:L//2]))
代码现在可以正常工作了!
FFT correct amplitude
我在占空比为 50% 的方波信号(100Hz,0V-5V)上测试了 FFT,但我不明白为什么我的直流偏移很大?
理论上应该是2.5V?
谢谢, 最好的问候。
基波正常,其他谐波正常
square signal 100Hz, TTL compatible 0V-5V, 50% duty cycle
FFT, DC offset problem, fundamental ok, harmonics ok
from scipy.fftpack import fft
from scipy import signal
import matplotlib.pyplot as plt
import numpy as np
#
# configuration
# time analyse = L * (1/Fsample)
#
L = 512 # lenght buffer
Fsample = 2000 # frequency sample
Fsignal = 100 # frequency
#********************************
# perdiode sample
Tsample = 1.0/Fsample
# time vector, start = 0s, stop = 0.1024s, step = (0.1024s / (1/Fe))
t = np.linspace(0.0, L*Tsample, L)
# signal definition, DC offet = 2.5V, Amplitude = 2.5V
signal = 2.5 + 2.5*signal.square(2 * np.pi * Fsignal * t, 0.5)
# plot time signal
plt.subplot(2,1,1)
plt.plot(t, signal)
# fft of time signal
yf = fft(signal)
# time vector of fft
xf = np.linspace(0.0, 1.0/(2.0*Tsample), L//2)
# plot spectral
plt.subplot(2,1,2)
plt.plot(xf, 2.0/L * np.abs(yf[0:L//2]))
在最后一行,归一化因子是错误的。
不是 2/L
,而是 1/L
。
正确的归一化因子plt.plot(xf, 1.0/L * np.abs(yf[0:L//2]))
代码现在可以正常工作了!
FFT correct amplitude