用VC++实现对波形数据的频谱分析
2008-11-13 19:31:09 来源:WEB开发网上述代码执行完毕时,原先存放着时域数值的复变量数组内存放的就是经过分析后的频域值,利用此数据可以通过绘图将频域波形直观地显示出来,也可以将其存成数据文件,以备进一步使用。
测试及运算结果分析
编译运行程序,分析一个三角脉冲的数据文件,并保存分析结果。该三角脉冲幅度为1,持续时间2毫秒,抽样时间间隔是20微秒,延拓周期(数据记录长度)为10毫秒,采样点数为500,取2的整数次幂512个采样点。下附该三角脉冲频谱的计算结果及误差分析:
频率(Hz) FFT求得 X(f) 误差
0.00 1.00006E-03 1.00000E-03 6.10352E-08
100.00 9.67593E-04 9.67531E-04 6.14332E-08
200.00 8.75203E-04 8.75150E-04 6.25092E-08
300.00 7.36904E-04 7.36849E-04 6.39413E-08
400.00 5.72852E-04 5.72787E-04 6.52926E-08
500.00 4.05351E-04 4.05285E-04 6.61362E-08
600.00 2.54638E-04 2.54572E-04 6.61847E-08
……
2700.00 9.16539E-06 9.09679E-06 6.86075E-08
2800.00 4.53216E-06 4.46500E-06 6.71550E-08
2900.00 1.21487E-06 1.15945E-06 6.44190E-08
注:此处FFT运算结果都乘以了系数10毫秒(0.01秒)。
从上述数据中可以看出,在分析结果中产生了误差。这是由于待分析的连续时间信号不具备离散性或周期性,也可能有无限长度。为了适应FFT方法的需要,先对波形进行了抽样和截断,这样再用程序分析采样数据必然会引起误差。从分析结果还可以看出,频率越高,误差波动也越大,此分析结果产生的误差在允许范围之内,是一个可以允许的近似。
本程序在Windows 98、Microsoft Visual C++ 6.0下编译通过。
更多精彩
赞助商链接