FFT变换频谱图中频率刻度的设置方法


看到matlab中关于fft变换的几行代码,总想把它们几行语句搞清楚,看了许多,还是有些搞不清楚,可能需要更多的知识才能把它们彻底搞懂吧。
先来看一个简单的画频谱图的代码吧:

clear all
fs=150;%采样频率要大于等于原信号中最高频率的二倍
N=150;%采样点数
t=(0:N-1)/fs;
y=0.5*sin(2*pi*65*t)+0.8*cos(2*pi*40*t)+0.7*cos(2*pi*30*t);
F=fft(y,N);
freq=(0:N/2)*fs/N;%只画(0,fs/2)范围内的频率分量,起始坐标是0,因为只有(0,fs/2)范围内的频率才有意义
stem(freq,abs(F(1:N/2+1)),'k');%依据频率坐标来绘制傅里叶变换后的信号的频率-幅度谱,注意F的起始坐标是1
xlabel('频率(Hz)');
ylabel('幅值');
xlim([0 130]);

运行结果:
在这里插入图片描述

关于这段代码,主要有以下几个问题:

1、采样频率fs与采样点数N的关系:

采样频率比较简单,根据奈奎斯特采样定理,采样频率必须大于等于原信号中最高频率的二倍才能把原信号恢复出来。
而采样点数主要是和所要求的的频率分辨率有关系,看下一条。

2、频率分辨率:

频率分辨率我们定义为fs/N(可以先不要想太多,先接受这个定义吧),它的意义就是我们频谱图中横坐标中的相邻两坐标点之间的间隔。频谱图中的横坐标是频率,fs/N越小,说明我们频谱图精度越高,如果fs固定,那么采样点数N越多,频率分辨率就越高,但是采样点数也没必要太高,太高也会延长计算机的计算时间,并且导致数据量变得很多。如果我们想让频谱图中横坐标的频率间隔是1Hz,那么我们就可以让采样频率和采样点数的大小相等即可,这时候频率分辨率fs/N就是1Hz。

3、频谱图中横坐标(频率刻度)的设置方法:

设信号采样后的长度为N,(也就是采样点数是N),采样频率是fs,在DFT(fft)以后的信号的频率在-fs/2和fs/2之间,至于为啥是这样,我也理解的不太深入。。。然后网上查到的说是根据奈奎斯特采样定理可得出采样后的信号只在(0,fs/2)范围内的频率分量才有意义。。
书上说实际上不存在大于fs/2的频率分量,大于fs/2的频率分量实际上是负频率的分量,我也不太理解这一点。

(1)当采样点数N为偶数时频率刻度设置方法一:

如果我们想在频谱图中给出负频率到正频率的全部分量,那么横坐标也就是频率刻度应该写为:

freq=(0:N-1)*fs/N-fs/2

这样给出的频率刻度是:-fs/2,-fs/2+fs/N,… ,0,fs/N,… ,fs/2-fs/N,其中不包括fs/2这一点
如果我们只想在频谱图中给出正频率的分量,那么横坐标应该写为:

freq=(0:N/2-1)*fs/N   (1)
freq=(0:N/2)*fs/N     (2)

(1)和(2)两个式子都可以,他们的唯一区别就是(1)式给出的总共是有N/2个点,没有包括fs/2这一点的频率随对应的幅值,而(2)式给出的总共是N/2+1个点,包括fs/2这一点随对应的幅值(如果想看具体的效果,可以把采样频率改为原信号中最大频率的二倍,即采用临界采样,这个时候包不包括fs/2这一点的频谱图就会有所区别了,但是我自己试了一下,好像和我想的有一点出入。。。)。
当序列(0:N/2)遍历到最后一个值(也就是N/2)的时候,有N/2*fs/N=fs/2。

(2)当N为偶数时频率刻度设置方法二:

有些人喜欢用linspace函数来设置频率刻度,linspace函数的调用格式如下:

F=linspace(x1,x2,N)

表示在x1和x2之间等分为N份后赋予变量F
如果想用linspace函数设置正负频率,则可表示为:

freq=linspace(0,fs,N+1)-fs/2
freq=freq(1:N)

书上说如果等分为N份有些不方便,所以就等分为N+1份,而在使用时只取前N份,我也不知道为啥。。。
如果想设置正频率,则可以表示为:

freq=linspace(0,fs/2,N/2+1)

这个就相当于上面写的freq=(0:N/2)*fs/N

(3)当N为奇数时频率刻度设置方法一:

在这里插入图片描述

注:

freq=(0:N/2)*fs/N;
stem(freq,abs(F(1:N/2+1)),'k');

stem中的参数F(1:N/2+1)的值的个数要与freq序列值的个数相一致才行。
并且我们一般会在傅里叶变换后的函数F前面加上abs()之后再去画图,这个abs()不是必须加上去的,并且我好像还在网上看到说是正频率所对应的幅值是正的,而负频率所对应的幅值是负的,具体的我也不清楚。。。

  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值