- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想尝试使用 FFT 而不是计算 y=filter(b,a,x,zi)
和 dy[i]/dx[j]
在时域中可能加速 GPU 实现。
我不确定这是否可能,尤其是当 zi
不为零时。我查看了 scipy 中的 scipy.signal.lfilter
和 octave 中的 filter
是如何实现的。它们都是直接在时域中完成的,scipy 使用直接形式 2 和 Octave 直接形式 1(通过查看 DLD-FUNCTIONS/filter.cc
中的代码)。我还没有在任何地方看到 FFT 实现类似于 MATLAB 中 FIR 滤波器的 fftfilt
(即 a = [1.])。
我试过 y = ifft(fft(b)/fft(a) * fft(x))
但这在概念上似乎是错误的。另外,我不确定如何处理初始 transient zi
。任何引用,指向现有实现的指针,将不胜感激。
示例代码,
import numpy as np
import scipy.signal as sg
import matplotlib.pyplot as plt
# create an IRR lowpass filter
N = 5
b, a = sg.butter(N, .4)
MN = max(len(a), len(b))
# create a random signal to be filtered
T = 100
P = T + MN - 1
x = np.random.randn(T)
zi = np.zeros(MN-1)
# time domain filter
ylf, zo = sg.lfilter(b, a, x, zi=zi)
# frequency domain filter
af = sg.fft(a, P)
bf = sg.fft(b, P)
xf = sg.fft(x, P)
yfft = np.real(sg.ifft(bf/af * xf))[:T]
# error
print np.linalg.norm(yfft - ylf)
# plot, note error is larger at beginning and with larger N
plt.figure(1)
plt.clf()
plt.plot(ylf)
plt.plot(yfft)
最佳答案
您可以通过将 P = T + MN - 1
替换为 P = T + 2*MN - 1
来减少现有实现中的错误。这纯粹是直观的,但在我看来,由于环绕,bf
和 af
的划分将需要 2*MN
项。
C.S. Burrus 有一篇关于如何以面向 block 的方式考虑过滤(无论是 FIR 还是 IIR)的相当简洁的文章,here .我没有详细阅读它,但我认为它为您提供了通过卷积实现 IIR 滤波所需的方程式,包括中间状态。
关于python - 使用 FFT 计算滤波器 (b,a,x,zi),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4419993/
来自 FOR /? : In addition, substitution of FOR variable references has been enhanced. You can now use
我想知道为什么在 VS 2013 下/Zi 编译器选项几乎使构建静态库的大小增加了一倍。 据我了解/Zi 选项,所有生成的调试信息都存储在 .pdb 文件中,并且只为每个 .obj 文件添加指向该文件
我想尝试使用 FFT 而不是计算 y=filter(b,a,x,zi) 和 dy[i]/dx[j]在时域中可能加速 GPU 实现。 我不确定这是否可能,尤其是当 zi 不为零时。我查看了 scipy
如何找到长度恰好为 8 个字符且以 zi 开头的文件示例名称: /home/ziDZaTxG /home/ziIbLnaG /home/ziQxgoXh /home/ziw2NOBD /home/zi
我在 Visual Studio 2012 解决方案中有以下项目: native (无 /clr )静态库项目,使用 /ZI 编译编辑并继续。 C++/CLI DLL 项目,它引用了上面的静态库。 C
背景 有几种不同的debug flags您可以与 Visual Studio C++ 编译器一起使用。他们是: (无) 创建无调试信息 更快的编译时间 /Z7 使用 CodeView 格式在 .obj
我的程序出现以下错误: error D8016: '/ZI' and '/clr' command-line options are incompatible 当我放置以下行并在配置->常规中启用
背景 有几种不同的debug flags您可以使用 Visual Studio C++ 编译器。它们是: (无) 不创建调试信息 更快的编译时间 /Z7 使用 CodeView 格式在 .obj 文件
Visual Studio 错误 D8016:“/ZI”和“/O2”命令行选项不兼容 我第一次使用 C++ 进行优化。当我“构建解决方案”时,我不断收到此错误。在属性页中,我将配置设置为发布在 pro
我正在处理的项目有问题。尽管代码是正确的,但我无法构建它,因为出现以下错误 Error D8016 '/ZI' and '/Gy-' command-line options are incompat
我找到了很多关于创建具有特定数值的数组的帮助,但我似乎找不到任何东西来帮助我在第一个或第二个问题中设置数组。 我不是在问这个作业的答案,这只是我的第一个 Python 作业,所以我是初学者,不知道如何
我是一名优秀的程序员,十分优秀!