求FFT函数参数分析
在网上找了一个FFT函数如下:(其中函数体的内容可以忽略)
// 函数名: 快速傅立叶变换(来源《C常用算法集》)
// 入口参数:
// 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,i = 0 时,返回傅立叶变换的模
// il = 1,i = 1 时,返回逆傅立叶变换的模
// pi[]: il = 1,i = 0 时,返回傅立叶变换的辐角
// il = 1,i = 1 时,返回逆傅立叶变换的辐角
// data: 2005.8.15,Mend Xin Dong
void FFT(double pr[], double pi[], int n, int k, double fr[], double fi[], int l, int il)
{//这里的内容忽略不看
}
我的目的: 我用采集卡采集到了一组信号数据(信号强度)data[1024],想通过FFT函数转换,然后绘制频域波谱图形(想分析该信号中包含几种频率的信号)
问题1:我只有一组数据data[1024],可是函数声明中有两组入口参数pr[]和pi[],应该把data[1024]作为哪一个参数,另外一个参数怎么办?
问题2:出口参数分别是fr[],fi[],pr[],pi[];我要绘制频谱图,应该用哪个参数作为纵坐标来绘制呢?横坐标又是哪个参数呢?
本人在波谱分析这块是菜鸟,对傅立叶变换更是菜鸟,希望大虾能用最通俗易懂的语言回答,谢谢
[解决办法]
你找到的是二维的FFT,你的只需要一维的就可以了,可以看看:
http://blog.21ic.com/user1/4123/archives/2007/38294.html
[解决办法]
问题1::参数pr[]和pi[],是实部和虚部的意思.输入到pr[]就可;
问题2:出口参数分别是fr[],fi[],pr[],pi[];估计fr[],fi[]是输出的复数数列,p估计表示相位【一般不用,除非考虑相位、频率特性】,频谱幅度就是fr[]+fi[]*i的幅度(纵坐标),[]的序号换算出频率作为横坐标。
[解决办法]
到http://www.pudn.com/downloads143/sourcecode/math/detail622569.html下载源码,是基于EVC的,和VC的基本一样,里面模拟产生信号,并叠加了一个噪声,最后经fft将噪声频率提取出来