关于傅里叶变换的简单C语言程序

2019-07-15 18:29发布

想做一个简单的傅里叶变换,只能显示32个给的原始数据,但是无法显示处理后的数据,不知道程序上哪里出错了,请大神看看,怀疑是子程序调用上有问题,请明示~~~坐等~~~
QQ截图20161108111543.png
#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];
        }
        }

}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
哭泣的眼泪
1楼-- · 2019-07-15 20:05
你把n附一个初值看看,,,要不然没办法知道你n的值
李春明
2楼-- · 2019-07-16 00:20
我想问一下 当初在学校学过这个傅里叶基数  但是就是不知道这个到底有什么用呀
dantehan
3楼-- · 2019-07-16 02:10
王栋春 发表于 2016-11-8 20:40
我想问一下 当初在学校学过这个傅里叶基数  但是就是不知道这个到底有什么用呀

用处挺多,我是信号处理,把信号从时域变到频域,便于分析它的频域特性
李春明
4楼-- · 2019-07-16 02:45
 精彩回答 2  元偷偷看……
Topclc
5楼-- · 2019-07-16 08:30
加油!!!!!!!!!!!!!!!
张宇1994
6楼-- · 2019-07-16 13:02
加油。

一周热门 更多>