问题标签 [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 投票
3 回答
5325 浏览

fft - KissFFT (kiss_fftr to kiss_fftri) - 如何重建原始信号?

我在理解如何正确使用 KissFFT (1.2.9) 时遇到了一些麻烦。我现在想要实现的只是执行 FFT,然后立即执行 iFFT 以再次重建原始信号。下面的代码片段演示了我在做什么:

我发现这实际上在运行时崩溃。我发现在创建 KissFFT 配置时将大小除以 2 可以停止崩溃:

但是,当我播放重建的音频数据时,它几乎是无声的,带有奇怪的噼啪声。

谁能指出我正确的方向?

非常感谢,P

编辑 1:这就是我包含 KissFFT 头文件并定义 FIXED_POINT 变量的方式:

这确保了 typedef'd 'kiss_fft_scalar' 类型被强制为 int16_t(短)。

编辑 2:目标平台是 Android,所以我还在我的 Android.mk 文件中添加了以下内容:

0 投票
1 回答
19295 浏览

matlab - fft/ifft:信号的采样频率和长度

这部分取自 Matlab fft 文档:

在我看来,只要信号的长度是采样频率的倍数,正弦曲线就会被正确重建(除了一些偏移),例如这里Fs = 30, L = 60

在此处输入图像描述

但是,如果例如Fs = 30, L = 80(不是倍数),结果看起来很奇怪:

在此处输入图像描述

这种行为正确吗?为什么会发生这种情况,我该如何避免这种情况?只是扔掉信号的一部分,使长度“适合”采样频率?

0 投票
1 回答
7688 浏览

c++ - C++ 中的 FFT 和 IFFT

我正在使用 C++/C 对一些应该是激光脉冲输出的数据执行正向和反向 FFT。

这个想法是获取输出,使用前向 FFT 转换到频域,对相位应用线性最佳拟合(首先展开它),然后从相位信息中减去这个最佳拟合。

然后将得到的相位和幅度转换回时域,最终目标是通过相位补偿压缩脉冲。

我试图在 MATLAB 中这样做没有成功,结果转向了 C++。前向 FFT 工作正常,我从 C++ 中的 Numerical recipes 中获取了基本配方,并使用了一个函数来修改它以适应复杂的输入,如下所示:

使用ftt_basic()取自“数值食谱 C++”的函数。

我的问题是输入的形式似乎会影响反向 FFT 的输出。这可能是一个精度问题,但我环顾四周,它似乎并没有影响到其他任何人。

将正向 FFT 的输出直接反馈回反向 FFT 会产生与输入相同的脉冲:

在此处输入图像描述

然而,将前向 FFT 的功率输出real^2+imag^2复制到一个数组中,这样:

然后将其用作反向 FFT 的输入,得到以下结果: 在此处输入图像描述

最后,获取正向 FFT 的输出并复制如下:

其中 Amplitude[i]=(real^2+imag^2)^0.5 和 phase[i]=atan(imag/real)。转换回时域时产生以下功率输出:

在此处输入图像描述

仔细看看脉冲结构:

在此处输入图像描述

当第一张照片产生良好、规律的脉冲时。

我的问题是,是 cos 和 sin 函数的精度导致反向 fft 的输出变成这样吗?为什么复杂数据的不同输入方式存在如此巨大的差异,为什么只有直接反馈到反向FFT时,时域数据才与原始数据相同?输入到前锋FFT?

谢谢你。

*这里编辑是功能的实现:

{

再次感谢!

0 投票
1 回答
1654 浏览

c# - IFFT 来自 AForge.Net 中的 FFT

我正在将代码从 Matlab 重写为 C#。我对数学完全陌生。我必须使用在 AForge.net 库中找到的 FFT 函数,但现在我需要 IFFT。这可以使用 FFT 在几行中计算 IFFT 吗?

Aforge.Net FFT 声明:

0 投票
1 回答
3982 浏览

python - Using scipy fft and ifft to solve ordinary differential equation numerically

I have an ordinary differential equation in time domain as follows:

where I = A*t/tau*exp^(1-t/tau)

in the freq domain:

j being the complex number sqrt(-1)

hence i can get u(t) by going into the freq domain using fast Fourier transform (fft) and then back using ifft.

the codes:

However, when I compare this u(t) obtained with other methods such as numerical integration of the differential equation or its analytical form, it is not correct. I have tried and been unsuccessful at figuring out where my mistakes are.

please enlighten.

0 投票
2 回答
671 浏览

java - 我如何将 fft 应用于图像,显示图像,然后对 ifft 执行相同的操作?

在此处输入图像描述在此处输入图像描述在此处输入图像描述这个问题有点宽泛。

这是我所做的:

我有一种应用 fft 的方法。我不打算发布它,因为它是否正确并不是这里的重点。

我通过该方法运行一个图像,然后尝试显示两个相同大小的图像,一个用于实部,一个用于虚部。

这似乎工作正常,除了我的方法产生的灰度值通常远大于 255,因此我不确定我看到的是什么。

然后我获取原始结果(不是我显示的任何像素值,因为我假设它们以某种方式被修改以适应 0 到 255 之间)并通过与以前相同的方法运行它,但通过符号更改来实现 ifft。

然后我也尝试显示它。同样,原始值在大多数情况下都远大于 255。

我的问题归结为:a.) 我是否必须对 fft 进行一些缩放以使其适合 0 到 255 之间?b.) 当我做 ifft 时,我是否必须反转这个缩放比例?c.) 在我申请 ifft 之前,我必须在 fft 上做任何翻译吗?

c部分源于我已经阅读了一些关于将fft的角落居中的内容,但我不确定这意味着什么。

一个较小的问题,d 部分,如果我通过首先将 1d fft 应用到所有行然后再应用到所有列来在原始图像上应用 2d fft,我是否需要以相同的顺序应用 ifft 或我需要颠倒顺序吗?

我想这就是现在的全部。我一直在寻找答案,但似乎找不到太多,因此不胜感激。

编辑:我添加了一些图片,也许它们会有所帮助。第一个是原始图像,第二个是我的 fft 方法(幅度和虚部)的结果,第三个是中间图像上的 ifft 的结果。

EDIT2:将图像更新为来自较新方法的图像。

0 投票
1 回答
175 浏览

image - 反转二维 fft 的顺序是否重要?

我一直在尝试先在行上应用 fft,然后再在第一个应用程序产生的列上应用 fft。

我的问题是,当我尝试应用 ifft 时,我是否需要先将其应用到列,然后再应用到行,反之亦然还是没关系?

谢谢

0 投票
1 回答
11432 浏览

matlab - 如何将频域转换为时域

我创建了一个 3 个三个不同频率的信号并过滤掉我不想要的信号。但是当我在matlab中使用ifft时,它显示了一个错误的图。如何将我的频域频谱转换回我的3秒时域图?下面我的代码如下:

0 投票
1 回答
7635 浏览

matlab - Matlab - 如何修复:警告:显示复杂输入的实部?

给定代码

我不断得到: Warning: Displaying real part of complex input当我执行该行时output = mask.*fourierImg; % calc with the mask

我该如何解决?

问候

0 投票
1 回答
3259 浏览

numpy - ifft(fft(audio)) 只是噪音

无论我只是嵌套它们(iff(fft(audio)))还是逐个窗口尝试(window音频,执行fft,执行ifft,然后反转窗口,用 eps 替换零,然后将样本合并回来(abs在管道中到处尝试))我只得到噪音。

我知道这与无限精度算术、无限多样本等ifft唯一相反fft(对吗?)我正在使用 64 位浮点和 44kHZ 采样率。但是,我希望至少能够听到原始音频。

我的错误是实际的还是理论上的?我可以给代码,如果它是一个错误。