MATLAB利用FFT对信号进行频谱分析

2023-10-30

1.实验目的

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

(2)熟悉FFT算法原理和FFT程序的应用。

(3)学习利用FFT对离散时间信号进行频谱分析的方法,了解可能出现的误差及其原因,以便在实际中正确应用FFT。

2.实验原理

用FFT对信号作频分析是学习数字信号处理的重要内容,经常需要进行分析的信号是模拟信号的时域离散信号。对信号进行谱分析的重要问题是频谱分辨率D和分析误差。当N较大时,离散谱的包络才能逼近连续谱,因此N要适当选择大一些。

3.运行结果

图1 x1(n)时域波形及幅频特性曲线

图2 x2(n)时域波形及幅频特性曲线

图3 x3(n)时域波形及幅频特性曲线

图4 x4(n)时域波形及幅频特性曲线

图5 x5(n)时域波形及幅频特性曲线

图6 x6(n)时域波形及幅频特性曲线

图7 x(n)=x4(n)+jx5(n)时域波形及幅频特性曲线

附:程序代码

(1)

ns=0;

nf=4;

n1=0;

n2=10;

n=[n1:n2];

x=stepseq(ns,n1,n2)-stepseq(nf,n1,n2);

subplot(3,1,1);

stem(n,x);

title('矩形序列R4(n)');

X1_8=fftshift(fft(x,8));

subplot(3,1,2);

stem(abs(X1_8));

title('N=8');

X1_16=fftshift(fft(x,16));

subplot(3,1,3);

stem(abs(X1_16));

title('N=16');

function [x,n]=stepseq(n0,n1,n2)

if n0<n1||n0>n2||n1>n2

    error('参数须满足n1<=n0<=n2');

end

n=[n1:n2];

x=[(n-n0)>=0];

end

(2)

n1=0;

n2=20;

n=[n1:n2];

x=zeros(1,n2-n1+1);

for i=1-n1:n2-n1+1

    if 0<=n(i)&&n(i)<=3

        x(i)=n(i)+1;

    end

    if 4<=n(i)&&n(i)<=7

        x(i)=8-n(i);

    end

end

subplot(3,1,1);

stem(n,x);

title('函数x2(n)');

X8=fftshift(fft(x,8));

subplot(3,1,2);

stem(abs(X8));

title('N=8');

X16=fftshift(fft(x,16));

subplot(3,1,3);

stem(abs(X16));

title('N=16')

(3)

n1=0;

n2=20;

n=[n1:n2];

x=zeros(1,n2-n1+1);

for i=1-n1:n2-n1+1

    if 0<=n(i)&&n(i)<=3

        x(i)=4-n(i);

    end

    if 4<=n(i)&&n(i)<=7

        x(i)=n(i)-3;

    end

end

subplot(3,1,1);

stem(n,x);

title('函数x3(n)');

X8=fftshift(fft(x,8));

subplot(3,1,2);

stem(abs(X8));

title('N=8');

X16=fftshift(fft(x,16));

subplot(3,1,3);

stem(abs(X16));

title('N=16')

(4)

n1=0;

n2=31;

n=[n1:n2];

x=zeros(1,n2-n1+1);µ

for i=1-n1:n2-n1+1

    if 0<=n(i)&&n(i)<=31

        x(i)=cos(pi*n(i)/8);

    end

end

subplot(3,1,1);

stem(n,x);

title('函数x4(n)');

X16=fftshift(fft(x,16));

subplot(3,1,2);

stem(abs(X16));

title('N=16');

X32=fftshift(fft(x,32));

subplot(3,1,3);

stem(abs(X32));

title('N=32')

(5)

n1=0;

n2=31;

n=[n1:n2];

x=zeros(1,n2-n1+1);

for i=1-n1:n2-n1+1

    if 0<=n(i)&&n(i)<=31

        x(i)=sin(pi*n(i)/8);

    end

end

subplot(3,1,1);

stem(n,x);

title('函数x5(n)');

X16=fftshift(fft(x,16));

subplot(3,1,2);

stem(abs(X16));

title('N=16');

X32=fftshift(fft(x,32));

subplot(3,1,3);

stem(abs(X32));

title('N=32')

(6)

fs=64;

N1=16;

N2=32;

N3=64;

delta_t=1/fs;

t=0:delta_t:(N3-1)*delta_t;

t1=0:delta_t/10:(N3-1)*delta_t;

x6=cos(8*pi*t)+cos(16*pi*t)+cos(20*pi*t);

x6_t=cos(8*pi*t1)+cos(16*pi*t1)+cos(20*pi*t1);

x6_1=fftshift(fft(x6,N1));

x6_2=fftshift(fft(x6,N2));

x6_3=fftshift(fft(x6,N3));

subplot(5,1,1);

plot(t1,x6_t);

title('时域信号x6(t)');

subplot(5,1,2);

stem(t,x6);

title('离散序列x6(n)');

subplot(5,1,3);

stem(abs(x6_1));

title('N=16');

subplot(5,1,4);

stem(abs(x6_2));

title('N=32');

axis([0,31,0,20]);

subplot(5,1,5);

stem(abs(x6_3));

title('N=64');

axis([0,63,0,40]);

(7)

n1=0;

n2=31;

n=[n1:n2];

x4=zeros(1,n2-n1+1);

for i=1-n1:n2-n1+1

    if 0<=n(i)&&n(i)<=31

        x4(i)=cos(pi*n(i)/8);

    end

end

x5=zeros(1,n2-n1+1);

for i=1-n1:n2-n1+1

    if 0<=n(i)&&n(i)<=31

        x5(i)=sin(pi*n(i)/8);

    end

end

x7=x4+j*x5;

x7_1=fftshift(fft(x7,16));

x7_2=fftshift(fft(x7,32));

x7_3=fftshift(fft(x7,64));

subplot(4,1,1);

stem(x4);

title('x7(n)的实部部分');

subplot(4,1,2);

stem(abs(x7_1));

title('N=16');

subplot(4,1,3);

stem(abs(x7_2));

title('N=32');

subplot(4,1,4);

stem(abs(x7_3));

title('N=64');

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

MATLAB利用FFT对信号进行频谱分析 的相关文章

  • 使用 python 在网络上部署 matlab 应用程序

    您好 我想使用 python 在网络上部署 matlab 应用程序 有没有办法做到这一点 我已按照数学工作网站上的文档将我的应用程序转换为 jar 文件 java 类 有人能指出我前进的正确方向吗 事实上 您的 Matlab 代码打包为 J
  • 查找数组中元素之间的平均差异的有效方法

    希望标题不会让人困惑 通过例子来展示很简单 我有一个像这样的行向量 1 5 6 我想找到每个元素之间的平均差异 此示例中的差异为 4 和 1 因此平均值为 2 5 这是一个小例子 我的行向量可能非常大 我是 MatLab 新手 那么有没有一
  • Matlab 编辑器不使用 emacs 快捷方式

    Is there some way I can make the matlab integrated editor not use emacs shortcut but use more normal shortcuts such that
  • 这是 `min` 和 `nanmin` 之间的区别; Matlab 中的“max”和“nanmax”?

    Matlab描述nanmin and nanmax像这样 NANMIN最小值 忽略NaNs NANMAX最大值 忽略NaNs 但实际上 min and max ignore NaNs too 那我应该使用哪个 根据我的测试 nanmin a
  • 如何以编程方式指定 MATLAB 编辑器键绑定

    我想将键盘键绑定设置为Windows 默认设置我想在启动时使用startup m因为我希望在大量系统上设置此设置 首选项对话框中的等效设置是 MATLAB gt Keyboard gt Shortcuts gt Active Setting
  • 在 MATLAB 中用两个值替换向量值

    我必须创建一个以向量作为输入的函数v和三个标量a b and c 该函数替换了的每个元素v等于a有一个二元素数组 b c 例如 给定v 1 2 3 4 and a 2 b 5 c 5 输出将是 out 1 5 5 3 4 我的第一次尝试是尝
  • 类方法的自定义代码完成?

    在 MATLAB 中 可以定义代码建议和完成 如标题为 的文档页面中所述 自定义代码建议和完成 https www mathworks com help matlab matlab prog customize code suggestio
  • 傅里叶变换定理 matlab

    我目前正在尝试理解二维傅里叶位移定理 根据我到目前为止所了解到的情况 图像空间中的平移会导致相位差异 但不会导致频率空间中的幅度差异 我试图用一个小例子来演示这一点 但它只适用于行的移位 而不适用于列的移位 这是一个小演示 我只在这里显示幅
  • 同时重新排序和旋转图像的高效方法

    为了快速加载 jpeg 我为turbojpeg 实现了一个 mex wrapper 以有效地将 大 jpeg 读入 MATLAB 对于 4000x3000px 的图像 实际解码只需要大约 120 毫秒 而不是 5 毫秒 然而 像素顺序是 R
  • python 正弦和余弦精度

    如何提高Python正弦和余弦精度 例如 我想使用以下代码 只需计算随机复向量 x 的 y cos acos x import numpy as np N 100000 x np zeros N 1j np zeros N for k in
  • 在 Matlab 中显示有理数

    我有两个整数 m n 它们一起形成 m n 形式的有理数 现在我只想以这种理性的形式在 Matlab 中显示它们 我可以通过这样做来做到这一点 char sym m n 所以 如果 例如m 1 n 2 Matlab将显示1 2 然而 如果m
  • 在 MATLAB 中定义其他中缀运算符

    有没有办法在 MATLAB 中定义额外的中缀运算符 具体来说 我想定义两个中缀运算符 gt and lt gt 这些符号是理想的 但如果需要 它可以是单个字符 它调用函数implies and iff以同样的方式 calls and and
  • 为什么 MATLAB 在打印大量 (.png) 图形时速度会变慢?

    我正在将大量数字打印为 png 文件 每个图都是数据矩阵中的一列图 我获取 png 文件并将它们串在一起形成动画 我的问题是 前几百张图像打印得很快 但创建每个新图形的时间却迅速增加 从前几百个 png 文件的约 0 2 秒到第 800 个
  • MATLAB - GUI 和 OPC 服务器

    我想在 MATLAB 中设计一个图形用户界面 可以使用 MATLAB 的过程控制对象链接和嵌入 OPC 工具箱连续读取数据 我怎样才能实现这个 我已经设计了图形用户界面 但我无法将数据读入图形用户界面 就这样做 type opctoolMA
  • 归一化互相关的基础知识

    我正在尝试使用范数校正2 归一化互相关 http en wikipedia org wiki Cross correlation Normalized cross correlation 来自 MATLAB 用于计算发育中胚胎中移动形状的速
  • 动态调整自定义刻度数

    Taking SO 的一个例子 https stackoverflow com a 7139485 97160 我想根据当前视图调整轴刻度 这是默认行为 除非设置自定义的刻度数 下图展示了由此产生的行为 左侧是默认行为 右侧是带有自定义刻度
  • 直方图均衡结果

    I am trying to code histogram equalization by my self but the results are different from the built in function in matlab
  • 我如何编写一个名为 dedbi 的 MATLAB 函数,它将输入 xtx 作为字符串并返回另一个字符串 xtxx 作为输出。

    dedbi 反转单词 即 a 将被 z 替换 b 将被 y 替换 c 将被 x 替换 依此类推 dedbi 将对大写字母执行相同的操作 即将字符串 A 替换为 Z 将 B 替换为 Y 将 C 替换为 X 依此类推 如果我给函数这个字符串 a
  • 如何正确从表中删除 NaN 值

    在 Matlab 中阅读 Excel 电子表格后 不幸的是 我的结果表中包含了 NaN 例如这个 Excel 表格 将产生此表 其中出现额外的 NaN 列 我尝试使用以下代码片段删除 NaN measurementCells readtab
  • 命令 A(~A) 在 matlab 中的真正作用是什么

    我一直在寻找找到矩阵非零最小值的最有效方法 并在论坛上找到了这个 设数据为矩阵A A A nan minNonZero min A 这是非常短且高效的 至少在代码行数方面 但我不明白当我们这样做时会发生什么 我找不到任何关于此的文档 因为它

随机推荐

  • UNIX环境高级编程(中文第三版)

    UNIX环境高级编程第三版 操作系统神级书 资料收集于网络 如有侵权 请联系我
  • xss靶场第四关过关秘籍

    首先寻找注入点 输入试一哈 结果发现我们输入的 lt gt 被过滤掉了 我们不使用 lt gt l了接下来换一个方法 我们可以将我们的js代码编写到onclick属性中试一哈 弹窗就说明过关了 看一哈在还有没有别的方法 测试后发现构造事件
  • leveldb官方手册摘录

    本文内容摘自leveldb官方手册 版权归其所有 CHAPTER 1 基本概念 leveldb是一个写性能十分优秀的存储引擎 是典型的LSM树 Log Structured Merge Tree 实现 LSM树的核心思想就是放弃部分读的性能
  • 【趣味编程】线型图统计不同字母的数量

    include
  • 深入理解js数组自定义排序sort

    定义和用法 sort 方法用于对数组的元素进行排序 语法 arrayObject sort function nextValue currentValue code 案例 var arr 5 4 3 2 1 6 7 8 9 倒序 arr s
  • dropout层加在哪里_【Keras】减少过拟合的秘诀——Dropout正则化

    摘要 Dropout正则化是最简单的神经网络正则化方法 阅读完本文 你就学会了在Keras框架中 如何将深度学习神经网络Dropout正则化添加到深度学习神经网络模型里 Dropout正则化是最简单的神经网络正则化方法 其原理非常简单粗暴
  • Qt QSettings读写ini时 General 读不出来值

    简述 我有一个配置文件 其中一个组General 怎么都读不出正确的值 全是空 但是别的组能读出来 改General2试试 果然可以 就怀疑是不是组名称被内置了 打开QSettings的帮助文档 搜索General 有内容 看下解释 The
  • Android Service启动方式

    1 启动方式 Service 的启动方式主要有两种 分别是 startService 和 bindService 其中 StartService 使用的是同一个 Service onCreate 只执行一次 onStartCommand 也
  • bios显存改8g rx_玩屏蔽?爆4GB显存版RX480可刷成8GB版

    原标题 玩屏蔽 爆4GB显存版RX480可刷成8GB版 近日多名用户发现通过刷新固件方式将4GB显存的AMD Radeon RX480显卡变成更昂贵的8GB版本 部分4GB版显卡包含和8GB Radeon RX480显卡相同的芯片 只是在B
  • 【转载】OpenCV函数汇总

    一 读入图像 cv2 imread filepath flags filepath 要读入图片的完整路径 flags 读入图片的标志 cv2 IMREAD COLOR 默认参数 读入一副彩色图片 忽略alpha通道 cv2 IMREAD G
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • 关于Linux上面无法读取资源目录下文件的问题

    一开始我的代码是这样子的 读取本地子路径下的json文件 代码运行的时候 在window是可以正常的 Override public String getBannerStr String str try Resource resource
  • 计算机网络面试要点总结

    概述 带宽 网络可通过的最高数据率 即每秒多少比特 宽带 发送速率 宽带线路 每秒有更多的比特注入到线路中 依然是串行传输 电路交换 需要拨号建立连接 专线 浪费资源 分组交换 分组发送 接收组合 存储转发 根据路由表的下一条 协议 语法
  • Java基础(8)面向对象基础

    面向对象是Java最重要的特性 Java是彻底的 纯粹的面向对象语言 在Java中 一切都是对象 本章将介绍面向对象基础知识 1 面向对象概述 面向对象的编程思想 按照真实世界客观事物的自然规律进行分析 客观世界中存在什么样的实体 构建的软
  • FOC中的PARK变换_TI和ST电机控制库的源码实现

    FOC中的Clarke变换 TI和ST电机控制库的源码实现 FOC中的PARK变换 TI和ST电机控制库的源码实现 FOC中的反PARK变换 TI和ST电机控制库的源码实现 park变换 该变换将平衡两相正交平稳系统中的矢量变换为正交旋转坐
  • winows服务器的ftp密码如何修改,windows怎么修改服务器ftp密码

    windows怎么修改服务器ftp密码 内容精选 换一换 华为云帮助中心 为用户提供产品简介 价格说明 购买指南 用户指南 API参考 最佳实践 常见问题 视频帮助等技术文档 帮助您快速上手使用华为云服务 只有运行中的云服务器才允许用户登录
  • 服务器虚拟架构解决方案

    服务器虚拟化的意义 如何才能最大限度的节约建设成本 降低系统管理成本 节约人力投入 在提高老业务系统的性能 还降低新系统的开发部署成本 诸如此类的问题 我想一直是我们所追求的目标 特别是在当前经济发展比较困难的时期 如何才能在有效实现政府
  • Python读取大文件与内存占用检测(常用的分步调试pdb)

    大文件读取问题 顺便记录一下vim的配置 https blog csdn net sinat 33741547 article details 74781591 https blog csdn net zwbill article deta
  • bp神经网络算法步流程_MATLAB BP神经网络的非线性系统建模非线性函数拟合

    点击上方蓝字关注 公众号 MATLAB BP神经网络的非线性系统建模 非线性函数拟合 在实际工程应用中会遇到一些复杂的非线性系统 这些系统方程复杂 难以用数学方法建模 在这种情况下 可以使用BP神经网络表达这些非线性系统 该方法把位置系统看
  • MATLAB利用FFT对信号进行频谱分析

    1 实验目的 1 进一步加深DFT算法原理和基本性质的理解 因为FFT只是DFT的一种快速算法 所以FFT的运算结果必然满足DFT的基本性质 2 熟悉FFT算法原理和FFT程序的应用 3 学习利用FFT对离散时间信号进行频谱分析的方法 了解