直接输出 (atan(aimag(p(i))/real(p(i)))) 得到 频率 振幅 相位 49.68153 0.5014265 0.3901852 50.31847 0.4980811 0.3952646 50Hz 的大概是 0.39,跟 PI/8 = 0.392699075 很接近啊 |
第一:建议你把圆周率定义为一个常数,要保持有一定的精度。(3.14 太初略了) real , parameter :: PI = 3.141592654 第二:你这个没有任何相位,导致相位谱看起来没有什么变化,于是误差就显得很突出。试试加个相位: x(i)=sin(PI/8.0+(a(i)*(fs*2*PI))) |
chuxf 发表于 2014-4-4 18:33 哦,这是我修改后的程序 |
1.11 KB, 下载次数: 4
chuxf 发表于 2014-4-4 18:33 您好,我按您说的改了一下程序,结果发现相位谱还是不太对。还有,如何将振幅谱中的振幅大小和实际的振幅大小一样?比如我这个程序中的振幅是1,结果在振幅谱中它的大小却不是1. 还望大神帮我把这程序改改,跪谢啊! |
chuxf 发表于 2014-4-4 18:33 好的,我试试,谢谢! |
你的代码没有错误,这也不是一个 Fortran 问题,而是算法问题。 对于采样率不是信号频率整数倍,或者整个序列包含的不是整数倍周期的序列,相位就是会不准的。 试想一下,把一个非整数周期的序列抽取出来,做周期延拓,与整数倍周期做延拓会一样吗? 比如信号: ***...***...***.. 做了周期延拓,变成了 ***...***...***..***...***...***..***...***...***.. 他的频谱自然就改变了。 就与下面这个不同的: ***...***...***...***...***...***...***...***...***...***... 这种差别反应在振幅谱上不明显,在相位谱上就明显了。 |
捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )
GMT+8, 2025-4-11 07:45