Fortran Coder

查看: 8924|回复: 7
打印 上一主题 下一主题

[通用算法] 频谱分析

[复制链接]

27

帖子

7

主题

0

精华

熟手

F 币
136 元
贡献
103 点
跳转到指定楼层
楼主
发表于 2014-4-4 00:08:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
求大神指导:帮我看看我的这个频谱分析的程序,其中振幅谱对着,为啥相位谱不对?

2.f90

768 Bytes, 下载次数: 13

程序

分享到:  微信微信
收藏收藏1 点赞点赞 点踩点踩

725

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
657 元
贡献
337 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

沙发
发表于 2014-4-4 18:33:25 | 只看该作者
你的代码没有错误,这也不是一个 Fortran 问题,而是算法问题。

对于采样率不是信号频率整数倍,或者整个序列包含的不是整数倍周期的序列,相位就是会不准的。

试想一下,把一个非整数周期的序列抽取出来,做周期延拓,与整数倍周期做延拓会一样吗?

比如信号:
***...***...***..
做了周期延拓,变成了
***...***...***..***...***...***..***...***...***..
他的频谱自然就改变了。
就与下面这个不同的:
***...***...***...***...***...***...***...***...***...***...

这种差别反应在振幅谱上不明显,在相位谱上就明显了。

27

帖子

7

主题

0

精华

熟手

F 币
136 元
贡献
103 点
板凳
 楼主| 发表于 2014-4-11 09:35:42 来自移动端 | 只看该作者
chuxf 发表于 2014-4-4 18:33
你的代码没有错误,这也不是一个 Fortran 问题,而是算法问题。

对于采样率不是信号频率整数倍,或者整个 ...

好的,我试试,谢谢!

27

帖子

7

主题

0

精华

熟手

F 币
136 元
贡献
103 点
地板
 楼主| 发表于 2014-4-12 21:01:45 | 只看该作者
chuxf 发表于 2014-4-4 18:33
你的代码没有错误,这也不是一个 Fortran 问题,而是算法问题。

对于采样率不是信号频率整数倍,或者整个 ...

您好,我按您说的改了一下程序,结果发现相位谱还是不太对。还有,如何将振幅谱中的振幅大小和实际的振幅大小一样?比如我这个程序中的振幅是1,结果在振幅谱中它的大小却不是1.
还望大神帮我把这程序改改,跪谢啊!

27

帖子

7

主题

0

精华

熟手

F 币
136 元
贡献
103 点
5#
 楼主| 发表于 2014-4-12 21:03:43 | 只看该作者
chuxf 发表于 2014-4-4 18:33
你的代码没有错误,这也不是一个 Fortran 问题,而是算法问题。

对于采样率不是信号频率整数倍,或者整个 ...

哦,这是我修改后的程序

2.f90

1.11 KB, 下载次数: 4

725

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
657 元
贡献
337 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

6#
发表于 2014-4-12 23:57:46 | 只看该作者
第一:建议你把圆周率定义为一个常数,要保持有一定的精度。(3.14 太初略了)
real , parameter :: PI = 3.141592654

第二:你这个没有任何相位,导致相位谱看起来没有什么变化,于是误差就显得很突出。试试加个相位:
x(i)=sin(PI/8.0+(a(i)*(fs*2*PI)))

27

帖子

7

主题

0

精华

熟手

F 币
136 元
贡献
103 点
7#
 楼主| 发表于 2014-4-16 22:28:35 | 只看该作者
chuxf 发表于 2014-4-12 23:57
第一:建议你把圆周率定义为一个常数,要保持有一定的精度。(3.14 太初略了)
real , parameter :: PI = 3 ...

这就是修改程序后做的相位谱,还是差得好远频率 50Hz

tupian.jpg (19.9 KB, 下载次数: 333)

tupian.jpg

725

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
657 元
贡献
337 点

新人勋章爱心勋章水王勋章元老勋章热心勋章

8#
发表于 2014-4-16 23:00:34 | 只看该作者
直接输出 (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 很接近啊
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-11-25 08:53

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表