Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python FFT:查找并切断信号中的噪声50Hz_Python_Signal Processing_Fft - Fatal编程技术网

Python FFT:查找并切断信号中的噪声50Hz

Python FFT:查找并切断信号中的噪声50Hz,python,signal-processing,fft,Python,Signal Processing,Fft,我有噪声(周期为1.8s的峰值,每个周期2048个箱子),我想计算频率并删除50Hz。我很确定我要找的频率是50Hz,因为我是通过使用originlab找到的 当我尝试在python中执行相同操作时,平均峰值约为47Hz。我正在寻找教程和示例,但结果仍然是一样的 import numpy as np from scipy.fftpack import fft from scipy.fftpack import fftfreq import matplotlib.pyplot as plt dat

我有噪声(周期为1.8s的峰值,每个周期2048个箱子),我想计算频率并删除50Hz。我很确定我要找的频率是50Hz,因为我是通过使用
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()
有人能帮我修一下吗

我必须恢复关于切断噪音的问题。当我减去频率时,信号振幅显著降低。这是正确的吗

data = np.loadtxt('3.dat', comments="#")
t = data[:, 0]
phase = data[:, 1]
y = data[:, 2]
pulse_no = data[:, 3]
len_data = len(data)
bins = 2048
ti = np.linspace(t[0], t[-1], len_data)
yi = np.interp(ti, t, y)
t, y = ti, yi

plt.figure(figsize=(10, 10))
plt.subplot(511)
plt.plot(t, y, 'b-')
plt.xlabel("time[sec]")
plt.ylabel("original signal")
plt.subplot(512)
F = fft(y)
N = len(t)
w = fftfreq(N, (t[1] - t[0]))
ipos = np.where(w > 0)
freq = w[ipos]
mags = abs(F[ipos])
plt.plot(freq, mags)
ip = np.where(F > 0)[0]
Fs = np.copy(F)
yf = ifft(Fs)
ip = np.where(F > 0)[0]
Ff = np.copy(F)
Ff[ip > ip[[(181)]]] = 0
Ff[ip < ip[[(175)]]] = 0
magsf = abs(Ff[ipos])
plt.plot(freq, magsf, 'r-')
plt.subplot(513)
Fr = mags - magsf
plt.plot(freq, Fr)
plt.subplot(514)
yf = ifft(Ff)
yr = ifft(Fr)
plt.plot(t, yf)
plt.subplot(515)
flux = y - np.real(yf)
plt.plot(t, flux)
plt.plot(t, y)
plt.show()
data=np.loadtxt('3.dat',comments=“#”)
t=数据[:,0]
阶段=数据[:,1]
y=数据[:,2]
脉冲号=数据[:,3]
len_data=len(数据)
垃圾箱=2048
ti=np.linspace(t[0],t[-1],len_数据)
yi=np.interp(ti,t,y)
t、 y=ti,yi
plt.图(figsize=(10,10))
plt.子地块(511)
plt.绘图(t,y,'b-')
plt.xlabel(“时间[秒]”)
plt.ylabel(“原始信号”)
plt.子地块(512)
F=fft(y)
N=长度(t)
w=fftfreq(N,(t[1]-t[0]))
ipos=np.其中(w>0)
频率=w[IPO]
mags=abs(F[IPO])
plt.绘图(频率、磁场)
ip=np,其中(F>0)[0]
Fs=np.copy(F)
yf=ifft(Fs)
ip=np,其中(F>0)[0]
Ff=np.副本(F)
Ff[ip>ip[[(181)]]=0
Ff[ip
您的问题似乎是您的时间网格不是均匀分布的:

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])
如果我将这些值插值到时间上的恒定间距:

data = np.loadtxt('3.dat', comments="#")
t = data[:, 0]
y = data[:, 2]
len_data = len(data)

ti = np.linspace(t[0], t[-1], len_data)
yi = np.interp(ti, t, y)
t, y = ti, yi
峰值为50 Hz:


你知道FFT产生的频率单元的粒度吗?现在我想把它切掉。我基于这个网站的代码[链接]()斜体。