当前位置: 首页 > 知识库问答 >
问题:

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

万嘉熙
2023-03-14

我有噪声数据(周期为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()

共有1个答案

尚楚
2023-03-14

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

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:

 类似资料:
  • 问题内容: 基于各种参考,我 在Linux中 对 信号的 主观定义 是“用于将特定事件的发生通知进程的触发器。此处的事件可能是指软件异常。此外,信号也可以用于IPC机制。 ” 我的问题是 我假设只有异常(软件中断)是通过信号通知的。 信号的各种来源是什么?在我看来,内核始终是信号的来源。(用于IPC时除外) 信号处理程序和ISR之间的区别? 信号屏蔽和中断屏蔽之间的区别? 问题答案: 中断可以看作

  • 电传打字机和电报通讯是信息传送离散信道的两个简单例子。 一般来说,离散信道意味着可以通过一个系统,从一点向另一点传送一个选择序列,而该序列选自一个由基本符号组成的有限集合。假定每个符号的特定持续时间为秒(对于不同的,此持续时间不一定相同,比如电报中使用的点和划)。并不要求在此系统中能够传送的所有可能序列;可以仅允许出现特定序列。这些特定序列就是可能出现在该信道中的信号。因此,在电报中,假定这些符号

  • GaussianNoise层 因为这是一个起正则化作用的层,该层只在训练时才有效。 GaussianDropout层 因为这是一个起正则化作用的层,该层只在训练时才有效。 AlphaDropout Alpha Dropout是一种保持输入均值和方差不变的Dropout,该层的作用是即使在dropout时也保持数据的自规范性。 通过随机对负的饱和值进行激活,Alphe Drpout与selu激活函数

  • 我正在开发webRTC,我正在本地网络上的两个Android设备之间进行实时流,它对我来说工作得很好,除了音质问题,声音中有噪音和回声。如果我在一端使用免提,它会变得更好,但我不想使用免提。 那么我该如何提高音质,有什么技术可以提高音质。它还表示,webRTC内置了回声消除功能,如果这是回声仍然存在的原因。

  • 我们现在考虑信号在传输过程中或者在某终端处受到噪声干扰的情景。这意味着,接收信号不一定与发送器发出的信号相同。可以区分两种情景。如果一个特定的传送信号总是生成相同的接收信号,即接收信号是传送信号的确定函数,可以将这种影响称为“失真”。如果这一函数有逆函数——任何两个传送信号都不会生成相同的接收信号,只需要对接收信号执行逆函数运算,就可以校正该失真,至少在原理上如此。 这里关心的情景是:在传输过程中

  • 我们现在将证明H确定了在最高效编码方式下所需要的信道容量,从而表明我们将H解读为信息的生成速率是合理的。 定理9:设一个信源的熵为H(比特/符号),一个信道的容量为C(比特/秒)。有可能采用某种方式对该信源的输出进行编码,从而可以在该信道上以符号/秒的平均速率上进行传送,其中为任意小。不可能以大于的平均速率进行传送。 反过来表述这一定理就是:不可能被超越。它可以这样证明:由于传送器必然是非奇异的,