想做一个简单的傅里叶变换,只能显示32个给的原始数据,但是无法显示处理后的数据,不知道程序上哪里出错了,请大神看看,怀疑是子程序调用上有问题,请明示~~~坐等~~~
#include "stdio.h"#include "math.h"
void dft(x,y,a,b,n,sign);
void main()
{
int i,j,n;
double a1,a2,c,c1,c2,d1,d2,q1,q2,w,w1,w2;
double x[32],y[32],a[32],b[32];
n=32;
a1=0.9;
a2=0.3;
x[0]=1.0;
y[0]=0.0;
for(i=1;i<n;i++)
{
x
=a1*x[i-1]-a2*y[i-1];
y=a2*x[i-1]+a1*y[i-1];
}
printf("
原始数据
");
for(i=0;i<n/2;i++)
{
for(j=0;j<2;j++)
printf(" %10.7f +J %10.7f",x[2*i+j],y[2*i+j]);
printf("
");
}
q1=x[n-1];
q2=y[n-1];
printf("
傅里叶变换后数据
");
dft(x,y,a,b,n,1);
for(i=0;i<2/n;i++)
{
for(j=0;j<2;j++)
printf(" %10.7f +J %10.7f",a[2*i+j],b[2*i+j]);
printf("
");
}
system("pause");
}
/*傅里叶函数*/
void dft(x,y,a,b,n,sign)
int n,sign;
double x[],y[],a[],b[];
{int i,k;
double c,d,q,w,s;
q=6.28318530718/n;
for(k=0;k<n;k++)
{w=k*q;
a[k]=b[k]=0.0;
for(i=0;i<n;i++)
{d=i*w;
c=cos(d);
s=sin(d)*sign;
a[k]+=c*x+s*y;
b[k]+=c*y-s*x;
}
}
if(sign==-1)
{
c=1.0/n;
for(k=0;k<n;k++)
{a[k]=c*a[k];
b[k]=c*b[k];
}
}
}
用处挺多,我是信号处理,把信号从时域变到频域,便于分析它的频域特性
一周热门 更多>