chi_man 发表于 2010-1-27 12:34

关于APFFT的分析频率的间隔问题

本人是初学者,关于APFFT的很多理论可能不是太理解……不过阅读了这里很多很好的帖子,帮助很多。
请问在使用APFFT去分析一个由多个不同频率组成的信号的时候,例如是由两个不同频率的正弦信号叠加组成的信号,如果这两个频率分别是6.66667Hz和7.5Hz,会不会因为这两个频率的间隔太少,导致最后计算出来的结果(如: 幅度,频率,相位等)会有很大误差,

我使用以下的代码去做的

close all; clc; clear all;
N=600;
t=-N+1:N*2+1;

Nfft=N;

f1=60/9;f2=60/8;sf=;                   % f1=6.66667, f2= 7.5
A1=1;A2=1;
ph1=60;ph2=150;
   
s=A1*sin(2*pi*t*f1/N+ph1*pi/180)+A2*sin(2*pi*t*f2/N+ph2*pi/180);

win=hann(N)';win1=hann(N)';
win2=conv(win,win1);
win2=win2/sum(win2);   
s1=s(1:2*N-1);
y1=s1.*win2;
y1a=y1(N:end)+;
Out1=fft(y1a,Nfft);
a1=abs(Out1);
p1=mod(phase(Out1),2*pi);

s2=s(1+N:3*N-1);
y2=s2.*win2;
y2a=y2(N:end)+;
Out2=fft(y2a,Nfft);
a2=abs(Out2);
p2=mod(phase(Out2),2*pi);

dph=mod(p2-p1,2*pi);
   
for si=1:length(sf)

      rr=round(sf(si));
      dph_val=dph(rr+1);
      if dph_val>pi
            dph_val=dph_val-2*pi;
      elseif dph_val<-pi
            dph_val=dph_val+2*pi;
      end
      g=dph_val/pi/2;
      h=2*pi*g.*(1-g.*g)./sin(pi*g);
      aa1=abs((h.^2).*a1)/2;
      fff(si)=rr+g;
      aaa(si)=aa1(rr+1);
      ppp(si)=p1(rr+1)*180/pi;
end

fff
aaa
ppp

结果是:
fff= 6.5939         7.5085                     (6.6667                  7.5)
aaa=1.3974         0.9948                     (1.0000                  1.0000)
ppp=9.7914         54.3465                   (330.0000               60.0000)

所以可以看到结果有很大的误差(括号里是正确的结果),因为如果我用两个频率相隔比较远一点的频率,就可以得到正确的结果(如15Hz和6.6667Hz),因此我觉得程序大概没什么问题,当然我不能确定,还是请大家指导一下!
不知道这样的问题是不是有方法去解决呢?或者这样的问题产生的原因是什么?可以通过什么方法解决它?谢谢大家!

zhwang554 发表于 2010-1-27 15:34

回复 楼主kevin19821 的帖子


    用一般校正方法频谱间隔3 以上才好. 频谱靠得太近,有二个解决方法:
      一是降低采样频率fs, 你的程序中fs=N, 频谱中每间隔fs/N=1Hz, 若fs=N/3, 频谱中每间隔fs/N=1/3Hz, 就可以区分你的频率为60/9和60/8两个信号了. 程序改动处如下

在N=600 后             加      fs=N/3
s=A1*sin(2*pi*t*f1/N+ph1*pi/180)+A2*sin(2*pi*t*f2/N+ph2*pi/180);
                     改为      s=A1*sin(2*pi*t*f1/fs+ph1*pi/180)+A2*sin(2*pi*t*f2/fs+ph2*pi/180);
rr=round(sf(si))               改为      rr=round(sf(si)*N/fs);
fff(si)=rr+g;                      改为         fff(si)=(rr+g)*fs/N;

运行结果:
ppp= 6.666603562848446e+000    7.500000006453633e+000
aaa = 1.000000223099778e+000    1.001110712113026e+000
ppp =3.300340760618933e+002    5.999999651428831e+001

    二是采用密集频谱校正法, 可校正在1个频率间隔内的两个频率成份, 方法复什些. 参见
方体莲,洪一:"利用FFT校正两个密集信号的频率和相位", 雷达科学与技术,Vol.3,No,6 p378-382, 2005

[ 本帖最后由 zhwang554 于 2010-1-27 19:24 编辑 ]

aliu 发表于 2010-1-28 09:57

楼上强人...

chi_man 发表于 2010-1-29 12:15

回复 沙发 zhwang554 的帖子

谢谢你的回复!
如果降低采样率,其实就是为了采样更多的信号,对吗?
因为本来的采样率是600Hz,信号s的采样点有1799点,需要3秒时间去采样,
现在降低采样率至200Hz,信号s的采样点虽然仍然是1799点,但需要9秒的采样。

所以如果要解决这问题,关键是增加采样的时间,目的是改善频率的解析度?

第二个方法我没有看,所以我先去找那篇文章看看,谢谢!

[ 本帖最后由 chi_man 于 2010-1-29 12:19 编辑 ]
页: [1]
查看完整版本: 关于APFFT的分析频率的间隔问题