我想从信号中删除一个频率(一个峰值),并在没有它的情况下绘制我的功能。在fft之后,我发现了频率和振幅,我不确定我现在需要做什么。例如,我想删除我的最高峰(在图上标有红点)。如何从信号中删除频率
import numpy as np
import matplotlib.pyplot as plt
# create data
N = 4097
T = 100.0
t = np.linspace(-T/2,T/2,N)
f = np.sin(50.0 * 2.0*np.pi*t) + 0.5*np.sin(80.0 * 2.0*np.pi*t)
#plot function
plt.plot(t,f,'r')
plt.show()
# perform FT and multiply by dt
dt = t[1]-t[0]
ft = np.fft.fft(f) * dt
freq = np.fft.fftfreq(N, dt)
freq = freq[:N/2+1]
amplitude = np.abs(ft[:N/2+1])
# plot results
plt.plot(freq, amplitude,'o-')
plt.legend(('numpy fft * dt'), loc='upper right')
plt.xlabel('f')
plt.ylabel('amplitude')
#plt.xlim([0, 1.4])
plt.plot(freq[np.argmax(amplitude)], max(amplitude), 'ro')
print "Amplitude: " + str(max(amplitude)) + " Frequency: " + str(freq[np.argmax(amplitude)])
plt.show()
你需要对信号进行滤波。什么样的滤波器以及如何配置它将由您想要保留哪些频率以及您想要删除哪些频率来确定。你可能想要自己介绍一本DSP书,或者从这里开始:https://en.wikipedia.org/wiki/Filter_(signal_processing) – Turn
这篇文章可能很有用:http://forrestbao.blogspot.rs/2014/ 07/signal-filtering-using-inverse-fft-in.html – Prefect
[python中的fft带通滤波器]可能的重复(http://stackoverflow.com/questions/19122157/fft-bandpass-filter-in-python) – strpeter