python - 巴特沃斯低通滤波器

标签 python scipy signal-processing

我没有得到所需的输出,它切断了较低的频率。无论我将其设置为“低”还是“高”。

import numpy as np
from scipy import signal
import matplotlib.pyplot as plt

def butter_filter(data, butterCutoffFreq, order=1):
    b, a = signal.butter(order, butterCutoffFreq, 'low', analog=True)
    y = signal.lfilter(b, a, data)
    return y

"""
    White noise
"""
N = 1024
dt = np.float64(1)
y = np.random.normal(loc=0.0, scale=1.0, size=N)
t = np.arange(start=0, stop=N, step=dt)
butterCutoffFreq = 0.5 * 1/dt

amps = np.fft.rfft(y)
freqs = np.fft.rfftfreq(y.size, dt)
#plt.plot(freqs, np.abs(amps), color='b')

ampsFiltered = butter_filter(y, butterCutoffFreq)
ampsFiltered = np.fft.rfft(ampsFiltered)

plt.plot(freqs, np.abs(ampsFiltered), color='g')
plt.show()

enter image description here

最佳答案

你的问题是参数analog=True删除它,它就会工作。

lfilter() 只能使用数字滤波器。用模拟滤波器过滤数字信号(假设定期采样的白噪声)是没有意义的。

关于python - 巴特沃斯低通滤波器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56265644/

相关文章:

python - 如何按最后一列对 NumPy 字符串数组进行排序

python - 我可以对 scipy cumtrapz 使用集成限制吗?

python - Python 中的立体声到单声道 wav

c++ - 自相关返回麦克风输入的随机结果(使用高通滤波器)

python - 解码错误 : For input string: ""

python - 如果它是其他行的子集,则 pandas 会删除该行

python - 如何临时更改 matplotlib 设置?

python - 使用 Python 过滤 Linux 日志文件

python - Scipy.linprog 的 Gurobi 风格模型构建?

signal-processing - 如何在 Octave 音程中实现分子比分母高阶的传递函数?