python - 带通滤波器输出和傅里叶变换
问题描述
我使用 numpy 应用快速傅立叶变换将其转换为频域:(channelA 和 time 是 numpy 数组,channelA 存储电压值)
fY = np.fft.fft(channelA)
freq = np.fft.fftfreq(len(channelA), time[1]-time[0])
这是变换: 放大时: 我在 python 中使用 scipy 应用了一个巴特沃斯带通滤波器。这是代码:
low = 100 / (0.5 * 2e6) # nyq = 1/2 * fs
high = 1e3 / (0.5 * 2e6)
sos = sp.butter(1, [low, high], btype='bandpass', output='sos')
y = sp.sosfiltfilt(sos, channelA)
这里我的采样率为 2M (2e6),我的通带频率为 100-1kHz。应用滤波器后,信号似乎已经失去了噪声,但开始时的电压变为负值。我不懂为什么。有人可以解释为什么会这样吗? 放大以显示没有噪音:
当我应用高通滤波器时电压变为负值。如果我只应用低通滤波器,噪声就会被消除。(可以使用相同的功能应用高通和低通滤波器)
可以看出,小于 100Hz 的频率仍然存在,而 350Hz 左右的频率已被移除。我试图将注意力集中在 350-400Hz 左右的频率上,并希望在不扭曲信号的同时消除其余频率。为什么会发生这种情况,我应该怎么做才能做到这一点?
PS对不起,这篇文章有点长,但我没有另一种解释方式。
解决方案
推荐阅读
- django - django FormView 不创建对象或重定向到success_url
- distributed-system - 为每个节点唯一分配标识符的分布式系统设计
- angular - 如何仅为子模块导入 Angular HTTP 拦截器
- mysql - 一张表的内连接并防止重复?
- javascript - 如何从 valueChanges 中获取选定的对象,但仅将对象 id 绑定到使用 Angular 反应形式的形式?
- jquery - AJAX GET 请求不是控制台日志记录响应,除了 CORB 警告之外没有错误
- python-3.x - 使用 python 在 Windows 10 中模拟 ctrl+c 事件
- sql - SQL Server:如何选择现有 ID 并将其插入新 ID 字段
- php - 使用 curl 调用有效,使用 Guzzle 6 的版本无效
- swift - 从本地存储将 UIImages 加载到 collectionView 非常慢