看到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()不是必须加上去的,并且我好像还在网上看到说是正频率所对应的幅值是正的,而负频率所对应的幅值是负的,具体的我也不清楚。。。

FFT变换频谱图中频率刻度的设置方法相关推荐

  1. FFT变换频谱图中幅值的设置方法

    按照上篇博文所画出来的频谱图中,原信号的每个频率是准确地找出来了,但是各个频率点所对应的的幅值可不是原信号中真正的幅值,因为在进行DFT(FFT)变换的时候,已经把幅值改变了,要想让频谱图的纵坐标显示 ...

  2. 功率谱和FFT变换频谱

    功率谱: nfft=length(total_wave); window1=hamming(100); %海明窗 noverlap=20; %数据无重叠 range='onesided'; %频率间隔 ...

  3. FFT求频谱图和功率谱密度图

    FFT求频谱图和功率谱密度图 频谱图 声音频率与能量的关系用频谱表示.在实际使用中,频谱图有三种,即线性振幅谱.对数振幅谱.自功率谱. 线性振幅谱的纵坐标有明确的物理量纲,是最常用的. 对数振幅谱中各 ...

  4. oracle环境变量配置教程,oracle_window中oracle环境变量设置方法分享,window server中Oracle的环境变量设 - phpStudy...

    window中oracle环境变量设置方法分享 window server中Oracle的环境变量设置 1.右击"我的电脑"->选择"属性"->选择 ...

  5. fiddler拦截模拟器中app的请求设置方法

    fiddler拦截模拟器中app的请求设置方法 fiddler设置 Tools -> Options -> connections 设置端口号 可以勾选Allow remote compu ...

  6. php中align标签属性值,html align属性是什么含义?html中的align属性设置方法介绍

    html align属性是什么含义?html中的align属性设置方法介绍都在这里,本篇文章介绍了html align属性的定义和含义,还有关于html align属性值的设置介绍 html alig ...

  7. php中align是什么意思,htmlalign属性是什么含义?html中的align属性设置方法介绍

    html align属性是什么含义?html中的align属性设置方法介绍都在这里,本篇文章介绍了html align属性的定义和含义,还有关于html align属性值的设置介绍 html alig ...

  8. 深入浅出解释FFT(七)——fft求频谱图和功率谱密度图

    频谱图: 声音频率与能量的关系用频谱表示.在实际使用中,频谱图有三种,即线性振幅谱.对数振幅谱.自功率谱.线性振幅谱的纵坐标有明确的物理量纲,是最常用的.对数振幅谱中各谱线的振幅都作了对数计算,所以其 ...

  9. 使用python进行傅里叶变换FFT绘制频谱图

    频谱图的横轴表示的是  频率, 纵轴表示的是振幅 #coding=gbkimport numpy as np import pandas as pd import matplotlib.pyplot ...

最新文章

  1. 邻接表存储(链式前向星)
  2. python 类-9. 类 — Python 3.9.0 文档
  3. CSS3运算 calc()函数是怎么实现计算
  4. 项目打包publicpath_将项目部署至github和码云
  5. Spring JdbcTemplate batchUpdate() 实例
  6. ON_COMMAND_RANGE用法
  7. 移植QT到tiny4412开发板
  8. qtabwidget放大_Qt自定义弹窗屏蔽父窗口(QWidget设置setWindowModality(Qt::ApplicationModal);以后再show)...
  9. Android模拟器的换肤和Android学习资料下载
  10. oracle怎么把in值列出来,oracle – SELECT的解析和绑定变量.. WHERE列IN(..)查询
  11. 阿里Q1财报:云计算付费用户首超100万
  12. HDU_1874_畅通工程续_最短路问题
  13. Android平台支持的多媒体格式
  14. 2021年危险化学品经营单位安全管理人员实操考试视频及危险化学品经营单位安全管理人员操作证考试
  15. windows服务器双网卡链路聚合_服务器双网卡捆绑与交换机链路聚合排障1例
  16. mbedTLS中的握手建立操作
  17. Android应用开发自定义图片剪辑头像设置
  18. IP与MAC绑定的难题
  19. JVM 内存分析神器 MAT: Incoming Vs Outgoing References 你真的了解吗?
  20. 2021年安全员-C证(上海市)考试APP及安全员-C证(上海市)新版试题

热门文章

  1. SPGridview的使用
  2. 一位Erlang程序员的自白
  3. Assets.car 解压工具 cartool 使用报错 segmentation fault cartool 解决方案
  4. 安装postgreSQL出现configure: error: zlib library not found解决方法
  5. 震惊!原来leetcode竟然真的能中奖?
  6. linux adc是什么设备,Linux 驱动--ADC驱动
  7. Leetcode每日一题:46.permutations(全排列)
  8. 集成学习—决策树(CART)
  9. LeetCode刷题(21)
  10. hbuilder能用python_Hbuilder之开发Python