fft

FFT Convolution - 3x3 kernel

纵饮孤独 提交于 2019-12-30 09:49:10
问题 I have written some routines to sharpen a Grayscale image using a 3x3 kernel, -1 -1 -1 -1 9 -1 -1 -1 -1 The following code is working well in case of non-FFT (spatial-domain) convolution, but, not working in FFT-based (frequency-domain) convolution. The output image seems to be blurred. I have several problems: (1) This routine is not being able to generate desired result. It also freezes the application. public static Bitmap ApplyWithPadding(Bitmap image, Bitmap mask) { if(image.PixelFormat

数字信号处理专题(3)——FFT运算初探

筅森魡賤 提交于 2019-12-30 01:23:43
一、前言   FFT运算是目前最常用的信号频谱分析算法。在本科学习数字信号处理这门课时一直在想:学这些东西有啥用?公式推来推去的,有实用价值么?到了研究生后期才知道,广义上的数字信号处理无处不在:手机等各种通信设备和WIFI的物理层信号处理、摄像头内的ISP、音频信号的去噪等。各种算法中,FFT是查看信号本质,也就是频谱的重要手段。之前仅直接调用FFT/IFFT IP核,今天深入探讨下算法本身和实现方案。 二、FFT运算原理及结构   本文仅对FFT的核心思想、作用和算法结构进行介绍,FFT具体原理和公式推导详见参考文献。FFT是DFT的快速算法,旨在降低计算复杂度以减小处理延迟和占用的软硬件资源,核心思想是将大点数的DFT运算拆分成多个小点数的DFT运算。因此FFT核心公式与DFT相同。    DFT运算把原始信号采样点与不同的旋转因子做乘累加运算,而旋转因子经过欧拉公式展开后就是角度成倍数关系的正余弦函数。现在DFT在干什么以及怎么干的一目了然:把一段原始信号采样点与不同频率的正余弦信号做“相关运算”,从而找出信号的频率分量。通俗点说就是 通过查看信号与不同频率值正余弦信号的相似程度分析信号本身的频率成分 。工程应用时,了解到这一点就足够了。   有了上述理解,再来看FFT算法

Real FFT

半城伤御伤魂 提交于 2019-12-30 01:23:08
[文/告别年代 Email: byeyear@hotmail.com ] FFT算法是针对复信号的,而现实场景中很多时候时域是实信号,此时有两种办法加快FFT的速度。 1. 使用一个N点的复FFT同时处理两个N点的实序列 假定我们有两个N点的实序列x[n]和y[n],它们的FFT具有如下性质:实部偶对称,虚部奇对称。因此可将它们的FFT写为如下形式: x[n] --F--> Nyquist以下部分:a+bi;Nyquist以上部分:a-bi y[n] --F--> Nyquist以下部分:c+di;Nyquist以上部分:c-di 将这两个实信号拼成一个复信号z=x+yi,因FFT变换满足加法和乘法组合定理,z的FFT变换如下: z[n] --F--> Nyquist以下部分:p+qi = a+bi+i(c+di) = (a-d)+(b+c)i,即实部p=a-d, 虚部q=b+c Nyquist以上部分:s+ti = a-bi+i(c-di) = (a+d)+(-b+c)i,即实部s=a+d, 虚部t=-b+c 于是我们可以从z[n]的变换结果p+qi和s+ti分离出x[n]和y[n]的FFT结果: a=(p+s)/2 b=(q-t)/2 c=(q+t)/2 d=(-p+s)/2 下面是一个稍微正式点的推导: 取z[n]=x[n]+iy[ n ] 那么: x[n]=(z[n]+z

数字信号处理--FFT与蝶形算法

旧街凉风 提交于 2019-12-30 01:22:39
在数字信号处理中常常需要用到离散傅立叶变换(DFT),以获取信号的频域特征。尽管传统的DFT算法能够获取信号频域特征,但是算法计算量大,耗时长,不利于计算机实时对信号进行处理。因此至DFT被发现以来,在很长的一段时间内都不能被应用到实际的工程项目中,直到一种快速的离散傅立叶计算方法——FFT,被发现,离散傅立叶变换才在实际的工程中得到广泛应用。需要强调的是,FFT并不是一种新的频域特征获取方式,而是DFT的一种快速实现算法。本文就FFT的原理以及具体实现过程进行详尽讲解。 DFT计算公式 本文不加推导地直接给出DFT的计算公式: 其中x(n)表示输入的离散数字信号序列,WN为旋转因子,X(k)为输入序列x(n)对应的N个离散频率点的相对幅度。一般情况下,假设x(n)来自于低通采样,采样频率为fs,那么X(k)表示了从-fs/2率开始,频率间隔为fs/N,到fs/2-fs/N截至的N个频率点的相对幅度。因为DFT计算得到的一组离散频率幅度值实际上是在频率轴上从成周期变化的,即X(k+N)=X(k)。因此任意取连续的N个点均可以表示DFT的计算效果,负频率成分比较抽象,难于理解,根据X(k)的周期特性,于是我们又可以认为X(k)表示了从零频率开始,频率间隔为fs/N,到fs-fs/N截至的N个频率点的相对幅度。 N点DFT的计算量 根据(1)式给出的DFT计算公式

15 FFT及其框图实现

萝らか妹 提交于 2019-12-30 01:22:29
FFT及其框图实现 \(FFT\) 的全称为快速傅里叶变换,但是 \(FFT\) 并不是一种变换,而是实现 \(DFT\) 的一种快速算法。当 \(N\) 比较大时,使用 \(FFT\) 可大大减少进行 \(DFT\) 变换的计算量。 \(N\) 点的 \(DFT\) 所需的计算量为: \[ X[k]=\sum_{n=0}^{N-1}x[n]W_N^{kn} \] 乘法: \(N^2\) 次,加法: \(N(N-1)\) 次。每当 \(N\) 提高一倍,计算量增大四倍。 基 \(2\) 时域抽取 假设有一长度为 \(2N\) 的有限长序列 \(x[n]\) ,现对其进行 \(DFT\) 变换,现有一算法可以将 \(2N\) 点的 \(DFT\) 计算降为 \(N\) 的 \(DFT\) 计算,记 \(g[n]\) 为 \(x[n]\) 的下标为偶数时的序列,即 \(g[n]=x[2n],0\leq n \leq N-1\) ,记 \(v[n]\) 为 \(x[n]\) 的下标为奇数时的序列,即 \(v[n]=x[2n+1],0\leq n \leq N-1\) ,则 \[ \begin{aligned} X[k]&=\sum_{n=0}^{2N-1}x[n]W_{2N}^{kn}\\ &=\sum_{n=0}^{N-1}x[2n]W_{2N}^{k2n}+\sum_{n=0}^{N

数字信号处理---FFT

北战南征 提交于 2019-12-30 01:22:14
FFT---快速傅里叶变换 基于离散傅立叶变换(DFT),以获取信号的频域特征。传统的DFT算法能够获取信号频域特征,但是算法计算量大,耗时长,不利于计算机实时对信号进行处理,在工程中无法应用,作为DFT的一种快速实现算法,FFT很好的解决了这个问题。 DFT变换公式,由此公式,每计算一个频率点X(k)均需要进行N次复数乘法和N-1次复数加法,计算N各点的X(k)共需要N^2次复数乘法和N*(N-1)次复数加法。当x(n)为实数的情况下,计算N点的DFT需要2*N^2次实数乘法,2*N*(N-1)次实数加法。计算量很大 正所谓“有需求就会有市场”,前人伟大的智慧,给出了一下几种解决方法 1.基-2 FFT ---DFT点数为N = 2^M(M为整数)时的FFT,可以分为两类:按时间抽取法(DIT-FFT)和按频率抽取法FFT(DIF-FFT) DIT-FFT   把长为N = 2^M点的时域序列x(n)按序号的奇偶逐级分解,最终得到N/2个2点时域序列。通过迭代计算2点的DFT,使DFT计算量减少(假设采样序列点数为N=2^L,L为整数,如果不满足这个条件可以人为地添加若干个0以使采样序列点数满足这一要求) X'(k’)为偶数项分支的离散傅立叶变换,X''(k’’)为奇数项分支的离散傅立叶变换,对于N点的FFT计算需要总共的实数乘法数量为:2×N×log2(N);总的复数加法次数为

iPhone FFT with Accelerate framework vDSP

泪湿孤枕 提交于 2019-12-29 11:40:59
问题 I'm having difficulty implementing an FFT using vDSP. I understand the theory but am looking for a specific code example please. I have data from a wav file as below: Question 1. How do I put the audio data into the FFT? Question 2. How do I get the output data out of the FFT? Question 3. The ultimate goal is to check for low frequency sounds. How would I do this? -(OSStatus)open:(CFURLRef)inputURL{ OSStatus result = -1; result = AudioFileOpenURL (inputURL, kAudioFileReadPermission, 0,

Phase correlation

一曲冷凌霜 提交于 2019-12-29 06:29:35
问题 How can rotation angle be determined by phase correlation(using fft) of 2 images? The algorithm given in http://en.wikipedia.org/wiki/Phase_correlation returns linear shift, not angular. It also mentions images have to be converted to log-polar coordinates to compute rotation. How is this conversion achieved in python? And post conversion do the same steps of the algorithm hold? 回答1: Log polar transformation is actually rotation and scale invariant.. Rotation corresponds to shift in y axis

Is the storage of COMPLEX in fortran guaranteed to be two REALs?

随声附和 提交于 2019-12-29 01:44:13
问题 Many FFT algorithms take advantage of complex numbers stored with alternating real and imaginary part in the array. By creating a COMPLEX array and passing it to a FFT routine, is it guaranteed that it can be cast to a REAL array (of twice the size) with alternating real and imaginary components? subroutine fft (data, n, isign) dimension data(2*n) do 1 i=1,2*n,2 data(i) = .. data(i+1) = .. 1 continue return end ... complex s(n) call fft (s, n, 1) ... (and, btw, is dimension data(2*n) the same

Python: Designing a time-series filter after Fourier analysis

淺唱寂寞╮ 提交于 2019-12-29 01:39:09
问题 I have a time series of 3-hourly temperature data that I have analyzed and found the power spectrum for using Fourier analysis. data = np.genfromtxt('H:/RData/3hr_obs.txt', skip_header=3) step = data[:,0] t = data[:,1] y = data[:,2] freq = 0.125 yps = np.abs(np.fft.fft(y))**2 yfreqs = np.fft.fftfreq(y.size, freq) y_idx = np.argsort(yfreqs) fig = plt.figure(figsize=(14,10)) ax = fig.add_subplot(111) ax.semilogy(yfreqs[y_idx],yps[y_idx]) ax.set_ylim(1e-3,1e8) Original Data: Frequency Spectrum: