从信号过滤谐波(python)

时间:2015-08-13 22:03:51

标签: python numpy scipy signal-processing fft

我在matlab ref1ref2中看到了部分解决的类似问题,但我正在使用python。我是新处理信号,我试图从以下信号中去除谐波。 enter image description here 这些是无线电观测(在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]

enter image description here

我试图阻止以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与时间并与原始信号进行比较时,我得到了 enter image description here

那么,我可以使用哪种过滤器?记住我想从信号中去除0.34和0.64 Hz的谐波。

使用FFT是更好的选择吗? 还有其他选择吗?

这里是data

0 个答案:

没有答案