Questions tagged «fft»

快速傅立叶变换是一种有效的算法,可以计算离散傅立叶变换(DFT)及其逆。

4
并行计算FFT的算法
我试图并行化TB级信号文件上FFT的计算。现在,使用开源库进行这样的FFT需要花费数小时,即使在我拥有的最快GPU上通过CUDA运行时也是如此。我正在尝试适应此过程的框架是Hadoop。用非常基本的术语来说,Hadoop通过以下方式将问题分配到任意数量的服务器节点上: •您将输入文件分成(键,值)对。 •这些对被输入到“映射”算法中,该算法根据您放入映射中的内容将您的(键,值)对转换为其他一些(键,值)对。 •然后,框架从Maps收集所有(键,值)输出,并按键对它们进行排序,并将具有相同键的值聚合为一对,因此最后得到了(键,list(value1,value2, ..))对 •然后,将这些对馈入“ Reduce”算法中,该算法依次输出更多(键,值)对作为您的最终结果(写入文件)。 该模型在诸如处理服务器日志之类的实际应用中有许多应用程序,但是我很难应用该框架将FFT分解为“映射”和“减少”任务,特别是因为我对DSP并不很熟悉。 我不会打扰您,因为这是DSP问题与解答。但是,我对存在哪些并行计算FFT的算法感到困惑;映射和归约任务无法(在技术上)相互交谈,因此必须将FFT分成独立的问题,最后可以以某种方式重新组合结果。 我已经为Cooley-Tukey Radix 2 DIT编写了一个简单的实现,可以在较小的示例上运行,但是将其用于递归计算十亿字节的奇/偶索引DFT将不起作用。我花了几周时间阅读许多论文,包括一篇关于MapReduce FFT算法的文章(由Tsz-Wo Sze作为其关于SSA乘法的论文的一部分撰写,我不能链接两个以上的超链接)和“四步FFT” (这里和这里),它们看起来彼此相似,而且与我要完成的任务相似。但是,我在数学上是绝望的,将这些方法中的任何一种手工应用于{1,2,3,4,5,6,7,8}(所有虚部均为0)这样的简单集合,可以得出我非常不正确的结果。谁能用简单的英语(我链接的或其他链接的)向我解释一种有效的并行FFT算法,以便我尝试对其进行编程? 编辑:吉姆·克莱(Jim Clay)和其他可能对我的解释感到困惑的人,我正在尝试对TB文件进行一次FFT。但是我希望能够在多台服务器上同时执行此操作,以加快该过程。
12 fft 

4
使用FFT有效计算自相关
我正在尝试在平台上计算自相关,其中我唯一可用的加速原语是(I)FFT。我有一个问题。 我在MATLAB中原型化了它。但是,我有点困惑。我以为它的工作原理如下(这是从内存中来的,如果我有一点错的话,我深表歉意)。 autocorr = ifft( complex( abs( fft( inputData ) ), 0 ) ) 但是,我得到的结果不同于使用该xcorr函数得到的结果。现在,我完全期望不要获得自动相关的左侧(因为这是右侧的反映,因此无论如何都不需要)。但是,问题是我的右手侧似乎在中点附近反射。这实际上意味着我得到的数据量约为预期的一半。 因此,我敢肯定我一定在做一些非常简单的错误,但我只是不知道该怎么做。

3
如果频率分辨率良好,为什么在零填充后DFT中会有频率泄漏?
让我们考虑这个例子: Fs=1000; Ns=500; t=0:1/Fs:(Ns-1)*1/Fs; f1=10; f2=400; x=5+5*sin(2*pi*f1*t)+2*sin(2*pi*f2*t); X=fft(x); 在这种情况下,频率分辨率为2,并且正确捕获了所有频率分量。但是,如果我这样做: X=fft(x,1000); 频率分辨率为1,但存在频谱泄漏。在这里看到类似的效果。在我看来,两个窗口的傅立叶变换(一个长度为500,一个长度为1000)在信号中显示的频率处为零,所以我不明白为什么会发生泄漏?

2
我们为什么说“零填充并不能真正提高频率分辨率”
这是频率f = 236.4 Hz(正弦为10毫秒;N=441以采样率表示点fs=44100Hz)和DFT(无零填充)的正弦曲线: 通过查看DFT可以得出的唯一结论是:“频率大约为200Hz”。 这是信号及其DFT,带有大的零填充: 现在我们可以给出一个更为精确的结论:“通过仔细观察频谱的最大值,我可以估算出236Hz的频率”(我放大并发现最大值接近236Hz)。 我的问题是:为什么我们说“零填充不会增加分辨率”?(我经常看到这句话,然后他们说“只添加插值”) =>以我的示例为例,零填充可帮助我以更精确的分辨率找到合适的频率!

2
什么统计用于确定噪声中信号的存在?
我相信这是一个检测器问题: 似乎是一个简单的问题使我感到困惑。基本上,我有一个兴趣范围。如果信号能量存在于该感兴趣的频带内,那么我将对信号执行操作X。 我的问题是我不确定如何确定信号是否存在。这样,在执行FFT之后,我可以寻找峰值。 但是现在呢? 通常使用统计信息将此峰与频谱的周围均值进行比较吗?还是其他一些统计数据? 我使用什么统计量来简单地确定是否存在信号,然后从那里去? 如何设置此值?简单的阈值? 编辑基于反馈: 对于这种简单的情况,我假设一个高斯白噪声的音调。我试图解决的是: 如何精确地生成ROC 曲线。是否必须先标记所有数据,然后针对多个阈值获得正确率和错误率? SNR降低如何影响ROC曲线?移到对角线? 对给定的ROC曲线进行自适应阈值处理是什么? 3a。我可以看到哪些常见的自适应阈值技术?

6
有执行双傅立叶变换的实际应用程序吗?…或在时域输入上进行傅立叶逆变换?
在数学中,您可以采用函数的双导数或双积分。在许多情况下,执行双导数模型可以模拟实际的实际情况,例如找到对象的加速度。 由于傅立叶变换将实数或复数信号作为输入,并产生复数信号作为输出,因此没有什么会阻止您获取该输出并再次应用傅立叶变换...在此方面有任何实际用途吗?这个?它有助于对一些复杂的现实情况进行建模吗? 按照相同的逻辑,没有什么可以阻止您对原始时域输入信号进行傅立叶逆变换了……这会有用吗?为什么或者为什么不?

2
图像重建:相位与幅度
图1.(c)仅显示了从MAGNITUDE光谱重建的测试图像。可以说,低频像素的强度值比高频像素高。 图1.(d)仅显示从PHASE光谱重建的测试图像。可以说,高频(边缘,线条)像素的强度值比低频像素更大。 为什么在仅从MAGNITUDE光谱重建的测试图像和仅从PHASE光谱重建的测试图像之间存在这种强度变化(或交换)的神奇矛盾,它们组合在一起形成原始测试图像? clc; clear all; close all; i1=imread('C:\Users\Admin\Desktop\rough\Capture1.png'); i1=rgb2gray(i1); f1=fftn(i1); mag1=abs(f1); s=log(1+fftshift(f1)); phase1=angle(f1); r1=ifftshift(ifftn(mag1)); r2=ifftn(exp(1i*phase1)); figure,imshow(i1); figure,imshow(s,[]); figure,imshow(uint8(r1)); figure,imshow(r2,[]); r2=histeq(r2); r3=histeq(uint8(r2)); figure,imshow(r2); figure,imshow(r3);

3
ADC性能仿真:如何从FFT计算SINAD?
在解决这个问题时,我开始怀疑我最初定义的 SINAD=10log10(pf∑i(pi)−p0−pf)dBSINAD=10log10⁡(pf∑i(pi)−p0−pf)dBSINAD = 10 \log_{10} \left( \frac{p_f} {\sum_i{(p_i)} - p_0 - p_f} \right)dB 是正确的。在式中,是频率为 FFT仓的功率,是包含信号频率的频率仓的功率,而是DC分量。在去除DC分量和信号频率之前,的总和累加所有频率分量。pxpxp_xxxxpfpfp_ffffp0p0p_0iiip0p0p_0pfpfp_f 更具体地说,我不确定部分,我是从Wikipedia描述中解释的∑i(pi)∑i(pi)\sum_i(p_i) (a)原始调制音频信号的功率(即来自调制射频载波的功率)与(b)剩余音频功率(即在去除原始调制音频信号之后剩余的噪声加失真功率)的比值。使用此定义,可以使SINAD级别小于1。 与等式相比,“原始调制音频信号”处于频率,这在FFT 的项中得到解释。我从以下论文中获得了项,该术语表示要除去DC分量:fffpfpfp_fp0p0p_0 在“了解SINAD,ENOB,SNR,THD,THD + N和SFDR”文档中,它说 信噪比(SINAD,即S /(N + D))是均方根信号幅度与所有其他频谱分量(包括谐波)的均方根(rss)的平均值之比,但不包括直流 查看这些定义,我可以想到SINAD的另一个可能的定义,即 SINAD=10log10⎛⎝⎜pf∑i(p2i)−−−−−−√−p0−pf⎞⎠⎟dBSINAD=10log10⁡(pf∑i(pi2)−p0−pf)dBSINAD = 10 \log_{10} \left( \frac{p_f} { \sqrt{ \sum_i{(p_i^2)} } - p_0 - p_f} \right)dB 它使用FFT结果的噪声和失真区间的RSS(均方根)。但是,那个文档中的“均值”到底是什么意思呢?
11 fft  noise 

3
边缘检测可以在频域中进行吗?
我们可以利用图像FFT中的高频分量通常对应于边缘这一事实来在傅立叶域中实现边缘检测算法吗?我确实尝试过将高通滤波器与图像的FFT相乘。尽管生成的图像种类对应于边缘,但它并不是使用卷积矩阵建立的边缘检测。那么,您有什么方法可以在傅立叶域中进行边缘检测,或者根本不可能?

3
如何创建失真补偿滤波器
我正在创建一个由复杂混频器,CIC抽取器和FIR补偿/抽取滤波器组成的通道器。如果重要的话,最终的FIR滤波器可以实现为多个滤波器。 我的问题是,如何设计滤波器以补偿CIC滤波器的非平坦频率响应?您是否通过计算CIC响应的倒数来创建所需的频率响应,然后通过逆FFT对其进行运算以获得脉冲响应? 如您所见,尽管我的特定问题与CIC滤波器有关,但我的问题实际上是关于如何创建任何类型的失真补偿滤波器。 谢谢你的时间。

3
如何平均复杂的响应(和理由)?
我正在开发通过比较输入和输出信号的FFT计算系统响应的软件。输入和输出信号被划分为多个窗口,并且对于每个窗口,将信号进行中值相减并乘以Hann函数。那么,该窗口的仪器响应就是已处理数据的FFT比率。 我相信以上是标准程序,尽管我可能对此描述不佳。我的问题来自如何组合来自多个窗口的响应。 据我所知,正确的方法是在所有窗口中平均复数值。振幅和相位响应就是每个频率上平均复数的振幅和相位: av_response = sum_windows(response) / n av_amplitude = sqrt(real(av_response)**2 + imag(av_response)**2) av_phase = atan2(imag(av_response), real(av_response)) 频点上的隐式环路。 但我一直在问这个改变计算幅度和在每个窗口期第一,然后平均在所有窗口的振幅和相位: amplitude = sqrt(real(response)**2 + imag(response)**2) av_amplitude = sum_windows(amplitude) / n phase = atan2(imag(response), real(response)) av_phase = sum_windows(phase) / n 我认为这是不正确的,因为平均角度“是错误的”-例如,0度和360度的平均值为180度,但是与我合作的人回答说“好,我们只会显示振幅”。 所以我的问题是: 我是否认为第二种方法对振幅也普遍不正确? 如果是这样,是否有任何可能相关的例外情况?这些例外情况可以解释为什么我与之共事的人更喜欢第二种方法?例如,随着噪声变小,这两种方法看起来会一致,那么这可能是低噪声的公认近似值吗? 如果第二种方法不正确,那么可以使用任何令人信服的权威参考来证明这一点吗? 如果第二种方法不正确,是否有任何好的,易于理解的示例针对振幅进行显示(如相位为0和360度的平均值)? 另外,如果我做错了,对我来说,如何更好地自我教育的好书呢? 我试图证明-1 1 1 -1 1 …

4
DFT-通过卷积消除光谱域中的窗效应
我当时在考虑DFT窗口化主题,然后想到一个想法。DFT将产生与所用窗口频谱卷积的信号频谱,因此具有主瓣和旁瓣。 我认为可以通过再次对信号和窗口频谱幅度进行卷积来消除对信号频谱的窗口效应,而且确实如您在下图中看到的那样工作。 左边是用汉宁窗生成的原始光谱。右侧是由汉宁窗的DFT卷积的光谱。顶部是Spectrum本身,底部是MATLAB findpeaks结果。 我从未读过任何有关该技术的文章,但是我很确定自己还没有发明任何东西。因此,我想知道从频谱上进行此处理是否有好处,或者我看不到它的不利之处。 据我所知,这可以帮助进行峰值检测,就像我们在上一张图片中看到的那样。同样,正如我们在下面的两幅图像中所看到的,频谱似乎有些失真。: 蓝色图是光谱,红色图是后卷积光谱。 有什么想法吗? FFT后的卷积是否会引起问题? 有论文可以治疗这个问题吗? 编辑 您可以在此处找到一个脚本,该脚本将生成以下图形:

3
MATLAB:
在MATLAB中,fft和/或ifft函数的输出通常需要进行额外的处理,然后再考虑进行分析。 我听过很多关于正确的观点的意见: 缩放比例 Mathworks声明fft和ifft函数基于以下方程式: X[k]x[n]=11⋅∑n=1Nx[n]⋅e−j⋅2π⋅(k−1)⋅(n−1)N,where1≤k≤N=1N⋅∑k=1NX[k]⋅e+j⋅2π⋅(k−1)⋅(n−1)N,where1≤n≤NX[k]=11⋅∑n=1Nx[n]⋅e−j⋅2π⋅(k−1)⋅(n−1)N,where1≤k≤Nx[n]=1N⋅∑k=1NX[k]⋅e+j⋅2π⋅(k−1)⋅(n−1)N,where1≤n≤N\begin{align} X[k] &= \frac{1}{1} \cdot \sum_{n=1}^{N} x[n] \cdot e^{\frac{-j \cdot 2 \pi \cdot (k-1) \cdot (n-1)}{N}}, \quad\textrm{where}\quad 1\leq k\leq N\\ x[n] &= \frac{1}{N} \cdot \sum_{k=1}^{N} X[k] \cdot e^{\frac{+j \cdot 2 \pi \cdot (k-1) \cdot (n-1)}{N}},\quad \textrm{where}\quad 1 \leq n\leq N \end{align} 按信号长度缩放 我的同伴通常将数据缩放在处理后立即生效。 (在缩放之前,我们不考虑原始数据。)1N1N\small \frac{1}{N}fftfft%%执行 X_f …
11 matlab  fft  ifft 

3
特定频率范围的FFT。
我想将信号转换为频域。所需的频率范围为0.1 Hz,1 Hz频率分辨率为0.01 Hz。 采样率为时30 Hz,FFT给出的频率分量高达15 Hz。提高采样率可提供更好的频率分辨率。但是,FFT可以提供更宽的频率范围。就我而言,我只是想0.1 Hz给1 Hz,FFT放弃对15 Hz(额外的计算)。 我的问题是,是否有标准方法可以计算具有特定频率范围和高分辨率的信号的频域?
11 fft  frequency 

2
如何使用频域数据进行预测?
线性回归和卡尔曼滤波均可用于估计数据,然后根据数据的时域序列进行预测(给定关于数据背后模型的一些假设)。 哪些方法(如果有)可能适用于使用频域数据进行预测?(例如,使用先前数据的合适FFT的输出来预测未来的步骤,而不必回到时域进行估计。) 对于频域中预测的质量或最优性(如果有),可能需要对数据或数据背后的模型有什么假设?(但是,假设数据源在FFT孔径宽度上是否严格周期性是未知的。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.