全相位fft matlab,全相位FFT问题——全相位时移相位差法 请教!!!

最近学习王兆华教授的全相位FFT方面的知识,对于全相位时移相位差法有点疑问,望高手们解答。

全相位时移相位差法的采样长度为3N-1,倘若将其分为三段:1~N、N+1~2N-1、2N~3N-1,来模拟一下实际采样中噪声干扰可能带来的偏差。

设定三段的频率、相位相同,但是幅值取不同值(保证了频谱的连续性),然后按照附录3的原理性程序做全相位FFT,并对最后的结果分析:

结果的频率和相位没什么好说的,主要是结果中幅值一项基本就等于前两段数据(1~N、N+1~2N-1)理论幅值的平均值,而第三段数据(2N~3N-1)幅值的变化对结果基本没什么大的影响。换句话说,全相位时移相位差法所得的结果基本等于前两段数据FFT的平均值,而几乎与第三段无关,这是为什么???而平常FFT做例如10个周波的FFT,那么结果一定等于各个周波FFT的平均值(已证明)。那么全相位第三段数据(2N~3N-1)的突然跳变会对全相位结果无太大的影响,求解释?!!

实验代码如下:

%附3 apFFT时移相位差法校正程序

close all;clear all;clc;

N=1024;

FSX=5;

fs=FSX*N;

t1=-N+1:0;

t2=1:N-1;

t3=N:2*N-1;

f=50;

ph=90;

A1=120;A2=60;A3=10000;%试图改变A1、A2、A3的值...

s1=A1*cos(2*pi*t1*f/fs+ph*pi/180);

s2=A2*cos(2*pi*t2*f/fs+ph*pi/180);

s3=A3*cos(2*pi*t3*f/fs+ph*pi/180);

ss=[s1,s2,s3];

win=hanning(N)';win1=hann(N)';

win2=conv(win,win1);

win2=win2/sum(win2);

w=pi*2;

s1=ss(1:2*N-1); %第1组(2N-1)个数据

y1=s1.*win2;

y1a=y1(N:end)+[0 y1(1:N-1)];

out1=fft(y1a,N);

a1=abs(out1);

p1=mod(phase(out1),2*pi);

s2=ss(1+N:3*N-1); %第2组(2N-1)个数据

y2=s2.*win2;

y2a=y2(N:end)+[0 y2(1:N-1)];

out2=fft(y2a,N);

a2=abs(out2);

p2=mod(phase(out2),2*pi);

rr=round(f/FSX);

dp=p2(rr+1)-p1(rr+1);

dph=mod(dp,2*pi); %由于频率较小,为减小噪声信号的干扰,作如下改进频率和幅值

if dph>pi %dph即为两序列谱峰线间的相位差,(0~2*pi)

dph=dph-2*pi;

elseif dph

dph=dph+2*pi;

end

g0=dph/pi/2;

if g0==0

h=2;

else h=2*pi*g0.*(1-g0.*g0)./sin(pi*g0);

end

AA=abs((h.^2).*a1)/2;

fff=(rr+g0)*FSX

aaa=AA(rr+1)

ppp=p1(rr+1)*180/pi

结果:fff =  50.0251        aaa =  90.0058           ppp =  89.5443

即幅值aaa为前两段数据幅值(120、60)的平均值,改变其他数据同理。我想知道,第三段数据干什么去了???

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值