rockzone 发表于 2007-10-2 10:38

问个数字信号处理问题。正弦波相位的求法

比如我这有一个正弦波。频率为2Hz,相位不知道。

这个正弦波我在一个周期内采样512个点。进行FFT。算出频谱。

怎样利用FFT后的数据得出初始相位呢?

songzy41 发表于 2007-10-2 20:58

如果在FFT后2Hz与某条谱线相重合,则该谱线的相位角便是2Hz的初始相位;如果在FFT后2Hz不与某条谱线相重合,而是在2条谱线的中间,则要用校正方法去求。在本版的“信号处理专栏话题索引”中有一项是“频谱校正”,你可通过索引找到相关的帖子。

rockzone 发表于 2007-10-2 21:16

哥们终于等到你了。我看了你很多帖子了。但还是有点不懂,等我写一下啊

rockzone 发表于 2007-10-2 21:25

什么原因

求相位,就是用反正切
但在频谱中2Hz处即幅值最大处求出的相位与真实相位相差90度,这是什么原因呢。

我用VB写了一个FFT算法

比如离散正弦波sin(n×2×pi×2/1024)在频谱2Hz处,
,实部正数非常小,但是虚部是负数非常大。比如 51-4235i,这样相位是-90度,当然这是FFT计算的误差,

另外我又用matlab写了一段程序,也是计算上式的频谱

在2Hz处计算的结果是0 - 4226i

这样一来,2Hz初相就是-90度,初始相位应是0度啊

怎么和我初始的相位差了90度呢。~!

什么原因

yangzj 发表于 2007-10-2 23:38

傅立叶变换是余弦分解,sin(n×2×pi×2/1024)=cos(n×2×pi×2/1024-pi/2)
所以你举的例子本身初相就是-90度而不是0

rockzone 发表于 2007-10-2 23:52

遇到高人了

楼上解释好像是正确的。
但是有理论吗?

为什么是余弦分解呢?

另外sin(n×2×pi×2/1024)

是不是采样频率fs为1024Hz,而原始信号频率f1为2Hz呢

yangzj 发表于 2007-10-3 00:07

从你这个式子里是看不出具体的频率的。
只能说如果你的1024是采样频率,n=0:N-1(N为点数)的话,那么你这个信号的频率就是2Hz.

yangzj 发表于 2007-10-3 00:18

至于为什么是余弦分解,你可以这样看。
用欧拉公式:
cos(2*pi*f*t+ph)=(exp(j*ph)*exp(j*2*pi*f*t)+exp(j*-ph)*exp(j*-2*pi*f*t))/2;
sin(2*pi*f*t+ph)=(exp(j*ph)*exp(j*2*pi*f*t)-exp(j*-ph)*exp(j*-2*pi*f*t))/(2j)
                     =(exp(j*(ph-pi/2))*exp(j*2*pi*f*t)-exp(j*(-ph-pi/2))*exp(j*-2*pi*f*t))/2;

傅立叶变换是把信号分解成exp(j*2*pi*f*t)的和的形式,而且一般取正频率exp(j*2*pi*f*t)
显然按余弦信号的结果得到的相位是ph,而按正弦的结果是ph-pi/2,差了90度


说傅立叶变换是余弦分解当然是不严谨的说法,只是在分析实信号的时候通常都可以这样认为。

[ 本帖最后由 yangzj 于 2007-10-3 00:33 编辑 ]

rockzone 发表于 2007-10-3 13:23

请问,有什么书,讲以上你说的内容吗?

是应该这样解释吗?

yangzj 发表于 2007-10-3 14:32

自己的理解,仅供参考。:lol

rockzone 发表于 2007-10-3 15:02

你在实际工作中算得的相位也是这样理解的吗?

或者你的老师怎么理解这个问题的。

我找了好多地方也没有能解释清楚这个问题的。

在实际计算相位时,只能用90度去修正它。

yangzj 发表于 2007-10-3 15:14

我老师曾告诉我傅立叶变换的实质是余弦分解,傅立叶级数是正弦分解,所以它们俩的结果在相位上会相差90度。
但我觉得说傅立叶变换的实质是余弦分解并不那么确切,它实质还是复谐波的分解,即分解成exp(j*2*pi*f*t)的和的形式。
至于你的问题,这个式子足以说明问题了
sin(2*pi*f*t+ph)=(exp(j*ph)*exp(j*2*pi*f*t)-exp(j*-ph)*exp(j*-2*pi*f*t))/(2j)
                     =(exp(j*(ph-pi/2))*exp(j*2*pi*f*t)-exp(j*(-ph-pi/2))*exp(j*-2*pi*f*t))/2;

songzy41 发表于 2007-10-3 17:07

大班主yangzj说得对的,我这里给出一个证明,看能否满足楼主的需要。

rockzone 发表于 2007-10-3 20:21

楼上证明挺好。不过我有个问题:

只取正频率部分进行傅立叶变换:

下面的式子中间那一项,e的-j×2PI×n×k/N

看不太清楚,是不是上面的式子,

我想问的是这个式子哪来的?

songzy41 发表于 2007-10-4 08:03

这是进行DFT变换。对于任何一个序列f(n),n=0,1,2,…N-1,则f(n)的DFT定义为下式:
页: [1] 2
查看完整版本: 问个数字信号处理问题。正弦波相位的求法