基于matlab和FFT算法实现信号频谱分析

2023-11-03

系列文章目录

数字信号处理(DSP:Digital Signal Process)是电子通信领域非常重要的研究方向,博主汇总了数字信号处理(DSP)中常用的经典案例分析,主要基于算法分析、MATLAB程序实现、信号图像显示,对数字信号处理的实际应用进行详细分析。

第一篇 常见离散信号的MATLAB产生和图形显示
常见离散信号的MATLAB产生和图形显示

第二篇 零极点分布对系统频率响应的影响
零极点分布对系统频率响应的影响

第三篇 基于matlab实现信号的线性卷积与循环卷积
基于matlab实现信号的线性卷积与循环卷积

第四篇 基于matlab和FFT算法实现信号频谱分析
基于matlab和FFT算法实现信号频谱分析



一、实验目的

  1. 进一步加深DFT算法原理和基本性质的理解(因为FFT只是DFT的一种快速算法,所以FFT的运算结果必然满足DFT的性质)

  2. 熟悉FFT算法原理及子程序的应用。

  3. 掌握用FFT对连续信号和时域离散信号进行频谱分析的基本方法。了解可能出现的分析误差和原因,以便在实际中正确应用FFT。


二、实验原理

  1. 如果用FFT对模拟信号进行谱分析,首先要把模拟信号转换成数字信号,转换时要求知道模拟信号的最高截止频率,以便选择满足采样定理的采样频率。一般选择采样频率是模拟信号中最高频率的3~4倍。另外要选择对模拟信号的观测时间,如果采样频率和观测时间确定,则采样点数也确定了。这里观测时间和对模拟信号进行谱分析的分辨率有关,最小的观测时间和分辨率成倒数关系。要求选择的采样点数和观测时间大于它的最小值。
  2. 用FFT作谱分析时,要求做FFT的点数服从2的整数幂,这一点在上面选择采样点数时可以考虑满足,即使满足不了,可以通过在序列尾部加0完成。
  3. 如果要进行谱分析的模拟信号是周期信号,最好选择观测时间是信号周期的整数倍。如果不知道信号的周期,要尽量选择观测时间长一些,以减少截断效应的影响。
  4. 用FFT对模拟信号作谱分析是一种近似的谱分析。首先一般模拟信号(除周期信号外)的频谱是连续频谱,而用FFT作谱分析得到的是数字谱,因此应该取FFT的点数多一些,用它的包络作为模拟信号的近似谱。另外,如果模拟信号不是严格的带限信号,会因为频谱混叠现象引起谱分析的误差,这种情况下可以预先将模拟信号进行预滤,或者尽量将采样频率取高一些。
  5. 一般频率混叠发生在折叠频率附近,分析时要注意因频率混叠引起的误差。最后要注意一般模拟信号是无限长的,分析时要截断,截断的长度和分辨率有关,但也要尽量取长一些,取得太短因截断引起的误差会很大。举一个极端的例子,一个周期性正弦波,如果所取观察时间太短,例如取小于一个周期,它的波形和正弦波相差太大,肯定误差很大,但如果取得长一些,即使不是周期的整倍数,这种截断效应也会小一些。

三、实验步骤及内容

  1. 复习DFT的定义、性质和用DFT作谱分析的有关内容。

  2. 复习FFT算法原理与编程思想。

  3. 编制信号产生程序,产生以下典型信号供谱分析用:
    在这里插入图片描述
    在这里插入图片描述

  4. 分别以变换区间N = 8 ,16 ,32 ,对x1(n)进行FFT,画出相应的幅频特性曲线。

  5. 分别以变换区间N = 8 ,16,对x2(n)、x3(n)进行FFT,画出相应的幅频特性曲线。

  6. 分别以变换区间 N = 4 ,8 ,16 ,对x4(n)进行FFT,画出相应的幅频特性曲线。

  7. 分别对模拟信号x5(t)、x6(t)选择采样频率和采样点数。

  8. 分别将模拟信号x5(t)、x6(t)转换成序列,用 x5(t)、x6(t) 表示,再分别对它们进行FFT,并画出相应的幅频特性曲线。

四、实验代码及图像结果

  1. 分别以变换区间N = 8 ,16 ,32 ,对x1(n)进行FFT
    matlab程序:
x1=[1,1,1,1];           
x2=[1,2,3,4,4,3,2,1];  
x3=[4,3,2,1,1,2,3,4]; 
figure; 
subplot(3,1,1);   stem(abs(fft(x1,8)));    title('x1,  N=8');
subplot(3,1,2);   stem(abs(fft(x1,16)));   title('X1,  N=16');  
subplot(3,1,3);   stem(abs(fft(x1,32)));   title('X1,  N=32');
figure; 
subplot(2,2,1);   stem(abs(fft(x2,8)));    title('X2(k),  N=8');
subplot(2,2,3);   stem(abs(fft(x3,8)));     title('X3(k),  N=8');
subplot(2,2,2);   stem(abs(fft(x2,16)));    title('X2(k),  N=16');
subplot(2,2,4);   stem(abs(fft(x3,16)));    title('X3(k),  N=16');



相应的幅频特性曲线:
在这里插入图片描述
在这里插入图片描述

  1. 分别以变换区间 N = 4 ,8 ,16 ,对x4(n)进行FFT
    matlab程序:
n4=0:3;   
x4=cos(n4*pi/4);
figure; 
subplot(3,1,1);   stem(abs(fft(x4,4)));  title('X4(k),N=4');
n4=0:7;   
x4=cos(n4*pi/4);
subplot(3,1,2);   stem(abs(fft(x4,8)));   title('X4(k),  N=8');  
n4=0:15;   
x4=cos(n4*pi/4);
subplot(3,1,3);   stem(abs(fft(x4,16)));   title('X4(k),  N=16');

相应的幅频特性曲线:
在这里插入图片描述

  1. 分别对模拟信号x5(t)、x6(t)选择采样频率和采样点数
    matlab程序:
f=100; fs=400; 
tp=0.5/f; N1=tp*fs;  t=(0:N1-1)/fs;  x51=sin(2*pi*f*t+pi/8); 
tp=1/f;   N2=tp*fs;  t=(0:N2-1)/fs;  x52=sin(2*pi*f*t+pi/8);
tp=2/f;   N3=tp*fs;  t=(0:N3-1)/fs;  x53=sin(2*pi*f*t+pi/8); 
figure; 
subplot(2,3,1); stem(x51); title('x5,  Tp=0.5T');  
n=0:N1-1;
subplot(2,3,4);stem(fs*n/N1,abs(fft(x51,N1))); title('x5 FFT,  Tp=0.5T');
subplot(2,3,2); stem(x52); title('x5,  Tp=T'); 
n=0:N2-1;
subplot(2,3,5); stem(fs*n/N2,abs(fft(x52,N2))); title('x5 FFT,  Tp=T');
subplot(2,3,3); stem(x53); title('x5,  Tp=2T');  
n=0:N3-1;
subplot(236); stem(fs*n/N3,abs(fft(x53,N3))); title('x5  FFT,  Tp=2T');

相应的幅频特性曲线:
在这里插入图片描述

  1. 分别将模拟信号x5(t)、x6(t)转换成序列,用 x5(t)、x6(t) 表示,再分别对它们进行FFT
    matlab程序:
fs=64;
t=(0:15)/fs;  x61=cos(8*pi*t)+ cos(16*pi*t)+ cos(20*pi*t);
t=(0:31)/fs;  x62=cos(8*pi*t)+ cos(16*pi*t)+ cos(20*pi*t);
t=(0:63)/fs;  x63=cos(8*pi*t)+ cos(16*pi*t)+ cos(20*pi*t); 
figure; 
subplot(2,3,1); stem(x61); title('x6,  N=16'); 
N1=16;  n=0:N1-1;
subplot(2,3,4);stem(fs*n/N1,abs(fft(x61,N1))); title('x6  FFT,  N=16');
subplot(2,3,2); stem(x62); title('x6,  N=32');
N2=32;  n=0:N2-1;
subplot(2,3,5); stem(fs*n/N2,abs(fft(x62,N2))); title('x6 FFT,  N=32');
subplot(2,3,3); stem(x63); title('x6,  N=64');
N3=64;  n=0:N3-1;
subplot(2,3,6); stem(fs*n/N3,abs(fft(x63,N3))); title('x6  FFT,  N=64');

相应的幅频特性曲线:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于matlab和FFT算法实现信号频谱分析 的相关文章

  • 在 Matlab 中将绘图从高斯混合变换为均匀分布

    考虑以下抽签2x1Matlab 中的向量 其概率分布是两个高斯分量的混合 P 10 3 number draws v 1 First component mu a 0 0 5 sigma a v 0 0 v Second component
  • 一次分配多个字段的聪明方法?

    由于遗留函数调用 我有时被迫编写像这样的丑陋的包装器 function return someWrapper someField a someField a b someField b and so on realistically it
  • 将此 MATLAB 代码转换为 Python 时我做错了什么?

    我正在努力将生成波形的 MATLAB 代码转换为 Python 就上下文而言 这是原子力显微镜带激发响应的模拟 与代码错误无关 在 MATLAB 中从 r vec 生成的图形与我在 Python 中生成的图形不同 我是否正确地将 MATLA
  • 图像堆栈的最大强度投影

    我正在尝试重新创建该功能 max array 3 来自 MatLab 它可以获取 N 个图像的 300x300px 图像堆栈 我在这里说 图像 因为我正在处理图像 实际上这只是一个大的双数组 300x300xN 并创建一个 300x300
  • 如何在Matlab中自定义轮廓线?

    我正在准备一个等高线图 我应该在其中突出显示特定级别的等高线 例如 我的轮廓线值位于 1 和 1 之间 我想突出显示与值 0 相对应的线 我尝试使用以下过程来执行此操作 M c contourf longitude latitude del
  • Matlab:如何显示数组的“真实”值?

    我有一个在脚本中计算的向量 计算后 我将值显示到命令窗口 显示如下 finalResults 1 0e 05 0 0001 0 0 0005 0 0002 0 0001 0 0027 0 0033 0 0001 0 0000 0 0000
  • 计算数组中接下来的 n 个元素的乘积

    我想计算下一个的乘积n矩阵的相邻元素 号码n要相乘的元素数应在函数的输入中给出 例如 对于此输入 我应该从第一个开始计算每 3 个连续元素的乘积 p ind max product 1 2 2 1 3 1 3 这给出了 1 2 2 2 2
  • Matlab PARFOR 循环可以通过编程方式打开/关闭吗?

    有一个关于 MATLAB 中 parfor 的简单问题 我想在程序中设置一个标志 以便在 parfor 和常规 for 循环之间进行更改 基本上 我需要此功能 以便我的代码的某些部分可以在 调试 模式下更新图形 然后当关闭该标志时 使用 p
  • Matlab中转换数据类型的有效方法(double vs. im2double)

    我想将真彩色图像转换为双精度 据我所知有两种方法可以做到这一点 double rgb img im2double rgb img 哪一种效率更高 谢谢 他们都是不同的 im2double将图像的范围转换为0 1如果数据类型是uint8 or
  • MATLAB 中的多个捕获组

    我有一个包含数字或字母的字符串a 可能紧随其后的是r or l 在 MATLAB 中 以下正则表达式返回为 gt gt regexp 10r 0 9 a l r match ans 10r 我希望10 and r分开 因为我有两个捕获组 有
  • MATLAB - 如何将子图一起缩放?

    我在一张图中有多个子图 每个图的 X 轴是相同的变量 时间 每个图上的 Y 轴都不同 无论是它所代表的内容还是数据的大小 我想要一种同时放大所有图的时间尺度的方法 理想情况下 可以在其中一张图上使用矩形缩放工具 并让其他图相应地更改其 X
  • 如何在 Matlab 中对数组应用低通或高通滤波器?

    有没有一种简单的方法可以将低通或高通滤波器应用于 MATLAB 中的数组 我对 MATLAB 的强大功能 或数学的复杂性 有点不知所措 需要一个简单的函数或一些指导 因为我无法从文档或网络搜索中找到答案 看着那 这filter http w
  • 使用 MATLAB 进行线路跟踪

    我有一个图像 我想将其转换为逻辑图像 包括线条为黑色 背景为白色 当然 可以使用阈值方法来实现这一点 但我不想使用这种方式来做到这一点 我想通过使用线路跟踪方法或类似的方法来检测它 这是关于视网膜血管检测的 我找到了一个article ht
  • MATLAB 特征函数

    我很好奇哪里可以找到完整的描述FEATURE功能 它接受哪些论点 没有找到文档 我只听说过memstats and getpid 还要别的吗 gt gt which feature built in undocumented 注意 更完整的
  • 在 Matlab 中将 datenum 转换为 datetime 的最快方法

    我在 Matlab 中将 datenum 转换为 datetime 时遇到问题 Given dnum floor now floor now 1 我尝试了以下方法 datenum dnum 但这没有用 我发现有效的方法是 datetime
  • Matlab:如何更改矩阵的存储方式?从 1x1x3 到 1x3?

    我目前有 val 1 0 7216 val 2 0 7216 val 3 0 7216 但我想要 0 7216 0 716 0 721 我可以做什么样的操作来做到这一点 The reshape函数将在这里解决问题 Arrange the e
  • 括号中的波形符字符

    在 MATLAB 中 以下代码执行什么操作 m func returning matrix 波浪号运算符 的作用是什么 在 Matlab 中 这意味着不要将函数中相应的输出参数分配到赋值的右侧 因此 如果func returning mat
  • 黑白随机着色的六角格子

    我正在尝试绘制一个 10 000 x 10 000 随机半黑半白的六边形格子 我不知道如何将该格子的六边形随机填充为黑色和白色 这是我真正想要从这段代码中得到的示例 但我无法做到 https i stack imgur com RkdCw
  • 访问图像的 Windows“标签”元数据字段

    我正在尝试进行一些图像处理 所以现在我正在尝试读取图像 exif 数据 有 2 个内置函数可用于读取图像的 exif 数据 问题是我想读取图像标签 exifread and imfinfo这两个函数都不显示图像标签 Is there any
  • 有效地绘制大时间序列(matplotlib)

    我正在尝试使用 matplotlib 在同一轴上绘制三个时间序列 每个时间序列有 10 6 个数据点 虽然生成图形没有问题 但 PDF 输出很大 在查看器中打开速度非常慢 除了以栅格化格式工作或仅绘制时间序列的子集之外 还有其他方法可以获得

随机推荐

  • CAP和BASE理论

    CAP理论 CAP是 Consistency Availability Partition tolerance 三个词语的缩写 分别表示一致性 可用性 分区容忍性 它指出一个分布式计算系统不可能同时满足以下三点 一致性 Consistenc
  • 小白学PYTHON时最容易犯的6个错误,看看你遇到过几个

    最近又在跟之前的同学一起学习python 一起进步 发现很多测试同学在初学python的时候很容易犯一些错误 特意总结了一下 其实这些错误不仅是在学python时会碰到 在学习其他语言的时候也同样会碰到 错误1 缩进 python是强制缩进
  • GET 和 POST的区别? 用POST方法发送登陆请求

    GET 和 POST的区别 用POST方法发送登陆请求 lt 1 gt http方法 http协议定义了很多方法对应不同的资源操作 其中最常用的是GET 和 POST 方法 GET POST OPTIONS HEAD PUT DELETE
  • 什么是计算机网络中的127.0.0.1 IP地址或Localhost?

    IP addresses are used to specify the hosts in a numeric way There are different types of IP addresses in Computer networ
  • 听说渲影很便宜,是真的吗?

    这次我比较了3个平台 炫云 渲影和渲染100 首先说结论 渲影是很便宜 但也没便宜过渲染100 而且出图大小有猫腻 具体的往下看 首先我选取了一个219M的场景 不是很大 设置的分辨率是3200 4000 提交3个平台的时候选择的参数也一样
  • 《C++标准库》学习笔记 — STL — 并发 — 线程同步与并发 — mutex 与 lock

    C 标准库 学习笔记 STL 并发 线程同步与并发 mutex 与 lock 一 线程同步与并发并发问题 1 出错情况 1 未同步化的数据访问 2 写至半途的数据 3 重新安排的语句 2 解决问题需要的特性 3 C 并发的支持 二 Mute
  • C#中仿QQ截图

    欢迎大家提出意见 一起讨论 转载请标明是引用于 http blog csdn net chenyujing1234 代码 VS2008 http www rayfile com zh cn files bad4b357 978a 11e1
  • cmake使用教程(七)-流程和循环

    cmake系列使用教程 cmake使用教程 一 起步 cmake使用教程 二 添加库 cmake使用教程 三 安装 测试 系统自检 cmake使用教程 四 文件生成器 cmake使用教程 五 cpack生成安装包 cmake使用教程 六 蛋
  • TVS管原理和特性

    介绍TVS管的资料太多 中文的也有非常多 不过大多数的都是翻译的 在文章最后有所有文件的目录和下载 这里主要介绍原理特性和参数 然后画一些时间分析一下散热选取 最后把PCB总结一下 瞬态二极管 TVS Transient Voltage S
  • JavaWeb实现记住密码功能(使用Cookie)

    JavaWeb实现记住密码功能 使用Cookie 1 Cookie知识点 cookie介绍 背景 HTTP协议作是 状态协议 状态指每次request请求之前是相互独 的 当前请求 并不会记录它的上 次请求信息 存在这样的问题 既然 状态
  • 内联函数

    引入内联函数的目的是为了解决程序中函数调用的效率问题 函数是一种更高级的抽象 它的引入使得编程者只关心函数的功能和使用方法 而不必关心函数功能的具体实现 函数的引入可以减少程序的目标代码 实现程序代码和数据的共享 但是 函数调用也会带来降低
  • 【实践经验】cp 错误:cannot create regular file ‘../../src/ood1.jpg‘: No such file or directory

    今日在linux拷贝文件的时候 出现这个错误感觉很奇怪 命名目标目录是存在的 但是为什么会报错呢 其实出现这个问题的原因是 你所看到的目录结构可能不是真正的目录结构 比如我在拷贝的时候执行的命令是 cp 806252c538fffb0948
  • uniapp App调试及更新

    uniapp App专题 本章主要对App的调试方式 虚拟机 物理机 安装及更新方面进行总结 连接设备进行调试 准备工作 首先需要打开设备的开发者模式 设置中找到版本号 连续点击版本号直到出现提示 您现在已处于开发者模式 点击进入开发者选项
  • CocosCreator中的Prefab文件格式总结

    CocosCreator所有的Prefab都是以下类似的格式 我们学会用文本编辑器查看Prefab文件 可以帮助我们更轻松的查找节点 查看节点和组件信息 批量修改节点和组件信息等等 因为在文本编辑器中的Prefab文件才是原始的 而且Coc
  • 【clion】实现类似自定义代码自动补全的功能(懒人利器)

    比如我有句代码是经常要使用的 如下 freopen Users zhangkanqi Desktop 11 txt r stdin 但是自动补全里并没有这句话 网上也没有找到如何自定义自动补全的语句 学艺不精 可是我每次又懒得写这句话 因为
  • Java数据存储类型ArrayList、HashSet、HashMap、LinkedList使用不同遍历方法效率研究By Python

    Java不同数据存储类型使用不同遍历方法效率研究 GitHub代码仓库 数据存储类型 ArrayList HashSet HashMap LinkedList 遍历方法 传统遍历方法 for int i 0 i
  • 设计模式(三)工厂方法模式

    前一篇文章介绍了简单工厂模式 留下了一个疑问 如果需要扩展员工等级 有没有不修改既有接口的方式 答案就是工厂方法模式 既然员工的职级可以扩展 那创建对应职级员工的工厂是不是也可以扩展 工厂基类提供一个接口获取具体的产品 一旦有新的产品 就创
  • C++ day7

    简单vector include
  • CGAL 二维点集的凸包提取

    目录 一 凸包 二 代码实现 三 结果展示 一 凸包 用不严谨的话来讲 给定二维平面上的点集 凸包就是将最外层的点连接起来构成的凸多边形 它能包含点集中所有的点 百度百科 凸包 二 代码实现 include
  • 基于matlab和FFT算法实现信号频谱分析

    系列文章目录 数字信号处理 DSP Digital Signal Process 是电子通信领域非常重要的研究方向 博主汇总了数字信号处理 DSP 中常用的经典案例分析 主要基于算法分析 MATLAB程序实现 信号图像显示 对数字信号处理的