作业帮 > 综合 > 作业

求用C语言实现FFT变换的程序(见下面)

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/29 03:15:07
求用C语言实现FFT变换的程序(见下面)
2.用FFT程序分析正 玄信号,分别在以下情况进行分析,并讨论所得的结果
a 信号频率F=50Hz,采样长N=32,采样时间T=0.000625s
b 信号频率F=50Hz,采样长N=32,采样时间T=0.005s
c 信号频率F=50Hz,采样长N=32,采样时间T=0.0046875s
d 信号频率F=50Hz,采样长N=32,采样时间T=0.004s
e 信号频率F=50Hz,采样长N=64,采样时间T=0.000625s
f 信号频率F=250Hz,采样长N=32,采样时间T=0.005s
g 将C信号后补32个0,做64点FFT
三 实验报告
1.记录下实验内容中各种情况下的X(k)值,作出频谱图,并深入讨论结果,说明参数的变化对信号频谱产生哪些影响.频谱只作模特性,模的最大值=1,全部规一化.
2.打印出用C语言编写的FFT源程序,并且在每一小段处加上详细的注释说明.
3.用C语言编写FFT编写程序时,要求采用人机界面形式:
N、T、F变量均由键盘输入;补零或不补零要求设置一开关.
这是一个傅里叶变化的子函数,你可以自己做主函数传递你这里的参数验证
// 入口参数:
// l:l = 0,傅立叶变换; l = 1,逆傅立叶变换
// il:il = 0,不计算傅立叶变换或逆变换模和幅角;il = 1,计算模和幅角
// n:输入的点数,为偶数,一般为32,64,128,...,1024等
// k:满足n=2^k(k>0),实质上k是n个采样数据可以分解为偶次幂和奇次幂的次数
// pr[]:l=0时,存放N点采样数据的实部
// l=1时,存放傅立叶变换的N个实部
// pi[]:l=0时,存放N点采样数据的虚部
// l=1时,存放傅立叶变换的N个虚部
//
// 出口参数:
// fr[]:l=0,返回傅立叶变换的实部
// l=1,返回逆傅立叶变换的实部
// fi[]:l=0,返回傅立叶变换的虚部
// l=1,返回逆傅立叶变换的虚部
// pr[]:il = 1,l = 0 时,返回傅立叶变换的模
// il = 1,l = 1 时,返回逆傅立叶变换的模
// pi[]:il = 1,l = 0 时,返回傅立叶变换的辐角
// il = 1,l = 1 时,返回逆傅立叶变换的辐角
void kbfft(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