FFT

原创 2016年06月01日 08:36:09

FFT新手请参考下面链接

http://www.gatevin.moe/acm/fft算法学习笔记/

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn=220005;
const double eps(1e-8);
typedef long long LL;
const double PI = acos(-1.0);

struct Complex
{
    double real, image;
    Complex(double _real, double _image)
    {
        real = _real;
        image = _image;
    }
    Complex(){}
};

Complex operator + (const Complex &c1, const Complex &c2)
{
    return Complex(c1.real + c2.real, c1.image + c2.image);
}

Complex operator - (const Complex &c1, const Complex &c2)
{
    return Complex(c1.real - c2.real, c1.image - c2.image);
}

Complex operator * (const Complex &c1, const Complex &c2)
{
    return Complex(c1.real*c2.real - c1.image*c2.image, c1.real*c2.image + c1.image*c2.real);
}

int rev(int id, int len)
{
    int ret = 0;
    for(int i = 0; (1 << i) < len; i++)
    {
        ret <<= 1;
        if(id & (1 << i)) ret |= 1;
    }
    return ret;
}

Complex A[maxn<<1];
void FFT(Complex* a, int len, int DFT)//对a进行DFT或者逆DFT, 结果存在a当中,len必须是2的幂而且len大于多项式最高次数
{
    for(int i = 0; i < len; i++)
        A[rev(i, len)] = a[i];
    for(int s = 1; (1 << s) <= len; s++)
    {
        int m = (1 << s);
        Complex wm = Complex(cos(DFT*2*PI/m), sin(DFT*2*PI/m));
        for(int k = 0; k < len; k += m)
        {
            Complex w = Complex(1, 0);
            for(int j = 0; j < (m >> 1); j++)
            {
                Complex t = w*A[k + j + (m >> 1)];
                Complex u = A[k + j];
                A[k + j] = u + t;
                A[k + j + (m >> 1)] = u - t;
                w = w*wm;
            }
        }
    }
    if(DFT == -1) for(int i = 0; i < len; i++) A[i].real /= len, A[i].image /= len;
    for(int i = 0; i < len; i++) a[i] = A[i];
    return;
}
Complex a[maxn<<1];
int san[maxn];
int num[maxn<<1];
LL xishu[maxn<<1];
int main()
{
    int t,n;
    cin>>t;
    while(t--){
        scanf("%d",&n);
        int len=1;
        int s=0;
        for(int i=1;i<=n;i++){
            scanf("%d",&san[i]);
            s=max(s,san[i]);
        }
        while(len<=s){
            len<<=1;
        }
        len<<=1;
        sort(san+1,san+1+n);
        for(int i=0;i<len;i++){
            a[i]=Complex(0,0);
            num[i]=0;
        }
        for(int i=1;i<=n;i++){
            a[san[i]].real+=1;
            num[san[i]]++;
        }
        FFT(a,len,1);
        for(int i=0;i<len;i++){
            a[i]=a[i]*a[i];
        }
        FFT(a,len,-1);
    }
}


深入浅出解释FFT(一)——用fft求频谱

FFT的详细解释,相信你看了就明白了。。。 http://www.ilovematlab.cn/thread-119939-1-1.html (出处: MATLAB中文论坛) 看到的跟大家分享一下。...
  • wordwarwordwar
  • wordwarwordwar
  • 2017年04月02日 11:41
  • 3367

FFT在图像处理中的简单应用

**傅里叶变换: X(f)=∫∞−∞x(t)e−i2πftdtX(f)=\int_{-\infty}^{\infty}x(t)e^{-i2\pi ft} dt 傅里叶逆变换: x(t)=∫∞−∞...
  • theArcticOcean
  • theArcticOcean
  • 2016年04月20日 19:57
  • 4358

Matlab实现FFT变换

原文地址:http://blog.sina.com.cn/s/blog_64b236da0100vdqt.html FFT信号流图:   程序实现是这样:   ...
  • rodgerjie1993
  • rodgerjie1993
  • 2016年11月21日 20:17
  • 2674

FFT详解&大数乘法

引入传统的乘法的方法类似于利用列竖式的方法,时间复杂度为O(N2)O(N^{2})。但是利用FFT的方法,我们可以把时间复杂度降到O(NlogN)O(NlogN)。系数表示法设A和B是两个很大的数,C...
  • Ripped
  • Ripped
  • 2017年04月19日 15:52
  • 1796

FFT:快速傅里叶变换与高精度乘法

最后修改:2016.09.15
  • ljhandlwt
  • ljhandlwt
  • 2016年07月24日 09:31
  • 4252

注意fft画图横坐标的设置

clear clc; t=0:0.001:5; n=5001; Fs=1000; Fc=200; x=cos(2*pi*Fc*t); y1=fft(x); y2=fftshift(y1); f=(0:...
  • gtkknd
  • gtkknd
  • 2016年08月03日 14:29
  • 1650

FFT快速傅里叶变换-递归版-带注释模板

FFT 真·存模板系列
  • u010336344
  • u010336344
  • 2017年03月05日 15:21
  • 1556

FFT 窗口T 和采样率,混叠?

连续函数的傅里叶变换中,如果窗口宽度为T,采样点数=N,采样频率fs=N/T.在点数不变的情况下,那么感觉T越小,采样率就越高。可是书上说T 变小,容易产生混叠??这个对吗?如何理解...
  • gtkknd
  • gtkknd
  • 2014年07月08日 14:52
  • 1195

FFT介绍

写在前面详细内容请参见《算法导论》3rd edition,或者参见博客 FFT算法学习笔记 这里只展示它的迭代形式的代码IterativeFFT#include #include #includ...
  • Dylan_Frank
  • Dylan_Frank
  • 2016年10月30日 23:01
  • 385

VC++ 下FFT试验

#include using namespace std; #define MAX 2048 #define FFT_1024  #define FFTNUM 1024 #...
  • zh9454
  • zh9454
  • 2015年09月26日 11:14
  • 660
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:FFT
举报原因:
原因补充:

(最多只允许输入30个字)