问题标签 [ifft]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2620 浏览

matlab - Matlab中的模式识别

首先,我不确定这里是否适合提出这个问题,但我有一个关于图像处理的问题。我正在尝试在 Matlab 中编写模式识别代码。我有一个对象输入,它是 256x256 像素的原始数据,其中包括“ABCD”大写字母,一个过滤器也是 256x256 像素的原始数据,包括“A”大写字母,并且整个字母的尺寸相同。我的代码将是:

  1. 首先在matlab中读取这两个原始数据文件,显示这些图像
  2. 取对象和滤波器的二维傅里叶变换,显示这些图像
  3. 取过滤器的共轭物,
  4. 将它们相乘
  5. 取 4 的二维傅里叶变换,
  6. 显示 5 的输出。

此代码旨在查找 A 在输入和输出中的自相关。在执行这些操作时,滤波器中 B、C、D 和 A 之间的互相关将出现在输出中,但它们的强度将小于 A 的自相关。简而言之,在这段代码中,我们尝试使用卷积方法而不是相关性并在频域中执行此操作。我写了一个代码,但它不能准确地工作,尤其是输出图像不正确。我还寻找将原始文件加载到 Matlab 中的正确函数。我的代码:

谢谢。

0 投票
2 回答
876 浏览

floating-point - 两个实函数的同时快速傅立叶逆变换

我正在尝试使用单个 IFFT 计算两个实函数的傅里叶逆变换。到目前为止我发现的最好和最直接的解释是here,它说:

利用 FFT 是线性的这一事实,并形成第一个变换加上 i 乘以第二个变换的总和。您有两个向量 x1 和 x2,分别具有离散傅立叶变换 X1 和 X2。然后

x1 = Re[ IDFT[ X1 + i X2 ] ]

x2 = Im[ IDFT[ X1 + i X2 ] ]。

问题是我不知道“i”参数的来源。对此的任何提示将不胜感激。

提前致谢。

编辑:

在做了一些实验后,我终于让它工作了,但现在我比以前更困惑了,因为它没有按我的预期工作,不得不发挥一些想象力来找出正确的公式。

我刚刚组成了一个新的复杂数组,其中:

在对其进行 IFFT 后 x1 = Re 和 x2 = Im,那么这样表达不正确吗?

0 投票
1 回答
3463 浏览

fortran - FFTW:真实到复杂和复杂到真实 2D 变换的问题

正如标题所述,我正在使用带有 Fortran 90/95 的 FFTW(版本 3.2.2)来执行真实数据的 2D FFT(实际上是一个随机数字段)。我认为向前迈出的一步正在奏效(至少我得到了一些输出)。但是我想通过 IFFT 检查所有内容,看看我是否可以重新构建原始输入。不幸的是,当我将复杂程序调用为真正的例程时,什么都没有发生,也没有得到错误输出,所以我有点困惑。以下是一些代码片段:

上述前进步骤似乎有效(r2c),但后退步骤似乎无效。我通过区分 u 和 recov 数组来检查这一点 - 它最终不为零。此外,recov 数组的最大值和最小值都为零,这似乎表明没有任何变化。

我查看了 FFTW 文档,并将我的实现基于以下页面http://www.fftw.org/fftw3_doc/Fortran-Examples.html#Fortran-Examples。我想知道这个问题是否与索引有关,至少这是我倾向于的方向。无论如何,如果有人可以提供一些帮助,那就太好了!

谢谢!

0 投票
1 回答
2611 浏览

c++ - 如何执行 FFT2D(Fast Fourier Transform 2D)R、G、B 颜色分量

我是快速傅立叶变换 (FFT) 的新手,对它如何用 C++ 等编程语言计算并没有太多了解。这是FFT2D的方法

提示:图像像素存储为三个独立的图像颜色(R、G、B)平面,每个平面都由复数的一维数组表示。假设图像的大小为宽 W 高 H,则图像位置 (m, n) 处像素的颜色分量值 (R, G 和 B) 可以找到为 R[m + n * W], G( m + n * W) 和 B[m + n * W],其中 R、G、B 是三个复数数组。变换系数的一维数组也以相同的方式表示。

我只需要实现一种颜色分量的处理,编程模板将根据实现的功能分别处理R、G、B。该模板还将用零填充图像,以便每个输入图像的大小为 2m * 2n。

FFT1D 从 FFT2D 的函数内部调用。我在 C、C++、Java 和 C#of FFT2D 中发现了几种不同类型的代码。他们中的大多数都使用二维数组结构来实现;他们将实部和虚部分配给行和列循环中的二维数组结构。但是,在我的例子中是颜色分量的一维数组结构。

让我们做一些代码,这是在 FFT2D 函数中:

之前,调用 FFTID,还需要计算一个 twoK 的值,如书中的,M = 2K

如果您有任何想法或任何参考,请告诉我。

谢谢

问候一郎

0 投票
3 回答
4771 浏览

matlab - 如何在MATLAB中控制ifft输出的长度和采样时间?

我的频域数据如下所示:

在此处输入图像描述

这意味着我有一个向量 Y,其中包含向量 x 中频率点的幅度。例如

执行逆傅立叶变换应给出频率为 5Hz 的正弦波。

MATLAB 函数 ifft 可以将 Y 和 f 转换为时域。让我们调用时域 y 和 t 中的向量。我正在寻找一种方法来获取具有指定采样频率和指定信号长度的时域数据。例如,我想要信号长度为 1 秒,采样频率为 1000Hz 的时域数据。

MATLAB 的 ifft 函数的输出始终与输入具有相同的长度,因此我不确定要给出什么作为输入来获得所需的采样频率和信号长度。

总结一下,我正在尝试编写一个MATLAB函数

将频域数据 (f,Y) 转换为时域数据 (t,y),其中时间向量 t 的长度可以指定为信号长度(例如 1 秒)和采样频率(长度(y) /signal_length ) 可以用 sampling_frequency 指定

编辑:请在您的答案中包含如何实现您的想法的 MATLAB 代码。我已经有了如何做的概念,但我无法让实际的实现工作。我特意问什么作为 ifft 函数的输入参数:

我正在寻找当 (f,Y,sampling_frequency,signal_length) 已知时如何创建 input_arg 的 MATLAB 代码。

这是我的实现,但没有按预期工作:

0 投票
2 回答
2244 浏览

python - matlab 和 numpy 中的 ifft 给出不同的结果

我有另一个问题。与我已经问过的另一个非常相似(并得到了很大的帮助 - 再次感谢)。不幸的是,其他线程的解决方案在这里不起作用:(http://stackoverflow.com/questions/8680909/fft-in-matlab-and-numpy-scipy-give-different-results)

现在是关于ifft:

我对范围(1,6)等实数进行了实验。那么结果是一样的。会不会是精度问题?但是,为什么结果差异如此之大?也许有人知道如何解决这个问题?

0 投票
1 回答
2771 浏览

python - 对称谱的 iFFT

我在对称频谱上执行 iFFT(使用 Python)。为什么结果不是实数值信号而是包含复数值?

输出:

0 投票
1 回答
1047 浏览

matlab - 时域/频谱/DSP

我在复值频谱上执行 iFFT,并通过让第一个样本归零来更改相应的时域信号。最后我通过 FFT 将其转换回频域。

我想知道使用两侧(对称)频谱或仅使用一侧频谱(仅正频率)之间的(物理)差异在哪里,因为这两个结果是不同的(在比较正频率时)?

版本 1(两侧光谱): fft( nulling( ifft( [0, 1+1j, 2+j, 2-2j, 1-1j] ) ) )

输出:[-1.2,-0.2+1j,0.8+2j,0.8-2j,-0.2-1j]

版本 2(单边光谱): fft( nulling( ifft( [0, 1+1j, 2+j] ) ) )

输出:[ -1-1j, 0+0j, 1+1j]

0 投票
3 回答
9063 浏览

python - 倒谱法的基频

我试图通过倒谱法找到频率。对于我的测试,我得到了以下文件http://www.mediacollege.com/audio/tone/files/440Hz_44100Hz_16bit_05sec.wav,频率为 440Hz 的音频信号。

我应用了以下公式:

倒谱 = IFFT (log FFT (s))

我得到 256 块,但我的结果总是错误的......

对于这种情况,如何得到结果 = 440?

**

更新:

**

好吧,我在 matlab 中重写了我的源代码,现在一切似乎都正常了,我用 440 Hz 和 250 Hz 的频率进行了测试......

对于 440Hz,我得到 441Hz 还不错

对于 250Hz,我得到 249.1525Hz 接近结果

我确实做了一种简单的方法来将峰值转换为倒谱值。

我想我可以使用二次插值找到更好的结果来找到最大值!

我正在绘制我的结果以估计 440Hz

在此处输入图像描述

共享倒谱频率估计的来源:

0 投票
1 回答
1156 浏览

fft - 从过滤的 FFT 中取回数据

我已经对一些我想使用 Matlab 处理的数据应用了 FFT。产生的频率非常嘈杂,因此我对频率/幅度向量应用了移动平均滤波器。现在我有兴趣根据这个过滤的频域数据获取时域数据,以便稍后在光谱仪中使用。

为了获得频率/幅度分量,我使用了 Mathworks 示例中的以下代码:

并使用以下方法绘制:

您能推荐一种从过滤的 FFT 结果中获取时域数据的方法吗?是否涉及逆 FFT?

非常感谢!