我在matlab ref1,ref2中看到了部分解决的类似问题,但我正在使用python。我是新处理信号,我试图从以下信号中去除谐波。
这些是无线电观测(在3和7太赫兹)。首先,我想获得主要振荡的频率(视觉上,周期约为1.78秒,因此f = 1 / T),以下四个增强仅是测试而不是振荡。数据分辨率为0.25秒(即每秒4点)。我试图使用np.fft.fft
找到主要频率,但我无法弄清楚方法。所以我正在检查过滤'在scipy.signal但是有很多过滤器。
我会不断检查文档,但是有些灯会很有用!
这是我的尝试
from scipy import fftpack
d_step = 0.250
#Sampling para 3 THz
sample_freq_3T = fftpack.fftfreq(prosolar3.temp.size, d=d_step)
sig_fft_3T = fftpack.fft(prosolar3.temp)
#Sampling para 7 THz
sample_freq_7T = fftpack.fftfreq(prosolar7.temp.size, d=d_step)
sig_fft_7T = fftpack.fft(prosolar7.temp)
pidxs_3T = np.where(sample_freq_3T > 0)
freqs_3T = sample_freq_3T[pidxs_3T]
power_3T = np.abs(sig_fft_3T)[pidxs_3T]
pidxs_7T = np.where(sample_freq_7T > 0)
freqs_7T = sample_freq_7T[pidxs_7T]
power_7T = np.abs(sig_fft_7T)[pidxs_7T]
我试图阻止以0.34 Hz(3 THz信号)和0.64 Hz(7 THz信号)为中心的信号中的谐波
我尝试做一个通带,以便从原始信号中减去,但实际上它确实有效
sig_fft_3T[np.abs(sample_freq_3T) < 0.24] = 0
sig_fft_3T[np.abs(sample_freq_3T) > 0.40] = 0
sig_fft_7T[np.abs(sample_freq_7T) < 0.57] = 0
sig_fft_7T[np.abs(sample_freq_7T) > 0.71] = 0
main_sig_3T = fftpack.ifft(sig_fft_3T)
main_sig_7T = fftpack.ifft(sig_fft_7T)
因此,当绘制main_sig与时间并与原始信号进行比较时,我得到了
那么,我可以使用哪种过滤器?记住我想从信号中去除0.34和0.64 Hz的谐波。
使用FFT是更好的选择吗? 还有其他选择吗?
这里是data