精华内容
下载资源
问答
  • 一维FFT

    千次阅读 2011-03-01 22:26:00
    bool FFT(complex<double> * TD, complex<double> * FD, int r) {  //一维快速Fourier变换。  //complex<double> * TD ——指向时域数组的指针;  // complex<double> * FD ——指向...

    bool FFT(complex<double> * TD, complex<double> * FD, int r)   
    {  
     //一维快速Fourier变换。  
     //complex<double> * TD ——指向时域数组的指针;
     // complex<double> * FD ——指向频域数组的指针;
     //r ——2的幂数,即迭代次数   LONG count;
     // Fourier变换点数  

       int i,j,k; // 循环变量   
      int bfsize,p; // 中间变量   
      double angle; // 角度  
       complex<double> *W,*X1,*X2,*X;   
       count = 1 << r; // 计算Fourier变换点数为r左移一位  
        W = new complex<double>[count / 2];   
        X1 = new complex<double>[count];  
         X2 = new complex<double>[count]; // 分配运算所需存储器  
       // 计算加权系数(旋转因子w的i次幂表)   
      for(i = 0; i < count / 2; i++)   
      {   angle = -i * PI * 2 / count;   
      W[ i ] = complex<double> (cos(angle), sin(angle));  
       }   // 将时域点写入X1  
       memcpy(X1, TD, sizeof(complex<double>) * count);  
        // 采用蝶形算法进行快速Fourier变换  
        for(k = 0; k < r; k++)  
         {  
           for(j = 0; j < 1 << k; j++)   
        {   

         bfsize = 1 << (r-k);   
         for(i = 0; i < bfsize / 2; i++)  
          {   
           p = j * bfsize;
             X2[i + p] = X1[i + p] + X1[i + p + bfsize / 2] * W[i * (1<<k)];  
              X2[i + p + bfsize / 2] = X1[i + p] - X1[i + p + bfsize / 2] * W[i * (1<<k)];  
          }   
        }  
         X = X1;
           X1 = X2;   
           X2 = X;  
         }  
         // 重新排序   
        for(j = 0; j < count; j++)  
         {  
           p = 0;  
         for(i = 0; i < r; i++)  
          {   
           if (j&(1<<i))  
            {   
             p+=1<<(r-i-1);  
            }  
          }  
          FD[j]=X1[p];  
         }   
        // 释放内存   
        delete W;  
         delete X1;  
          delete X2;   
       return true;   
    }

    展开全文
  • 多核矢量加速器上的高效大规模一维FFT矢量化
  • 1.验证了一维FFT转置和二维FFT结果的正确性。但问题在于不能在同一帧中同时抓取二者的数据。 2.转置结果验证步骤:先触发ILA的trigger使其进入等待waiting状态,再运行到断点,然后ILA抓到数据,并将其导出(fpga_...

    1.验证了一维FFT转置和二维FFT结果的正确性。但问题在于不能在同一帧中同时抓取二者的数据。

    2.转置结果验证步骤:先触发ILA的trigger使其进入等待waiting状态,再运行到断点,然后ILA抓到数据,并将其导出(fpga_1d_conv_test.csv)。同时导出ARM中对应地址的数据(arm_1d_conv_test.bin)。在MATLAB中分别读取二者数据,进行仿真,发现二者结果相同。说明转置结果从ARM搬运到FPGA端没有问题。(左ARM,右FPGA),4个通道颠倒是因为我把FFT_Input[127:0]的低16位当成通道1了。所以整个4个通道就都反了。(这一维转置的结果看起来像正确的,断点设置在中断2的aa=0)。

     下面看不加断点的结果:(左ARM,右FPGA)

    3.二维结果:步骤同上,文件分别命名为fpga_2d_test.csv和arm_2d_test.bin。发现FPGA结果相对正确,ARM结果并不正确,只有13列或14列是正确的。因此将转置后的数据在MATLAB中做二维FFT,发现结果与FPGA导出的二维结果相同,因此判断FPGA端二维结果正确。(左ARM,右FPGA)

     下面看不加断点的结果:(左ARM,右FPGA)

     

    4.待解决问题:(1)为什么不能在同一帧中先验证转置再验证二维。

                               (2)一维的结果到底对不对。原始数据怎么获得?

    展开全文
  • 这是某所学校数字信号处理的大作业,主要是要求自编FFTmatlab程序去实现二FFT,亲测可用
  • 一维FFT代码

    2012-10-06 08:58:43
    此乃一维数组的FFT的C++工程(Vs2010)。其中底层为WFTA实现,即无需对非2的n次幂长度数组进行扩边。
  • 详细说明:一维FFT傅立叶变换代码,訊號利用FF轉換方程式,僅供參考!若需轉載請著名出處!!
  • 利用一维FFT查看正弦波频谱信息

    千次阅读 2015-07-19 22:24:19
    利用一维FFT查看正弦波频谱信息,所需的SIMULINK模型如下图1所示。Zero-Order Hold用于采样正弦波,设置方式如图2所示。BUffer用于缓存采样数据,深度可以设置,深度等于FFT的长度,设置方式如图3所示。FFT的点数跟...

    利用一维FFT查看正弦波频谱信息,所需的SIMULINK模型如下图1所示。Zero-Order Hold用于采样正弦波,设置方式如图2所示。BUffer用于缓存采样数据,深度可以设置,深度等于FFT的长度,设置方式如图3所示。FFT的点数跟BUFFER的深度相同,比如,buffer深度为1024,那么此处的FFT就采用1024点的FFT。最后FFT的计算结果可以通过Vector Scope来查看,设置方式如图4和5所示。


    图1,SIMULINK模型

    wKiom1VkOv3Q7bTxAADYmDhmDTw571.jpg


    图2,ZERO-ORDER HOLD设置

    wKioL1VkPI2DSz04AADyhAfAndw580.jpg


    图3,BUFFER设置

    wKiom1VkOv6CzINrAAIl3JHnHU8440.jpg


    图4,VECTOR SCOPE设置1

    wKioL1VkPI2iBlFTAAJGkL9wUGY408.jpg


    图5, 图4,VECTOR SCOPE设置2

    wKioL1VkPI7BbPktAAMLrBXmnlk330.jpg


    图6,输出结果

    wKiom1VkO3vSQIQVAAF_kHZa8X8369.jpg


    展开全文
  • 本文的参数变量 ...abs(fft(S)) 也就是 转频率后的 根号下(实数的平方+ 虚数的平方)的绝对值。 频率的幅值: A= abs(fft(S))/(N/2) n点频率= (n-1)*Fsample/2 执行功能: 信号显示:...

    本文的参数变量

    信号频率:

    本文后续采用Fsign 来表示。

    采样频率:

    本文后续采用Fsample来表示 必须是Fsign的两倍以上

    频率的模:

    abs(fft(S))  也就是 转频率后的 根号下(实数的平方+ 虚数的平方)的绝对值。
     
    频率的幅值:
    A= abs(fft(S))/(N/2)
     
    n点频率= (n-1)*Fsample/2

    执行功能:

    信号显示:

    %step1 clean all window info
    clc
    clear
    close all;
    %step2 gener 
    Fsample =500;
    Fsign   = 50;%信号1
    Tsample  =1/Fsample;
    L        = 42;
    t = (0:L-1)*Tsample;
    %t2 = (0:Tsample:L-1);
    S = sin(pi*Fsign*t);
    
    figure(1)
    plot(t,S);
    grid on
    title('Signal AMP')
    xlabel('time (sec)')
    
    figure(2)
    plot((0:L-1),S);
    grid on
    title('Signal AMP')
    xlabel('sample')
    
    

     

    信号转为频率fft:

    %step1 clean all window info
    clc
    clear
    close all;
    %step2 gener 
    Fsample =500;
    Fsign   = 10;%信号1
    Tsample  =1/Fsample;
    L        = 256;
    t = (0:L-1)*Tsample;
    %t2 = (0:Tsample:L-1);
    S = sin(pi*Fsign*t);
    
    figure(1)
    plot((0:L-1),S);
    grid on
    title('Signal AMP')
    xlabel('sample')
    
    %step2 fft
    NFFT = 2^nextpow2(L); %  1020 =》1024 120=》128
    Y = fft(S,FFTN);      
    f = Fsample/2*linspace(0,1,FFTN/2+1);
    A=2*abs(Y(1:FFTN/2+1))/L; 
    figure(2)
    plot(f,A)
    grid on
    title('Single-Sided Amplitude Spectrum of y(t)')
    xlabel('Frequency (Hz)')
    ylabel('Amplitude')        

     

    时域转换为频率表示幅值。

     

    展开全文
  • 使用java实现一维FFT

    2020-04-24 00:05:44
    FFT是快速傅里叶变换,它是DFT的快速算法,但是计算结果与DFT等价。首先回顾一下傅里叶变换的计算公式: 首先,非周期性连续时间信号x(t)的傅里叶变换可以表示为:(公式1) 在离散的情况下,傅里叶变换的公式为:...
  • 一维FFT变换

    2009-11-01 18:12:00
    CImgDisplay fft_disp( fft_visu, "FFT: Magitude" ); CImg<float> phase(1, 1024, 1, 1, 0.0f); cimg_forXY( phase, x, y ) { phase(x, y) = atan(abs((fft(0))(x, y) / (fft(1))(x, y))); } CImg<unsigned char> ...
  • 本代码是完整的工程 是基于CORDIC算法实现的FFT 语言为Verilog
  • 有些位置是“o”,表示这格目前有艘舰,且舰离开这格之后,这格将变为“.”。这些“o” 表示Byteasar 的舰队,他们每天可以往上下左右中的个方向移动格,但不能有任何艘舰驶出地图。特...
  • 基于FPGA的二维FFT实现

    2014-01-12 16:02:24
    在Xilinx一维FFT变换IP核基础上,搭建二维FFT变换的实现架构,利用该模块可得到二维数据的频谱值。二维FFT可以分解为先对各行变换,再对行变换得到的矩阵进行列变换完成。根据进行行变换和列变换中对各行列计算的相对...
  • 图像二维FFT

    2018-05-09 17:15:58
    本模块利用Verilog实现二维FFT,可对图像做FFT处理,本人用ise13.2实现,实测可用,与MATLAB结果相比误差很小 更改参数FFT_N可实现不同点的FFT,默认为32x32 FFT ip核设为stream模式 ram根据图像大小设置 fft_start...
  • 一维FFT和IFFT代码

    2017-01-13 22:40:58
    一维FFT及IFFT计算代码。需要配合有蝶形算法的书看懂代码。C++/C
  • DSP TMS320C6678图像处理二维FFT代码,输入一维数据,对其进行二维FFT变换,基于DSP TMS320C6678。
  • 利用实信号傅里叶变换的周期对称性和频域数据的共轭对称性,提出了一种高效且易于硬件实现的二维FFT正/反变换的实时处理方法,将实值图像二维FFT中的一维FFT计算和存储需求缩减了近一半。在以4片TS201为计算核心的DSP...
  • 上篇讲述了一维FFT的GPU实现(FFT算法实现——基于GPU的基2快速傅里叶变换),后来我又由于需要做了一下二维FFT,大概思路如下。 首先看的肯定是公式: 如上面公式所描述的,2维FFT只需要拆分成行FFT,和列FFT就...
  • 离散FFT和图像二维FFT变换的java实现

    千次阅读 2016-05-20 17:19:24
    细节,值得注意的是:二维FFT可以对图像进行变换,先对每行进行FFT变换,再对变换后的每列进行FFT变换, 二维FFT变换的公式如下: 2.复数工具类  FFT和二维FFT都需要复数的加减乘除,在这里给
  • FFT与二维FFT的C#实现

    2019-09-21 02:52:24
     本文介绍FFT和2维FFT的C#实现方法。 1. FFT编程依据  FFT是按照如图结构(也称蝶形结构)进行运算(图片来源于网络)。  图中,箭头代表数据流向,箭头与箭头的合并点代表相加,箭头下面的常数代表相乘,WN...
  • 一维快速傅里叶变换FFT的C++实现,里面是FFT1.cpp函数,用于进行一维数组的FFT。有详细的注释和说明。
  • 采用频域分解法的快速傅里叶变化(FFT)进行了C语言的实现,可用于频域分析(如电力中的电压电流谐波分析)。
  • 维fft及转置

    2019-04-12 11:44:25
    //被执行2DFFT的是个N*N的矩阵,在source_2d中按行顺序储存 //水平方向FFT for (int i=0;i<N;i++) { fft1(&source_2d[i*N],&source_2d_1[i*N],N); } //转置列成行 for (int i=0;i<N*N;i++) { int ...
  • 维FFT,求助各位大佬

    千次阅读 2018-05-17 08:57:00
    最近在做二维FFT,但是遇到以下问题:1&gt;------ 已启动生成: 项目: CPU_FFT2d_2, 配置: Debug x64 ------1&gt; main.cpp1&gt;c:\users\laizhaojia\documents\visual studio 2015\projects\cpu_fft2d_...
  • 信号处理-距离维FFT

    千次阅读 2020-12-25 11:31:45
    针对个chirp的数据在MATLAB中进行处理,得到对应的距离信息。在真实的处理中,肯定不是通过这种简单的方式就得到距离,这里仅仅是通过这个例子认识到“连续波雷达中,距离和频率之间的对应关系”以及“加窗对于FFT...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,165
精华内容 3,666
关键字:

一维fft