C语言 1024点快速傅里叶变换(FFT)程序,最好经过优化,执行速度快

C语言 1024点快速傅里叶变换(FFT)程序,最好经过优化,执行速度快,第1张

void fft()

{

int nn,n1,n2,i,j,k,l,m,s,l1;

float ar[1024],ai[1024]; // 实部 虚部

float a[2050];

float t1,t2,x,y;

float w1,w2,u1,u2,z;

float fsin[10]={0000000,1000000,0707107,03826834,01950903,009801713,004906767,002454123,001227154,000613588,};// 优化

float fcos[10]={-1000000,0000000,07071068,09238796,09807853,099518472,099879545,09996988,09999247,09999812,};

nn=1024;

s=10;

n1=nn/2; n2=nn-1;

j=1;

for(i=1;i<=nn;i++)

{

a[2i]=ar[i-1];

a[2i+1]=ai[i-1];

}

for(l=1;l<n2;l++)

{

if(l<j)

{

t1=a[2j];

t2=a[2j+1];

a[2j]=a[2l];

a[2j+1]=a[2l+1];

a[2l]=t1;

a[2l+1]=t2;

}

k=n1;

while (k<j)

{

j=j-k;

k=k/2;

}

j=j+k;

}

for(i=1;i<=s;i++)

{

u1=1;

u2=0;

m=(1<<i);

k=m>>1;

w1=fcos[i-1];

w2=-fsin[i-1];

for(j=1;j<=k;j++)

{

for(l=j;l<nn;l=l+m)

{

l1=l+k;

t1=a[2l1]u1-a[2l1+1]u2;

t2=a[2l1]u2+a[2l1+1]u1;

a[2l1]=a[2l]-t1;

a[2l1+1]=a[2l+1]-t2;

a[2l]=a[2l]+t1;

a[2l+1]=a[2l+1]+t2;

}

z=u1w1-u2w2;

u2=u1w2+u2w1;

u1=z;

}

}

for(i=1;i<=nn/2;i++)

{

ar[i]=a[2i+2]/nn;

ai[i]=-a[2i+3]/nn;

a[i]=4sqrt(ar[i]ar[i]+ai[i]ai[i]); // 幅值

}

}

I0=zeros(256,256);

I0(120:130,100:156)=1;

subplot(2,3,1),imshow(I0),title('原始图像')

subplot(2,2,2),imshow(log(1+abs(fft2(I0)))),title('直接进行fft2')

I1=I0;

F1=fft(I1,[],1);%按列进行傅里叶变换

subplot(2,2,3),imshow(log(1+abs(F1))),title('先按列进行')

F2=fft(F1,[],2);%按行进行傅里叶变换

subplot(2,2,4),imshow(log(1+abs(F2))),title('后按行进行')

以上就是关于C语言 1024点快速傅里叶变换(FFT)程序,最好经过优化,执行速度快全部的内容,包括:C语言 1024点快速傅里叶变换(FFT)程序,最好经过优化,执行速度快、matlab对图像分别进行一维傅里叶变换(先进行行变换,再进行列变换),请问程序如何编写、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9968555.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-03
下一篇2023-05-03

发表评论

登录后才能评论

评论列表(0条)

    保存