声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3630|回复: 9

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

[复制链接]
发表于 2012-9-26 11:52 | 显示全部楼层 |阅读模式
40体能
t1.rar (456 Bytes, 下载次数: 4)

t1.doc (21 KB, 下载次数: 2)


我一直以为频率分辨率(频率轴上相邻两点频率差)应该是
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);

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

回复
分享到:

使用道具 举报

发表于 2012-9-26 15:38 | 显示全部楼层
是512啊。。。1024FFT,那么是512处对称的
回复

使用道具 举报

发表于 2012-9-26 15:50 | 显示全部楼层
能不能直接把附近里的东西贴出来
回复

使用道具 举报

发表于 2012-9-26 23:35 | 显示全部楼层
fs=1/(1024*0.1)
回复

使用道具 举报

 楼主| 发表于 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');


回复

使用道具 举报

 楼主| 发表于 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');
回复

使用道具 举报

 楼主| 发表于 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');
回复

使用道具 举报

发表于 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,频率分辨率是两条谱线之间的频率差,而不是采样点两点的间隔(时间差),虽然两者计算的结果相同,但代表的意义应该不同吧,
个人意见啊
回复

使用道具 举报

发表于 2013-6-1 16:45 | 显示全部楼层
去年的贴了,问题解决没
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-11 01:05 , Processed in 0.089597 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表