FFT:找到并切断信号中的50赫兹噪声

2024-05-20 01:52:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有噪声data(峰值周期为1.8s,每周期2048个仓),我想计算频率并删除50Hz。我很确定我要找的频率是50赫兹,因为我是用originlab找到的。在

当我尝试在python中做同样的事情时,平均峰值是~47Hz。我正在看教程和例子,但结果仍然是一样的。在

import numpy as np
from scipy.fftpack import fft
from scipy.fftpack import fftfreq
import matplotlib.pyplot as plt
data = np.loadtxt('3.dat', comments="#")
t = data[:, 0]
y = data[:, 2]
len_data = len(data)
bins = 2048
plt.figure(figsize=(7, 9))
plt.subplot(211)
plt.plot(t, y, 'b-')
plt.xlabel("time[sec]")
plt.ylabel("original signal")
plt.subplot(212)
F = fft(y)
freq = fftfreq(len(t), (t[1] - t[0]))
ipos = np.where(freq > 0)
freqs = freq[ipos]
mags = np.abs(F[ipos])
plt.plot(freqs, mags, 'b-')
plt.xlabel("freq")
plt.ylabel("POWER")
plt.savefig('stoc.png')
plt.show()

有人能帮我修理吗?在

我得继续问关于切断噪音的问题。当我减去频率时,信号振幅明显减小。这是对的吗?在

^{pr2}$

Tags: fromimportfftdatalenasnpplt
1条回答
网友
1楼 · 发布于 2024-05-20 01:52:34

您的问题似乎是您的时间网格不是均匀分布的:

In [83]: d = np.diff(data[:,0])

In [84]: d
Out[84]: 
array([ 0.0006144 ,  0.0006144 ,  0.00049152, ...,  0.0006144 ,
        0.0006144 ,  0.00049152])

如果将值插值到时间上的恒定间距:

^{pr2}$

峰值为50赫兹:

enter image description here

相关问题 更多 >