问个数字信号处理问题。正弦波相位的求法
比如我这有一个正弦波。频率为2Hz,相位不知道。这个正弦波我在一个周期内采样512个点。进行FFT。算出频谱。
怎样利用FFT后的数据得出初始相位呢? 如果在FFT后2Hz与某条谱线相重合,则该谱线的相位角便是2Hz的初始相位;如果在FFT后2Hz不与某条谱线相重合,而是在2条谱线的中间,则要用校正方法去求。在本版的“信号处理专栏话题索引”中有一项是“频谱校正”,你可通过索引找到相关的帖子。 哥们终于等到你了。我看了你很多帖子了。但还是有点不懂,等我写一下啊
什么原因
求相位,就是用反正切但在频谱中2Hz处即幅值最大处求出的相位与真实相位相差90度,这是什么原因呢。
我用VB写了一个FFT算法
比如离散正弦波sin(n×2×pi×2/1024)在频谱2Hz处,
,实部正数非常小,但是虚部是负数非常大。比如 51-4235i,这样相位是-90度,当然这是FFT计算的误差,
另外我又用matlab写了一段程序,也是计算上式的频谱
在2Hz处计算的结果是0 - 4226i
这样一来,2Hz初相就是-90度,初始相位应是0度啊
怎么和我初始的相位差了90度呢。~!
什么原因 傅立叶变换是余弦分解,sin(n×2×pi×2/1024)=cos(n×2×pi×2/1024-pi/2)
所以你举的例子本身初相就是-90度而不是0
遇到高人了
楼上解释好像是正确的。但是有理论吗?
为什么是余弦分解呢?
另外sin(n×2×pi×2/1024)
是不是采样频率fs为1024Hz,而原始信号频率f1为2Hz呢 从你这个式子里是看不出具体的频率的。
只能说如果你的1024是采样频率,n=0:N-1(N为点数)的话,那么你这个信号的频率就是2Hz. 至于为什么是余弦分解,你可以这样看。
用欧拉公式:
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 编辑 ] 请问,有什么书,讲以上你说的内容吗?
是应该这样解释吗? 自己的理解,仅供参考。:lol 你在实际工作中算得的相位也是这样理解的吗?
或者你的老师怎么理解这个问题的。
我找了好多地方也没有能解释清楚这个问题的。
在实际计算相位时,只能用90度去修正它。 我老师曾告诉我傅立叶变换的实质是余弦分解,傅立叶级数是正弦分解,所以它们俩的结果在相位上会相差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; 大班主yangzj说得对的,我这里给出一个证明,看能否满足楼主的需要。 楼上证明挺好。不过我有个问题:
只取正频率部分进行傅立叶变换:
下面的式子中间那一项,e的-j×2PI×n×k/N
看不太清楚,是不是上面的式子,
我想问的是这个式子哪来的? 这是进行DFT变换。对于任何一个序列f(n),n=0,1,2,…N-1,则f(n)的DFT定义为下式:
页:
[1]
2