问题标签 [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.
signal-processing - 倒谱分析:如何找到频率步长?
我是倒谱分析的新手。这就是问题所在。
我的信号长度为 4096,采样率为 8000 Hz。我进行 FFT 并得到长度为 4096*2 的数组(2*i 位置用于余弦系数,2*i+1 位置用于正弦系数)。频率步长为 (sampleRate/signalLength == 8000/4096)。所以,我可以这样计算 i 位置的频率:i*sampleRate/signalLength。
然后,我进行倒谱变换。我不明白如何找到频率步骤以及如何找到给定频率的频率。
performance - 只需要几个时间点时的逆 FFT
我想做一些会重复调用 iFFT 的建模。这将把复杂频率响应(幅度、相位)的参数模型作为输入,并产生脉冲响应作为输出。我想将此与我为房间中的扬声器测量的“窗口化”脉冲响应进行比较。测量的脉冲可以通过一个初始部分来表征,该部分对应于声音直接通过空气传播到麦克风,持续几毫秒,之后从房间表面(地板、墙壁等)反射的声音污染了麦克风。信号。未污染的部分可能是总测量脉冲的 5%。我想将 iFFT 从频率响应中生成的脉冲响应与仅测量脉冲的未污染部分进行比较。
如果需要,我可以从频率响应中计算出整个脉冲响应,然后丢弃 95% 的结果,但这似乎非常低效。在优化我的模型时,iFFT 将被计算很多次(可能是数千次),所以我想确保我可以使其尽可能高效。在这一点上,我唯一的选择似乎是使用 FFTW,然后丢弃不需要的数据(因为缺乏更好的主意)。
是否有一种快速的方法可以仅针对那些感兴趣的时间点计算逆 FFT,例如,不是针对 FFT 可以访问的整个时间跨度?例如,我可能只需要 5% 的时间点。我对 FFT 和 iFFT 的计算不是很熟悉,所以我对这个问题的答案没有洞察力。
编辑:我重新检查,如果我在 96kHz 记录一个 16k 脉冲,在反射污染信号之前只有大约 475 个“好数据”样本。这不到总记录信号的 3%。我怎样才能有效地从我的频率响应中计算出这 200 个点???
arrays - 在 Matlab 问题中使用 FFT 进行二维反卷积
我已经用我在 matlab 中定义的 2D 高斯函数对我在 matlab 中创建的图像进行了卷积,现在我正在尝试对结果矩阵进行反卷积,以查看是否使用 fft2 和 ifft2 命令恢复了 2D 高斯函数。然而,我得到的矩阵是不正确的(据我所知)。这是我到目前为止所做的代码:
% 输入图像代码 (img) [300x300 数组]
% 二维高斯函数代码,c = 0 sig = 1/64 (Z) [300x300 array]
img 与 Z (C) 的 2D 卷积的 % 代码 [599x599 数组]
% 我已经使用 img 和 C 的横截面轮廓向量测试了这个卷积是正确的,并且得到的 xy 图是我对卷积的期望。
%根据我对卷积的了解,该算法在傅立叶空间中用作乘数,因此通过将输出(卷积图像)的傅立叶变换除以输入(img),我应该得到点扩散函数(Z - 2D Gaussian function ) 在通过除法对该结果应用傅里叶逆变换之后。
% 尝试 2D 反卷积的代码
添加了 % 零填充以将结果增加到 599x599 数组
% 我现在得到这个错误提示:警告:矩阵接近奇异或缩放错误。结果可能不准确。RCOND = 2.551432e-22
我期待 iFR 接近 Z,但我得到了完全不同的东西。它可能是具有复数值的 Z 的近似值,但我似乎无法检查它,因为我不知道如何在 matlab 中绘制 3D 复矩阵。那么,如果有人能告诉我我的答案是正确还是不正确,以及如何让这种反卷积起作用?我将不胜感激。
vhdl - 跨设备内的时钟域
我正在设计一个 VHDL 中的导频插入模块,以在作为 OFDM 系统一部分的 FPGA 上实现。对于来自调制组件的每 48 个字,导频插入将添加导频音和 NULL 以填充 64 通道 IFFT 的剩余通道。我正在尝试实现该系统的流式操作,因此它将不断产生 64 个样本,用于以固定延迟向 IFFT 的串行输入。
我的方法是使用双端口 RAM,一个端口用于接收调制字,另一个端口用于写入 IFFT。每个端口都运行在一个独立的时钟上,在设备外部我有一个 4/3 时钟分频器,因此输出每 48 个时钟接收 64 个时钟到输入。
我的问题是这是否是一种有效的设计策略,以及我应该注意哪些类型的陷阱。另外,如果有人对我如何实现这一点有其他建议,我将不胜感激。
谢谢,技术专家
matlab - 从阴影中正确使用 fft2 和 fftshift
我正在尝试从 Trucco/Verri 文本“3d 计算机视觉介绍技术”中看到的着色算法重新创建经典形状,但我很难理解 matlab 中的 fft 函数。本质上,我需要使用可积性约束来获得图像的深度(Z)。我不确定在这种情况下何时使用 fftshift。这是我到目前为止的代码。基于http://www.mathworks.com/matlabcentral/newsreader/view_thread/285244 我基本上将我所有的 fft2 都包裹在 fftshifts 中,但我认为这不是正确的用法。有人可以向我解释一下用法和我做错了什么吗?谢谢你。基本上,我试图将我的 p 和 q(基于像素强度的更新值)转换为傅立叶域,以便在等式 C 中使用它们。然后我想将等式 C 转换回时域,因为这会给我 Z 的深度。我还想根据傅里叶域中的 C 更新 P 和 Q。
matlab - 为什么傅里叶逆变换不能给出正确的结果?
我在 Matlab 中对图像进行了傅里叶变换,现在我想进行逆傅里叶变换,但结果是一张全黑的图片,而不是原始图像。我认为在采取逆向之前我需要做一些步骤。感谢您的任何帮助。编码:
c - IFFT后虚部冲突
我想知道 IFFT 之后仅在虚构部分中发生冲突的原因。
对于我的 C/C++ 实现和 Matlab 实现,我都在执行相同的以下步骤。
- 我的信号x的维度是Mx1并且我对该信号执行N点 FFT(其中N = 2* M)以获得频域中的N点信号。
- 对此频域信号应用自定义滤波器(实部和虚部都逐步改变)。
- 在N点逆 FFT 中执行。
C/C++ 和 Matlab 实现都生成完全相同的结果,除了在逆 IFFT 步骤之后,虚部不匹配但实部匹配。
如果我跳过上面的步骤 2,两个实现的 IFFT 输出匹配没有任何问题。我的 IFFT 输入信号(即在 step2 滤波器之后)不需要是共轭对称的。事实上,这个信号甚至可能不是厄米特/对称的。
目前,我正在使用定义smbFft
为此CPP-FILE中可用函数的 FFT/IFFT 的 C 实现。
任何线索,为什么会发生这种情况?
PS:如果有人能指出 C/C++ 中的 FFT 实现,那就太好了,它与相应的 Matlab 实现完全一致。
谢谢。
编辑:我刚刚测试了 FFTW 实现而不是smbFfT
(我上面提到过)。FFTW 实现也有同样的问题,这表明这两个测试的 C 实现都使用厄米对称设置执行 IFFT。我需要在 C 中执行与 Matlab 对IFFT(..., 'nonsymmetric')
.
matlab - 傅立叶变换:获取 mag + 相位,然后使用它们绘制原始信号
嗨,伙计,我正在研究简单的信号,我想计算信号的傅里叶变换,得到幅度和相位,然后从中重建原始信号。
我的代码基于这个线程。
代码:
我完全得到不同的图表。
编辑:我实际上这样做是为了测试如果相位改变会发生什么信号。因此,我将需要相位角来再次构建信号。
我对 Fourier + Matlab 还是新手,所以如果我犯了一些随机的愚蠢错误,我深表歉意。如果你们能指出我正确的方向,我将不胜感激。谢谢你。
matlab - matlab中的对称FFT
我将在matlab中实现OFDM系统。我需要从数据中获取 IFFT 对称,然后再从结果中获取 FFT。IFFT 正确,但 FFT 不正确,结果数字的前一半类似于 IFFT 之前的数据,但后半部分是错误的。当我知道 IFFT 采用“对称”时,我只是不知道是否应该使用 FFT 函数。
这是我使用的功能:
谢谢
math - 逆 FFT 的计算复杂度
我正在尝试计算 ifft 的计算复杂度,我知道它是 N*1 维度的 NlogN 信号。但是我有两个信号的乘积,然后我想得到 ifft,然后计算计算复杂度。很简单,如果 X(w) 和 Q(w) 是两个时间信号的傅里叶变换,那么它们乘积的计算复杂度是多少。
注意:X(w) 和 Q(w) 具有相同的 (N*1) 大小。
ifft(X(w)*Q(w))=???