c语言傅里叶函数的运用 傅里叶变换编程实现

傅里叶变换用C语言程序怎么实现?#include math.h
#include stdio.h
#define N 8
void kkfft(double pr[], double pi[], int n, int k, double fr[], double fi[], int l, int il);
void main()
{
double xr[N],xi[N],Yr[N],Yi[N],l=0,il=0;
int i,j,n=N,k=3;
for(i=0;iN;i++)
{
xr[i]=i;
xi[i]=0;
}
printf("------FFT------\n");
l=0;
kkfft(xr,xi,n,k,Yr,Yi,l,il);
for(i=0;iN;i++)
{
printf("%-11lf + j* %-11lf\n",Yr[i],Yi[i]);
}
printf("-----DFFT-------\n");
l=1;
kkfft(Yr,Yi,n,k,xr,xi,l,il);
for(i=0;iN;i++)
{
printf("%-11lf + j* %-11lf\n",xr[i],xi[i]);
}
getch();
}
void kkfft(double pr[], double pi[], int n, int k, double fr[], double fi[], int l, int il)
{
int it,m,is,i,j,nv,l0;
double p,q,s,vr,vi,poddr,poddi;
for (it=0; it=n-1; it++)
{
m = it;
is = 0;
for(i=0; i=k-1; i++)
{
j = m/2;
is = 2*is+(m-2*j);
m = j;
}
fr[it] = pr[is];
fi[it] = pi[is];
}
pr[0] = 1.0;
pi[0] = 0.0;
p = 6.283185306/(1.0*n);
pr[1] = cos(p);
pi[1] = -sin(p);
if (l!=0)
pi[1]=-pi[1];
for (i=2; i=n-1; i++)
{
p = pr[i-1]*pr[1];
q = pi[i-1]*pi[1];
s = (pr[i-1]+pi[i-1])*(pr[1]+pi[1]);
pr[i] = p-q;
pi[i] = s-p-q;
}
for (it=0; it=n-2; it=it+2)
{
vr = fr[it];
vi = fi[it];
fr[it] = vr+fr[it+1];
fi[it] = vi+fi[it+1];
fr[it+1] = vr-fr[it+1];
fi[it+1] = vi-fi[it+1];
}
m = n/2;
nv = 2;
for (l0=k-2; l0=0; l0--)
{
m = m/2;
nv = 2*nv;
for(it=0; it=(m-1)*nv; it=it+nv)
for (j=0; j=(nv/2)-1; j++)
{
p = pr[m*j]*fr[it+j+nv/2];
q = pi[m*j]*fi[it+j+nv/2];
s = pr[m*j]+pi[m*j];
s = s*(fr[it+j+nv/2]+fi[it+j+nv/2]);
poddr = p-q;
poddi = s-p-q;
fr[it+j+nv/2] = fr[it+j]-poddr;
fi[it+j+nv/2] = fi[it+j]-poddi;
fr[it+j] = fr[it+j]+poddr;
fi[it+j] = fi[it+j]+poddi;
}
}
/*逆傅立叶变换*/
if(l!=0)
{
for(i=0; i=n-1; i++)
{
fr[i] = fr[i]/(1.0*n);
fi[i] = fi[i]/(1.0*n);
}
}
/*是否计算模和相角*/
if(il!=0)
{
for(i=0; i=n-1; i++)
{
pr[i] = sqrt(fr[i]*fr[i]+fi[i]*fi[i]);
if(fabs(fr[i])0.000001*fabs(fi[i]))
{
if ((fi[i]*fr[i])0)
pi[i] = 90.0;
else
pi[i] = -90.0;
}
else
pi[i] = atan(fi[i]/fr[i])*360.0/6.283185306;
}
}
return;
}
傅里叶变换有哪些具体的应用傅里叶变换具体的应用如下:
1、图像压缩,可以直接通过傅里叶系数来压缩数据 , 常用的离散余弦变换是傅立叶变换的实变换 , 傅里叶变换是将时域信号分解为不同频率的正弦信号或余弦函数叠加之和 , 连续情况下要求原始信号在一个周期内满足绝对可积条件;
2、图像增强与图像去噪,绝大部分噪音都是图像的高频分量,通过低通滤波器来滤除高频噪声,边缘也是图像的高频分量,通过添加高频分量来增强原始图像的边缘,图像分割之边缘检测,提取图像高频分量;
3、线性的积分变换,将信号在时域或空域和频域之间变换时使用 , 在物理学和工程学中有许多应用,在不同的研究领域 , 傅立叶变换具有多种不同的变体形式,如连续傅立叶变换和离散傅立叶变换 。
傅里叶解析傅立叶变换
定义
f(t)满足傅立叶积分定理条件时,下图①式的积分运算称为f(t)的傅立叶变换,②式的积分运算叫做F(ω)的傅立叶逆变换 。F(ω)叫做f(t)的象函数,f(t)叫做F(ω)的象原函数 。应用

推荐阅读