使用 fft 在 Java 中实现我自己的低通滤波器

发布于 2024-11-11 13:47:46 字数 218 浏览 2 评论 0原文

我正在使用: 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

秋凉 2024-11-18 13:47:46

当给定 N 个样本的波形时,此 FFT 实现返回一个大小为 N 的数组,您必须将其视为大小为 N/2 的两个连续数组:

  • 到索引 N/2-1
  • 第一个从索引 0 到索引 N/2-1,第二个从索引 0 从索引 N/2 到数组末尾。

它们中的每一个都包含 0 到 N/2 之间每个整数频率的复能量(除了一个与另一个相反)。

因此,如果您想使所有等于或高于频率 F 的信号静音,则必须清零:

  • 从 F 到 N/2-1(含)的所有值,以及
  • 从 N/2-1+F 到 N/2- 的所有值1 包括在内。

然后您可以运行逆 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:

  • the first goes from index 0 to index N/2-1,
  • the second goes from index N/2 to the end of the array.

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:

  • all the values from F to N/2-1 inclusive, and
  • all the values from N/2-1+F to N/2-1 inclusive.

Then you can run the inverse FFT to get your filtered signal.

花开雨落又逢春i 2024-11-18 13:47:46

我想您会将 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文