微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > DSP学习交流 > 关于傅里叶变换的简单C语言程序

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

时间:10-02 整理:3721RD 点击:
想做一个简单的傅里叶变换,只能显示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("\n原始数据\n");
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("\n");
}
q1=x[n-1];
q2=y[n-1];
printf("\n傅里叶变换后数据\n");
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("\n");
}
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];
        }
        }
}

你把n附一个初值看看,,,要不然没办法知道你n的值

我想问一下 当初在学校学过这个傅里叶基数  但是就是不知道这个到底有什么用呀

用处挺多,我是信号处理,把信号从时域变到频域,便于分析它的频域特性

了解了  哎可惜没有学会

加油!

加油。

加油

顶一个                     

c++写的控制台啊

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top