zhwang554 发表于 2010-1-28 07:17

回复 楼上 czk108的帖子

本帖最后由 wdhd 于 2016-9-20 13:53 编辑

  是否被测频率是834.08, 这样算出耒的折合频率是834.08*512/21900=19.5, 频偏0.5的信号有两个峰值,一加噪声一个在19一个在20. 若这样,后面用19计算正确
  你可用N=500一试, 算出耒的折合频率是834.08*500/21900=19.04, 这样只有一个峰值在20处
  [ 本帖最后由 zhwang554 于 2010-1-28 10:49 编辑 ]

czk108 发表于 2010-1-28 10:22

回复 31楼 zhwang554 的帖子

实际频率在791上下,对应谱线号为18.5,但实际谱线号一个是19,一个20,我用19加上频偏计算出来的结果比较精确

czk108 发表于 2010-4-7 10:30

回复 31楼 zhwang554 的帖子

您好!最近发现程序还是有问题:
1.当频率小数部分为0.5时,频率校正误差在0.5Hz左右,其他情况时误差很小
2.当频率小数部分位于0.5~1Hz之间时,振幅校正误差大,并且随着频率小数部分在0.5~1Hz之间的增大,误差增大。
程序如下:
close all;clc;clear all;
T=100;k=1;
while T>0;
    T=T-1;
N=1024;
t=-N+1:N*2-1;
f1=151.8;
A1=1;
ph1=60;
s=A1*cos(1*(2*pi*t*f1/N+ph1*pi/180));
s=awgn(s,15);
win=hann(N)';
win1=hanning(N)';
win2=conv(win,win1);
win2=win2/sum(win2);
w=pi*2;
s1=s(1:2*N-1);
y1=s1.*win2;%加窗后的信号
y1a=y1(N:end)+;%经全相预处理的N点序列
Out1=fft(y1a,N);
a1=abs(Out1);
p1=mod(angle(Out1),2*pi);
s2=s(1+N:3*N-1);
y2=s2.*win2;
y2a=y2(N:end)+;
Out2=fft(y2a,N);
a2=abs(Out2);
p2=mod(angle(Out2),2*pi);
dph=mod(p2-p1,2*pi);
rr=round(f1);
dph=dph(rr+1);
if dph>pi
dph=dph-2*pi;
elseif dph<-pi
dph=dph+2*pi;
end
g=dph/pi/2;
h=2*pi*g.*(1-g.*g)./sin(pi*g);
aa1=abs((h.^2).*a2)/2;
fff(k)=rr+g;
aaa(k)=aa1(floor(f1)+1);
ppp(k)=p1(rr+1)*180/pi;
k=k+1;
end
disp('频率校正值')
fff=sqrt(mean(fff.^2))
disp('振幅校正值')
aaa=sqrt(mean(aaa.^2))
disp('初相位校正值')
ppp=sqrt(mean(ppp.^2))

还有g=dph/pi/2;
h=2*pi*g.*(1-g.*g)./sin(pi*g);
aa1=abs((h.^2).*a2)/2;这几句程序代表的变量,在书中没有找到对应的公式
谢谢!!

zhwang554 发表于 2010-4-7 12:36

回复 33楼 czk108 的贴子

本帖最后由 wdhd 于 2016-9-20 13:53 编辑

  所附程序是说明校正原理的,对一些特殊点不一定适合, 你可参见下网页5楼的程序
  http://forum.vibunion.com/forum/viewthread.php?tid=87228&extra=page%3D3%26amp%3Bfilter%3Dtype%26amp%3Btypeid%3D186
  振幅校正精度可参见下网址日志、
  http://forum.vibunion.com/UChome/space-62061-do-blog-id-17986.html
  hanning窗的fft插值公式 S=A/h
  式中h=2*pi*g.*(1-g.*g)./sin(pi*g)
  其中g为频偏值
  所以 fft的振幅校正公式
  A=S*h (A为信号振幅值)
  apfft的泄漏是fft的泄漏的平方
  hanning窗的apfft插值公式
  Sap=A/(h^2)
  所以 apfft的振幅校正公式
  A=Sap*h^2
  程序中除2是因插值公式对exp信号,对余弦信号幅值减半
  [ 本帖最后由 zhwang554 于 2010-4-7 12:38 编辑 ]

czk108 发表于 2010-4-11 21:18

回复 34楼 zhwang554 的帖子

您好!书中说两个全相位主谱线的相位差范围为-2pi到2pi,怎么程序中的判断语句选择的范围是-pi到pi,请问这是什么原因?
还有就是针对“当频率小数部分为0.5时,频率校正误差在1Hz,其他情况时误差很小'"我对程序中rr=round(f1)做了修改,也给rr的取值加了个判断语句使小数部分为0.5时rr=round(f1-1),这样得到的无噪声时的校正结果都很好,但是一加噪声0.5小数部分的频率校正误差还是很大,不知道原因?
页: 1 2 [3]
查看完整版本: 请教apfft时移相位差法的问题