MATLAB学习:频谱图的绘制

1.概述

时域信号经FFT变换后得到了频谱,在作图时还必须设置正确的频率刻度,这样才能从图中得到正确的结果。

2.案例分析

下面透过一个简单的例子来分析频谱图中频率刻度(横坐标)的设置的重要性。一余弦信号,信号频率为30Hz,采样频率100Hz,信号长128,在FFT后做谱图,代码如下:

clear; clc; close all;
fs=128;                         % 采样频率
N=128;                          % 信号长度
t=(0:N-1)/fs;                   % 时间序列
y=cos(2*pi*30*t);               % 余弦信号
Y=fft(y,N);                     % FFT
f=linspace(0,64,64);
plot(f,abs(Y(1:64)),'k');
% xlim([25 35]);
xlabel('频率(Hz)'); ylabel('幅值');

谱分析后,最大值谱线应该在30Hz处。从图中看到得到的最大值谱线在30Hz与31Hz之间为30.47Hz,这表明信号不是30Hz的正弦信号,其频率在30Hz与31Hz之间,这明显不符合初始设置。发生这种错误的原因是频率刻度的设置错误。

3.解决方法

当N为偶数和N为奇数时频率刻度的设置方法稍有不同。这里讨论N为偶数和奇数的情况。

clear all; clc; close all;
fs=128;                         % 采样频率
N=128;                          % 信号长度
t=(0:N-1)/fs;                   % 时间序列
y=cos(2*pi*30*t);               % 余弦信号
y=fft(y,N);                     % FFT
freq=(0:N/2)*fs/N;              % 按式(2-2-6c)设置正频率刻度 
% 作图
plot(freq,abs(y(1:N/2+1)),'k')
xlabel('频率(Hz)'); ylabel('幅值');
title('频谱图')
set(gcf,'color','w');

运行程序后,图中频率刻度符合式(2-2-6),只用了正频率来表示。本例中用的信号与案例分析中用的信号是相同的,但从图2-2-3中可看到,最大值的谱线在30Hz处,与信号设置频率一致。但是此时的频率对了但是其幅值无法体现信号的真实幅值因此需要进一步的处理。

关键部分代码如下:

function Hutu_FFT(data, fs)
N=length(data);
fft_data=fft(data);
if mod(N, 2) == 1
freq=(0:N/2)*fs/N;
magY=abs(fft_data(1:N/2+1))*2/N;
plot(freq,magY,'k');
 else
freq=(0:(N-1)/2)*fs/N;
magY=abs(fft_data(1:(N-1)/2+1))*2/N;
plot(freq,magY,'k');
end
set(gca,'FontWeight','normal','LineWidth',0.8, ...
    'XMinorTick','off','XGrid','on','YGrid','on','YMinorTick','off','GridLineStyle', '--',...
    'FontSize',10,'FontAngle','normal' ,'FontSmoothing','on') 
title('\fontname{宋体}频谱图')                                                  %标题
xlabel('\fontname{宋体}频率/\fontname{Times new roman}\it{Hz}');                 %x轴标签
ylabel('\fontname{宋体}幅值/\fontname{Times new roman}\it{mm}');                %y轴标签
end

本人编写画频谱图函数的使用说明

clear; clc; close all;
fs=128;                         % 采样频率
N=128;                          % 信号长度
t=(0:N-1)/fs;                   % 时间序列
y=cos(2*pi*30*t);               % 余弦信号
Y=fft(y,N);                     % FFT
f=linspace(0,64,64);
figure;Hutu_FFT(y, fs)

使用本人编写的频谱图函数的效果图,可看出可以较好得到信号所在的频率和幅值相关信息

获取代码请关注MATLAB科研小白的个人公众号(即文章下方二维码),并回复频谱图的绘制本公众号致力于解决找代码难,写代码怵。各位有什么急需的代码,欢迎后台留言~不定时更新科研技巧类推文,可以一起探讨科研,写作,文献,代码等诸多学术问题,我们一起进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/645971.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【STM32单片机】----实现LED灯闪烁实战

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…

1.6 什么是程序-编译与调试

目录 1 程序的作用 2 新建项目及编译运行 2.1 新建项目 2.2 HelloWorld 程序说明 2.3 printf 打印输出 2.4 注释 3 程序的编译过程及项目位置 4 断点及调试窗口设置 5 学习C语言后的境界 1 程序的作用 如下图所示,我们编写了一个可以做加法的程序&#xf…

【机器学习-23】关联规则(Apriori)算法:介绍、应用与实现

在现代数据分析中,经常需要从大规模数据集中挖掘有用的信息。关联规则挖掘是一种强大的技术,可以揭示数据中的隐藏关系和规律。本文将介绍如何使用Python进行关联规则挖掘,以帮助您发现数据中的有趣模式。 一、引言 1. 简要介绍关联规则学习…

Python编程之调试魔法与列表逆转之谜

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、调试魔法:揭开Python编程的神秘面纱 代码调试实例 二、列表逆转之谜&#…

图书管理系统——Java版

找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏:JavaSE 顺序表的学习,点我 目录 图书管理系统菜单 基本框架: 书: 书架: 用户&#xff…

JavaEE初阶多线程 (5)

1.锁的策略 1.1锁的策略是什么 这个锁的策略可以理解为,一种做法,相当于当你遇到锁竞争,加锁解锁,的情况你会怎么做。 乐观锁可以理解为疫情的时候比较乐观就买了最基本的物资, 买的时候非常方便 1.2乐观锁 当效率…

web及网络基础图文详解

目录 1.1TCP/IP 协议族 1.2TCP/IP 的分层管理 1.3TCP/IP通信传输流 1.4 与 HTTP 关系密切的协议 : IP、TCP 和 DNS (1)负责传输的 IP协议(网络层) (2)确保可靠的 TCP协议(传输层&#xff…

2024/5/26周报

文章目录 摘要Abstract文献阅读题目创新点方法网络架构LSTM 实验过程Data acquisitionData preprocessingAlgorithm parameter settingsModels evaluation 实验结果 深度学习ARIMA一、ARIMA模型的基本思想二、ARIMA模型的数学表达式三、差分过程 总结 摘要 本周阅读了一篇基于…

Aya 23 是 Cohere For AI 推出的一款最先进的新型多语言开放重量模型

相信一些对LLM关注较高的同学们,应该对这家加拿大的Cohere不会太陌生。毕竟此前,它就开源过 Aya 101 和 Command R 这两款大模型。 Cohere 的非营利性研究实验室 Cohere for AI 发布了 Aya 23,这是其多语言大型语言模型 (llm&…

计算机毕业设计 | SpringBoot社区物业管理系统 小区管理(附源码)

1, 概述 1.1 课题背景 近几年来,随着物业相关的各种信息越来越多,比如报修维修、缴费、车位、访客等信息,对物业管理方面的需求越来越高,我们在工作中越来越多方面需要利用网页端管理系统来进行管理,我们…

就业班 第三阶段(ELK) 2401--5.20 day1 ELK 企业实战 ES+head+kibana+logstash部署(最大集群)

ELKkafkafilebeat企业内部日志分析系统 1、组件介绍 1、Elasticsearch: 是一个基于Lucene的搜索服务器。提供搜集、分析、存储数据三大功能。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的&#xff…

力扣HOT100 - 287. 寻找重复数

解题思路: 快慢指针 第一步,慢指针每次移动一步,快指针每次移动两步,直到它们相遇。这一步保证了它们在环中相遇。 接下来,将其中一个指针(快指针或慢指针)重置到起点(即数组的第一…

IP数据云确认参展2024 ChinaJoy BTOB与诸位共展未来!

作为在全球数字娱乐领域兼具知名度与影响力的年度盛会,2024年第二十一届ChinaJoy BTOB将于7月26日至7月28日在上海新国际博览中心盛大召开,秉承着初心“游”在,精彩无限!(英译:Stay True, Game On.&#xf…

数据库攻防之MySQL

MySQL 是最流行的关系型数据库,与此同时也是 web 应用中最好的关系型数据库管理应用软件。我们在渗透过程中碰到的 PHP 站点大部分都会搭配 MySQL 数据库,因此它是红队攻防中最常遇到的数据库。 0x01 MySQL简介 MySQL 是典型的关系型数据库,…

Gradle筑基——Gradle Maven仓库管理

基础概念: 1.POM pom:全名Project Object Model 项目对象模型,用来描述当前maven项目发布模块的基础信息 pom主要节点信息如下: 配置描述举例(com.android.tools.build:gradle:4.1.1)groupId组织 / 公司的名称com.…

Linux-之 简易:Shell编程

1 为什么要学习Shell编程 对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些Shel脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本. 对于大数据程序员来说,需要编写Shell程序来管理集群 2 Shell是什么 Shell是一个命令行解释器&#xff…

AIGC 005-Dreambooth定制化生成,微调文本到图像的扩散模型!

AIGC 005-Dreambooth定制化生成,微调文本到图像的扩散模型! 文章目录 0 论文工作1 论文方法2 效果 0 论文工作 DreamBooth 论文 (DreamBooth: Fine-Tuning Text-to-Image Diffusion Models for Subject-Driven Generation) 提出了一种新颖的技术&#x…

AI视频教程下载:用提示工程在GPT商店构建10个GPTs

你将学到什么? 深入了解ChatGPT平台和GPT商店的生态系统。 开发为多样化应用定制GPT模型的专业知识。 掌握高效内容生成的AI自动化技术。 学习高级提示工程以优化ChatGPT输出。 获取构建AI驱动的数字营销和广告解决方案的技能。 了解如何为SEO写作和优化创建专…

iOS--锁的学习

iOS--锁的学习 锁的介绍线程安全 锁的分类自旋锁和互斥锁OSSpinLockos_unfair_lockpthread_mutexpthread_mutex的属性 NSLockNSRecursiveLockNSConditionNSConditionLockdispatch_semaphoredispatch_queuesynchronizedatomicpthread_rwlock:读写锁dispatch_barrier_…

S1E45:单链表1 课后作业

测试题:0. 相比起数组来说,单链表具有哪些优势呢? 答:长度非固定,可以申请添加长度 答案:对于数组来说,随机插入或者删除其中间的某一个元素,都是需要大量的移动操作,而…