tjucruiser 发表于 2012-9-26 11:52

信号的采样间隔是0.1,采用1024点FFT,请问频率分辨率是多少






我一直以为频率分辨率(频率轴上相邻两点频率差)应该是
fs/1024;这里fs是采样间隔的倒数,但是我做了模拟,发现不是这么回事。
三角函数及其理论对应的频谱见附件1.

我根据附件1编写的matlab代码见附件2.

但是我得到的两个结果(F和F2)怎么也无法重合,第二个结果如果每2点取1点进行降采样,才能和第一个结果重合。

如果我把代码中求F2的部分频率间隔修改为原来的两倍,也就是
M=1024;
fs=1/0.1;%
deltf=fs./512%%%这里把频率间隔增加到原来2倍
i=1;
for f=-10+deltf:deltf:10
    F2(i)=5*(sinc(f*5/2).^2);
    i=i+1;
end
F2=F2./max(F2);

这时候我的两个结果可以重合,请教大家我哪里有问题,多谢

noki0323 发表于 2012-9-26 15:38

是512啊。。。1024FFT,那么是512处对称的

lovelysada 发表于 2012-9-26 15:50

能不能直接把附近里的东西贴出来

马社 发表于 2012-9-26 23:35

fs=1/(1024*0.1)

tjucruiser 发表于 2012-9-27 16:10

FFT结果与理论频谱公式如何对应

本帖最后由 tjucruiser 于 2012-9-27 16:11 编辑

我开始怀疑我设定的信号采样频率是不是10Hz了,
三角函数及其频谱表达式可以见下面这个链接中“例5.4-5”,对于我说,我把三角脉冲的宽度tal设为10了,这里应该是没有问题吧。链接如下:
http://www4.zzu.edu.cn/dianqi/xinhao2/sig54.asp

三角脉冲频谱公式中的w应该是模拟角频率,与实际信号频率飞的关系满足w = 2*pi*f,那么
word文档中的Sa(5w/2)=sa(5*2*pi*f/2)

关于各种频率之间的关系见链接
http://blog.csdn.net/hztj2005/article/details/7400993

我把代码贴下
%%%%%%%%%%%三角脉冲
i=1;
for t=-51.2:0.1:51.1%采样间隔0.1 注意这里,下面这个信号x的采样频率是10吗??
    if(abs(t)<=5)
         x(i)=(1-abs(t)./5);                  
         i=i+1;
    end   
    if(abs(t)>5)
      x(i)=0;   
      i=i+1;
    end
end

%%%%%%%%%%%三角脉冲FFT结果
tempF=fft(x,1024);
tempF=fftshift(tempF);%0频率移到中心
F=abs(tempF);
F=F./max(F);


%下面代码是直接根据频谱的理论公式,而后取一些采样点,与上面求出的频谱F对比。
%假设是模拟角频率即与频率的关系是 w=2*pi*f
N=1024;
Ts=0.1;
fs=1/0.1;%采样频率
deltf=fs./N;%频率分辨率
j=1;
for f=-fs/2+deltf:deltf:fs/2               %为了让图形中心对称-fs/2---fs/2
    F2(j)=5*(sinc(2*pi*f*5/2).^2);   
    j=j+1;
end
F2=F2./max(F2);
plot(F);hold on;plot(F2,'r');


tjucruiser 发表于 2012-9-27 16:49

终于解决了,原因是matlab中的sinc函数定义是
sinc(t)=sin(pi*t)/pi*t,所以我的代码需要做一点改动,即
N=1024;
Ts=0.1;
fs=1/0.1;%采样频率
deltf=fs./N;%频率分辨率
j=1;
for f=-fs/2+deltf:deltf:fs/2               %为了让图形中心对称-fs/2---fs/2
    F2(j)=5*(sinc(2*f*5/2).^2);    %这里的pi要去掉,这样就可以了
    j=j+1;
end
F2=F2./max(F2);
plot(F);hold on;plot(F2,'r');

tjucruiser 发表于 2012-9-27 16:52

我把验证代码贴出来,和大家分享
%%%%%%%%%%%三角脉冲
i=1;
%设定三角脉冲宽度tal=10
for t=-51.2:0.1:51.1%采样间隔0.1
    if(abs(t)<=5)
         x(i)=(1-abs(t)./5);                  
         i=i+1;
    end   
    if(abs(t)>5)
      x(i)=0;   
      i=i+1;
    end
end

%%%%%%%%%%%三角脉冲FFT结果
tempF=fft(x,1024);
tempF=fftshift(tempF);%0频率移到中心
F=abs(tempF);
F=F./max(F);

%模拟角频率即与频率的关系是 w=2*pi*f
N=1024;
Ts=0.1;
fs=1/0.1;%采样频率
deltf=fs./N;%频率分辨率是信号长度的倒数,即,1/102.4与fmax等分1024份一样
j=1;
for f=-fs/2+deltf:deltf:fs/2 %为了让图形中心对称-fs/2---fs/2
    %F2(j)=5*(sinc(2*pi*f*5/2)).^2;
    F2(j)=5*(sinc(2*f*5/2)).^2;%注意 matlab中sinc函数定义是sinc(t)=sin(pi*t)./(pi*t)
    j=j+1;
end
F2=F2./max(F2);
plot(F);hold on;plot(F2,'r');

kyu16866 发表于 2012-11-6 13:52

f = fs/2*linspace(0,1,NFFT/2+1);
或者
f=fs/NFFT*(0:NFFT/2)

无衣 发表于 2012-12-29 19:14

楼主应该概念错误,首先是把时间域的数据采过来形成频率域,所以1024个采样点变成了400条谱线,而采样频率就换为分析频率fm=fs/2.56,频率分辨率是两条谱线之间的频率差,而不是采样点两点的间隔(时间差),虽然两者计算的结果相同,但代表的意义应该不同吧,
个人意见啊

PXMAX 发表于 2013-6-1 16:45

去年的贴了,问题解决没
页: [1]
查看完整版本: 信号的采样间隔是0.1,采用1024点FFT,请问频率分辨率是多少