问题标签 [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.
matlab - 从频率响应和相关的相位响应中创建真实信号
我正在尝试在 MATLAB 中创建真实信号,例如正弦波或正弦扫描。由于我想深入研究离散傅里叶变换的理论,我试图通过为我的频率响应和频域中的相关相位响应定义一个向量来创建这些信号,以使用在时域中检索相应的信号一个1000点ifft
的MATLAB函数。问题是,我就是无法正确获得相位响应。
对于正弦波,它以某种方式起作用,即使相位响应不正确。我知道这些相位响应应该是什么样子,但我无法重新创建它们。任何如何重新创建这些阶段响应的提示或建议将不胜感激。也许我没有正确地完成这项任务,我只是很困惑......
matlab - 带 fft 的点积
根据卷积定理,时域中的卷积是 fft 域中的乘积。使用正确的零填充,它可以工作:
然而,这个定理也应该反过来起作用,时域中的乘积是 fft 域中的卷积。我没有得到这部分:
这给出了 d_bis 的复向量。如何使用频域中的卷积来反转时域中的逐点乘积?
signal-processing - 用于信号合成的重叠添加
如果这个问题非常基本,我深表歉意。
我正在使用 FFT 将音频信号(目前是纯正弦波)从时域转换到频域,然后返回时域以比较与原始信号的差异。
目前我这样做:
- 采用非重叠帧(例如每帧 1024 个样本)。
- FFT 该帧
- iFFT 频域信息
- 将输出发送到扬声器
编辑(1):
这似乎现在可以工作(参见没有和有窗口的图像,其中输入=棕色,输出=蓝色)。
结束编辑 (1)
现在我想执行overlapp-add 方法:
- 采用50% 重叠的帧(样本0-1023、512-1535、1024-2047...)
- 将Hanning 窗口应用于ecah 帧
- FFT
- iFFT
- ?? ? 这是我的问题!!
所以在我的 iFFT 结束时,我有一个 1024 个样本的输出帧。这是否意味着我需要将前 512 个样本发送给扬声器,而其他 512 个样本 (512-1023) 应该保存在缓冲区中以添加到下一帧的前 512 个样本中?是这么简单还是我误解了什么?
谢谢!
signal-processing - 相位声码器 - 需要合成窗口?
我已经在相位声码器上苦苦挣扎了几个星期。最终目标是实现信号的时间拉伸。我已经取得了很大的进步,但我仍然有两个问题需要解决。
问题1:我需要一个综合窗口吗?
我从输入信号(正弦波)中获取具有任何跳跃大小(例如 N/2,N = 每帧样本)的重叠帧。我将汉宁窗应用于框架并将结果提供给 FFT。为了实现时间拉伸,我执行 iFFT 并使用与分析期间使用的跳数不同的跳数重叠添加输出帧。
问题是输出跳跃因子= 0.5(跳跃大小= N / 2)输出是平滑的,但是对于更大的跳跃大小,我可以听到“振动”。该图像显示了 8 帧的输出,其中跳跃因子 = 1(零重叠)。很明显为什么声音在振动。对于小跳数,帧重叠更多,声音更平滑。我读过很多关于相位声码的文章,但我似乎不知道如何获得大跳数的平滑输出。我错过了什么?
问题 2:相位校正。
目前,相位校正后的输出听起来更糟,但我将把它留到另一篇文章中。
提前感谢您抽出宝贵时间。
c++ - fft 的反 fft 不返回预期数据
我正在努力确保 FFTW 做我认为应该做的事情,但是遇到了问题。我正在使用 OpenCV 的cv::Mat
. 我做了一个测试程序,给定一个 Mat f
,计算ifft(fft(f))
并将结果与f
. 我希望两者之间的差异可以忽略不计,但数据中有一个奇怪的模式..
在这种情况下,f
初始化为一个 8x8 浮点数组,其正值小于 1。
这是我的测试程序代码:
DLOG
我的记录器在哪里,Util::summary(cv::Mat m)
只打印传递的字符串以及垫子的尺寸、通道、最小值和最大值。
这是数据的样子(输出):
对我来说困难的部分是diff
矩阵中的非零条目。我已经考虑了 FFTW 对值的缩放以及对真实数据进行就地 fft 所需的填充;我错过了什么?
我发现令人惊讶的是,当有这么多零时,数据可能会偏离 17 的值(这是最大值的 66%)。此外,数据不规则似乎形成了对角线模式。
python-2.7 - 我在 MATLAB 和 Python 上都做了相同的代码,但是 ifft2 返回不同的值?
我一直在尝试使用 OpenCV2 和 NumPy 在 MATLAB 和 Python 上实现频域同态滤波器,MATLAB 代码给出了预期的答案,但 Python 没有,生成的图像非常奇怪。我测试了所有变量并得出结论,唯一不同的是IFFT。在 MATLAB 上,结果可以正常应用到exp
函数中,并返回预期的过滤后的原始图像,但 Python 的值ifft
有很大不同。我碰巧看到其他有类似问题的帖子,但没有令人满意的答案(也许我也不太擅长搜索......)。MATLAB 代码
和 Python 代码(可能有一些错误,但总体有效)
我真的不明白,为什么结果如此不同?有人有什么主意吗?
fortran - 进行从复数到实数的 fftw3 MPI 傅里叶变换时的奇怪行为
考虑一个问题,您希望将 f(x,y) ~ cos(x) 的光谱表示转换为坐标空间。所以 exp(i*x) + exp(-i*x) ----> f(x,y),其中 f(x,y) = some_factor * cos(x) 。
在以列为主的布局中(我的示例在 Fortran 2003/8 下面编写),光谱阵列将被初始化为,
在转换之后,应该得到一个 实数(双精度)的tgt数组,其中所有列都是相同的,并且每一列都表现为一个 cos(x) 函数。
但是,使用下面给出的代码,我得到一个tgt数组,其中只有奇数列表现正确,而偶数列都为零。
什么,如果我做错了什么?
我的 fftw3 版本是 3.4.4 。
c# - 在 C# 中将 fft 转换为 ifft
我有一个有效的 FFT,但我的问题是如何将其转换为 IFFT?有人告诉我,IFFT 应该就像您使用的 FFT 一样。那么如何从 fft ic# 制作 ifft 呢?有人告诉我,应该只做一些改变才能得到结果。
我试着自己做,但我没有得到与我输入的相同的值......
所以我创建了一个值数组并将其放入 fft,然后放入 ifft,我无法获得与放入相同的值...
所以我认为我没有以正确的方式改变它。
这是我的 FFT:
fft - FFTW - 在不首先计算 FFT 的情况下计算 IFFT
这似乎是一个简单的问题,但我一直试图在 FFTW 页面上找到答案,但我无法。
我为前向和后向变换创建了 FFTW 计划,并将一些数据直接输入到 fftw_complex *fft 结构中(而不是先从输入数据计算 FFT)。然后我对此计算了一个IFFT,结果不正确。我这样做对吗?
编辑:所以我做的是以下内容:
这是完整的代码。ifft 应该为实部返回 [1 1 1 1]。它没有。
python - 在 Python 中加速 IFFT 计算
我正在开发一个 Python 程序(在 Enthought Canopy 中),它将计算 2 维和 3 维图像的两点自相关函数。
计算的核心是以下代码:
newimpad
填充图像在哪里。
这行得通。然而,反向变换(ifftn
步骤)非常慢——对于我一直在处理的 2D 大图像,它需要 90 多秒。有什么办法可以加快这个速度吗?