快速傅立叶变换程序与反变换程序

原创 2007年09月17日 18:26:00
///////////////快速傅立叶变换程序/////////////////////
#include "stdafx.h"
#include <math.h>
#define pi 3.14159265359
#define M  8
////////////////取反函数//////////////////////////
int rebit(int num,int p)
{
 int i,rb=0,rb1,k,num1=num;
 for(i=1;i<=p;i++)
 {
  k=num&1;
  num=num1>>1;
  num1=num;
  rb=rb+k;
  rb1=rb<<1;
  rb=rb1;
 }
 return rb>>1;
}
///////////////2的次方函数/////////////////////
inline int pow2(int n)
{
 return 1<<n;
}
///////////////快速傅立叶变换/////////////////////
/*
ir---输入实部指针
ii---输入虚部指针
or---输出实部指针
oi---输出虚部指针
l----数组长度=2的l次方
*/
void FFT(double *ir,double *ii,double or[],double oi[],int l)
{
 int i,j,r,s,N,s0,m;
    double *kr,*ki,u,v,cc,cs,t;
 N=pow2(l);
 kr=new double[N];
 ki=new double[N];
 for(i=0;i<N;i++)
 {
  kr[i]=ir[rebit(i,l)];
        ki[i]=ii[rebit(i,l)];
 }
 for(i=1;i<=l;i++)
 {
  m=pow2(i);
  for(j=0;j<pow2(l-i);j++)
  {
   for(r=0;r<pow2(i-1);r++)
   {
    s=j*pow2(i)+r;
    s0=s+pow2(i-1);
    t=2*pi*r/m;
    cc=cos(t);
    cs=sin(t);
                u=kr[s0]*cc+ki[s0]*cs;
    v=ki[s0]*cc-kr[s0]*cs;
                kr[s0]=kr[s]-u;
    ki[s0]=ki[s]-v;
                kr[s]=kr[s]+u;
    ki[s]=ki[s]+v;
   }
  }
 }
    for(i=0;i<N;i++)
 {
  or[i]=kr[i];
        oi[i]=ki[i];
 }
 delete []kr;
    delete []ki;
}

///////////////快速傅立叶反变换程序/////////////////////
#include "stdafx.h"
#include <math.h>
#define pi 3.14159265359
#define M  8
////////////////取反函数//////////////////////////
int rebit(int num,int p)
{
 int i,rb=0,rb1,k,num1=num;
 for(i=1;i<=p;i++)
 {
  k=num&1;
  num=num1>>1;
  num1=num;
  rb=rb+k;
  rb1=rb<<1;
  rb=rb1;
 }
 return rb>>1;
}
///////////////2的次方函数/////////////////////
inline int pow2(int n)
{
 return 1<<n;
}
 
///////////////快速傅立叶反变换/////////////////////
/*
ir---输入实部指针
ii---输入虚部指针
or---输出实部指针
oi---输出虚部指针
l----数组长度=2的l次方
*/
void RFFT(double *ir,double *ii,double or[],double oi[],int l)
{
 int i,j,r,s,N,s0,m;
    double *kr,*ki,u,v,cc,cs,t;
 N=pow2(l);
 kr=new double[N];
 ki=new double[N];
 for(i=0;i<N;i++)
 {
  kr[i]=ir[rebit(i,l)];
        ki[i]=ii[rebit(i,l)];
 }
 for(i=1;i<=l;i++)
 {
  m=pow2(i);
  for(j=0;j<pow2(l-i);j++)
  {
   for(r=0;r<pow2(i-1);r++)
   {
    s=j*pow2(i)+r;
    s0=s+pow2(i-1);
    t=2*pi*r/m;
    cc=cos(-t);
    cs=sin(-t);
                u=kr[s0]*cc+ki[s0]*cs;
    v=ki[s0]*cc-kr[s0]*cs;
                kr[s0]=kr[s]-u;
    ki[s0]=ki[s]-v;
                kr[s]=kr[s]+u;
    ki[s]=ki[s]+v;
   }
  }
 }
    for(i=0;i<N;i++)
 {
  or[i]=kr[i]/N;
        oi[i]=ki[i]/N;
 }
 delete []kr;
    delete []ki;
}
/////////////////////////////////////////
int main(int argc, char* argv[])
{
 double f1[M],f2[M],g1[M],g2[M];
 int i;
 for(i=0;i<M;i++)
 {
        f1[i]=i;
       f2[i]=0;
 }
  RFFT(f1,f2,g1,g2,3);
 for(i=0;i<M;i++)
 {
        printf("%f+(%f)i/n",g1[i],g2[i]);
 }
 return 0;
}
 

opencv 傅立叶变换及其逆变换实例及其理解

傅立叶变换是把图像从空间域转化到频率域的变换。 空间域 一般的情况下,空间域的图像是f(x,y)=灰度级(0-255),形象一点就是一个二维矩阵,每个坐标对应一个颜色值。 频率域 先介绍几个概念 频率...
  • Dang_boy
  • Dang_boy
  • 2017年07月26日 15:50
  • 829

C#|图像快速傅立叶变换与反变换

C#实现图像快速傅立叶变换与反变换的原理与程序
  • zpfvs1
  • zpfvs1
  • 2016年11月01日 22:55
  • 1686

快速离散傅里叶变换(FFT)C++实现

文章正在施工复数类#ifndef _BA_COMPLEX_H_ #define _BA_COMPLEX_H_#include class Complex {private: // 实部和虚部 ...
  • mikukonai
  • mikukonai
  • 2016年06月03日 11:14
  • 1288

第一次邂逅快速傅立叶变换(FFT)

 为了毕业设计,我要学习JPEG,还有视频压缩技术,在JPEG的时候,我就被前面的DCT给挡住了,现如今我终于写了一个FFT程序,发了我好长的时间。如果说是因为我的无知,还是什么,我对学习这类有关数学...
  • yin138
  • yin138
  • 2007年04月19日 22:33
  • 20603

[FFT]快速傅里叶变换

快速傅里叶变换
  • hbhcy98
  • hbhcy98
  • 2016年04月06日 16:45
  • 571

准零基础搞懂FFT快速傅里叶变换及其实现程序(一)

//---------------------前言唠叨废话------------------------------------------- 本文的目标:让不是很了解DSP的小伙伴会用FFT...
  • birthmarkqiqi
  • birthmarkqiqi
  • 2015年07月27日 21:43
  • 5457

快速傅里叶反变换(一维)

原理自己查书,代码如下: /**************************************************************** 功能: 一维快速傅里叶反变换 ...
  • s12244315
  • s12244315
  • 2015年10月28日 17:45
  • 1036

傅立叶变换与傅立叶反变换的C语言实现

 #include #include #define pi (double) 3.14159265359 /*复数的定义*/ typedef struct { double re; ...
  • jackhenry
  • jackhenry
  • 2011年01月03日 16:22
  • 7003

傅里叶变换和逆变换公式的我理解意义

f(t)的傅里叶变换F(w)=∫  f(t) *e(-iwt)dt ,由于(1,sinwx,coswx,sin2wx,cos2wx,... sinnwx,cosnwx,....)是一组正交函数,傅里叶...
  • LULIDAN
  • LULIDAN
  • 2016年07月03日 15:35
  • 8983

MATLAB快速傅里叶变换(fft)函数详解

原文 定义: MATLAB帮助文件原文  The 'i' in the 'Nth root of unity' 是虚数单位 ​调用: ​​1.  Y = f...
  • me4weizhen
  • me4weizhen
  • 2016年12月16日 09:35
  • 15396
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:快速傅立叶变换程序与反变换程序
举报原因:
原因补充:

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