gpt4 book ai didi

python - 在 Python 中过滤信号频率

转载 作者:太空宇宙 更新时间:2023-11-03 14:00:46 26 4
gpt4 key购买 nike

我试图用 fft 过滤一些信号。我正在处理的信号非常复杂,我在这个主题上并没有真正的经验。这就是为什么我创建了一个简单的 3Hz 正弦波并试图切断 3Hz。

到目前为止,还不错

import numpy as np
import matplotlib.pyplot as plt
from scipy.fftpack import fftfreq, irfft, rfft

t = np.linspace(0, 2*np.pi, 1000, endpoint=True)
f = 3.0 # Frequency in Hz
A = 100.0 # Amplitude in Unit
s = A * np.sin(2*np.pi*f*t) # Signal
dt = t[1] - t[0] # Sample Time

W = fftfreq(s.size, d=dt)
f_signal = rfft(s)

cut_f_signal = f_signal.copy()
cut_f_signal[(np.abs(W)>3)] = 0 # cut signal above 3Hz

cs = irfft(cut_f_signal)

fig = plt.figure(figsize=(10,5))
plt.plot(s)
plt.plot(cs)

我所期望的 expected output

我得到了什么 Result

我真不知道噪音是从哪里来的。我认为这是一些基本的东西,但我不明白。谁能给我解释一下?

编辑

更多信息

频率

yf = fft(s)
N = s.size
xf = np.linspace(0, fa/2, N/2, endpoint=True)
fig, ax = plt.subplots()
ax.plot(xf,(2.0/N * np.abs(yf[:N//2])))
plt.xlabel('Frequency ($Hz$)')
plt.ylabel('Amplitude ($Unit$)')
plt.show()

enter image description here

最佳答案

您可以更改创建信号的方式并使用采样频率:

fs = 1000
t = np.linspace(0, 1000 / fs, 1000, endpoint=False) # 1000 samples
f = 3.0 # Frequency in Hz
A = 100.0 # Amplitude in Unit
s = A * np.sin(2*np.pi*f*t) # Signal
dt = 1/fs

这里是完整的代码:

import numpy as np
import matplotlib.pyplot as plt
from scipy.fftpack import fftfreq, irfft, rfft

fs = 1000
t = np.linspace(0, 1000 / fs, 1000, endpoint=False)
f = 3.0 # Frequency in Hz
A = 100.0 # Amplitude in Unit
s = A * np.sin(2*np.pi*f*t) # Signal
dt = 1/fs

W = fftfreq(s.size, d=dt)
f_signal = rfft(s)

cut_f_signal = f_signal.copy()
cut_f_signal[(np.abs(W)>3)] = 0 # cut signal above 3Hz

cs = irfft(cut_f_signal)

fig = plt.figure(figsize=(10,5))
plt.plot(s)
plt.plot(cs)

并且 f = 3.0 Hz 和 (np.abs(W) >= 3): enter image description here

f = 1.0 赫兹: enter image description here

关于python - 在 Python 中过滤信号频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49426485/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com