使用 fft 在 Java 中实现我自己的低通滤波器
我正在使用: http://introcs.cs.princeton.edu/ java/97data/FFT.java.html 来实现我自己的低通滤波器。
如何重新排列 FFT.fft() 的输出以将正确低通滤波器的正确值归零?
I'm using: http://introcs.cs.princeton.edu/java/97data/FFT.java.html to implement my own low-pass filter.
How do I rearrange the output from FFT.fft() to zero out the correct values for a correct low-pass filter?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
当给定 N 个样本的波形时,此 FFT 实现返回一个大小为 N 的数组,您必须将其视为大小为 N/2 的两个连续数组:
它们中的每一个都包含 0 到 N/2 之间每个整数频率的复能量(除了一个与另一个相反)。
因此,如果您想使所有等于或高于频率 F 的信号静音,则必须清零:
然后您可以运行逆 FFT 来获取滤波后的信号。
When given a waveform of N samples, this FFT implementation returns an array of size N, that you have to consider as two consecutive array of size N/2:
Each of them contain the complex energy for each integer frequency between 0 and N/2 (except that one is the opposite of the other).
So if you want to silence all signals equal or above frequency F, you have to zero out:
Then you can run the inverse FFT to get your filtered signal.
我想您会将 fft 方法返回的 y 数组中频率(由数组索引确定)高于截止值的所有值清零。
I imagine that you would zero out all the values in the y array returned from the fft method that have a frequency (determined by the the array index) above your cut-off.