||
有人问:全相位FFT物理上是否可以实现?很多研究都是在Matlab上仿真,且假设时间采用点为t=-(N-1):1:(N-1),实际上t为负的在物理上是无法采样的。实际实验测试发现,把采样点的时间修改为t=0:1:2N-2或者t=1:1:2N-1后全相位FFT检测的初始相位有错。那位高人能解释?
用硬件制成一个全相位计,可测2N-1序列中间样点的相位.
但在实际中采集不到一个己知样点相位的信号,不论是笫一个样点的相位,或是其它样点的相位,所以不能用耒判断全相位计测相精度.已有相位测量仪一般也只能测相位差,不能测样点相位,所以在实际中采集不到一个己知初相位的信号.频率计不一样,可用其它方法测出频率值,或知道这组采样的频率值,用於判断全相位频率计的测量精度.
只有在matlab中可产生己知初相位的信号,所以只能在matlab中检验全相位计算法测量相位精度.
在实际中我们遇到的信号是不知道它是什么时候发生的,即不知道信号的初相位,就是一开机就立同时采集也不行,因为一开机不可能是一个稳定振动信号,一般要等信号稳定后才采集,所以在实际中一般采集不到一个己知初相位的信号.除非用很复杂的电路.
但这没有关系,fft中采集到N个采样,fft测的是N个采样序列起始样点的相位,apfft中采集到2N-1个采样,apfft测的是2N-1个采样序列中间样点的相位,一段正弦信号采样中,若已知频率和振幅,则只要知道一个样点的相位就可以确定信号了,可以是笫一个样点的相位, 也可以是如apfft中的中间样点的相位.
如果在Matlab模拟时,一定要t>0,模拟时信号的频率和初相是已知的,所以第N点的相位也可算出,用apfft测的值和N点相位值比较就可知apfft测相位的精度了.
当然也可先用apfft测出N点相位,再校正得频率值,也可算出初相位,和己知初相位作比较计算算法精度,但这时校正频率值误差会带入计算算法精度中.
一定要改变观念,确定一组采样的振动信号,不一定要知道第1个采样的相位,即初相位(正如前述,采集到的第1个采样的相位并不是这个振动信号初相位),这组采样中任一采样的相位都可用.apfft测定中间点相位是有用的,是充分满足需求的.加上频率值和振幅值,可以完全确定这个振动信号.
平稳信号作fft后有N个振幅值组成的振幅谱和有N个相位值组成的相位谱,原fft频谱分析只用振幅谱,一般作功率谱估计,相位谱杂乱,弃之不用.apfft使占频谱分析一半的相谱有用了.
apfft的相位谱在无噪时是一条水平线,水平线的纵坐标值即信号初相位值,不需校正.不随频率变化,在一般噪声下,仍能保持峰值对应的相位谱有一个小平台,可用於判断该峰值信号是否单一频率成分.
大多数相位计测的是二个同频信号的相位差,apfft测的是样点的相位值.
单一频率成份时,样点的相位值可从示波器直接读出,但多频率成份时,样点的相位值不可能从示波器读出
apfft测的是2N-1个采样序列中间样点的相位,fft测的是N个采样序列起始样点的相位,都是己知某一时刻的相位值,再加上测得频率和振幅值,即可确定一个余弦波
大多数相位测量以3变量克罗米限,apfft测相以2变量克罗米限.
无噪时相位测量精度达10(-10)
奇妙的相位测量
在apfft的相位测量中有一个性质,如用N=8阶FFT分析余弦信号
y=cos(2*pi*2.3*t/8+pi/4) (1)
虽频率为非整数2.3, 但我们在apfft相位谱频率轴整数3处测相位仍是pi/4, 而且在任何整数谱线测都是pi/4. apfft的水平相位特性理论和实验都己证实.这样有一个问题:
如果是单一频率,在频谱那一点测最简单?
在N=8阶DFT矩阵中,
N=8的DFT矩阵(2)中笫3行正交矢量最简单
H2=[ 1 -j -1 j 1 -j -1 j ]; (3)
这样我们可以下步骤测初相位:
(1) 在信号y中取15个点,y=y(1:15)
(2) 先把它和N=8的矩形窗卷织窗win=[1 2 3 4 5 6 7 8 7 6 5 4 3 2 1] 相乘
y1=y.*win
(3)移位合并成N=8的全相位输入
y2=y1(N:end)+[0 y1(1:N-1)]
(4)y2和正交矢量H2相乘后得复数序列y3
y3=y2.*H2
(5) y3的各元素之和得的复数的相角即初相位
p=angle(sum(y3))
如上例; t=-7:7时信号(1)的15个取样值为:
y =[ 0.7604 -0.80902 -0.38268 0.98769 -0.078459 -0.95106 0.5225 0.70711 -0.85264 -0.30902 0.99692 -0.15643 -0.92388 0.58779 0.64945];
乘窗移位合并成N=8的全相位输入为
y2=[0.088388 -0.081376 -0.054252 0.059946 0.051953 -0.049436 -0.070793 0.067296]
y2和H2相乘后得y3(乘1,-j,-1,j,即分正,负,实数,虚数)
y3=[0.088388 0.081376j 0.054252 0.059946j 0.051953 0.049436j 0.070793 0.067296j]
y3各元素之和为 0.26539 + 0.25805j
上复数的相角即初相位 44.197度
以上计算过程多么简单
虽N=8时用cos信号测得初相位为44.197度,有误差. 这是由於cos信号的镜像谱线靠得近, 泄漏大影响测量精度, 但实用中,N取大些,用hanning卷轵窗,测cos信号相位精度没问题.如下例
对N=2^P阶DFT, 笫(N/4+1)个正交矢量最简单, 如N=128时的正交矢量H33为
H33=[ H2 H2 H2 H2 H2 H2 H2 H2 H2 H2 H2 H2 H2 H2 H2 H2 ];
H33 都是[1 -j -1 j ] 四个数
实用中窗用hanning(N)卷积窗,
对所测频率为f 的信号,选采样频率fs=4f ,即每周取4点左右,不要很准. 致使f 的谱线落在N/4附近.
如频率 f=33.333333,初相 pp=45.1111111111111度的余弦信号,
选N为128, 采样频率=4*33=132, 选fs为128, 用下程序可测f的初相位
clc;close all; clear all;
N=128;fs=128;
t=-N+1:N-1;
y=cos(2*pi*t*f/fs+pp*pi/180);
win=hanning(N)'; winn=conv(win,win); win2=winn/sum(winn);
y1=y.*win2;
y2=y1(N:end)+[0 y1(1:N-1)];
H2=[1 -j -1 j 1 -j -1 j];
H33=[H2 H2 H2 H2 H2 H2 H2 H2 H2 H2 H2 H2 H2 H2 H2 H2];
y3=sum(y2.*H33);
disp('初相位值')
ppp=angle(y3)*180/pi
执行结果
初相位值'
ppp=45.1111111111089(度)
上面的计算过程中,用了(2N-1)次实数乘法,2N-2次实数加法.十分简单.
在cos信号中每周期取4个样点左右(不是严格的4倍频取样),共取2N-1个样点,乘卷积窗后分成实数和虚数相加,中间点相位就测出来了,这种测相位方法是否很奇妙.
GMT+8, 2024-5-19 22:22 , Processed in 0.065662 second(s), 17 queries , Gzip On.
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.