MATLAB学习:频谱图的绘制

news2024/11/19 7:40:31

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AtCoder Beginner Contest 354 (ABCDEFG题)视频讲解

2024年5月19日补充G题。 A - Exponential Plant Problem Statement Takahashi is growing a plant. Its height at the time of germination is 0 c m 0\,\mathrm{cm} 0cm. Considering the day of germination as day 0 0 0, its height increases by 2 i c m 2^i\,\mat…

AWS迁移与传输之AMS/MGN

AWS Application Migration Service(AWS Application Migration Service简称为AWS MGN,MGN是migration的缩写。)是一项全面的迁移服务,旨在帮助企业将其本地服务器和虚拟机迁移到云端,包括AWS和VMware Cloud on AWS。 …

Bugku Crypto 部分题目简单题解(四)

目录 python_jail 简单的rsa 托马斯.杰斐逊 这不是md5 进制转换 affine Crack it rsa python_jail 启动场景 使用虚拟机nc进行连接 输入print(flag) 发现报错,经过测试只能传入10个字符多了就会报错 利用python中help()函数,借报错信息带出flag变…

海康威视NVR通过ehome协议接入视频监控平台,视频浏览显示3011超时错误的问题解决,即:The request timeout! 【3011】

目录 一、问题描述 二、问题分析 2.1 初步分析 2.2 查看日志 2.3 问题验证 1、查看防火墙 2、查看安全组 3、问题原因 三、问题解决 3.1 防火墙开放相关端口 3.2 安全组增加规则 3.3 测试 1、TCP端口能够联通的情况 2、TCP端口不能够联通的情况 四、验证 五、云…

.DS_store文件

感觉mac里的这个.DS_store文件烦人,老是莫名其妙的出现,然后造成困扰 处理方式如下: import os pic_list os.listdir("./mask_pic/") print(len(pic_list)) # 从文件夹中删掉 if(".DS_Store" in pic_list):print(&quo…

orin部署tensorrt、cuda、cudnn、pytorch

绝大部分参考https://blog.csdn.net/qq_41336087/article/details/129661850 非orin可以参考https://blog.csdn.net/JineD/article/details/131201121 报错显卡驱动安装535没法安装、原始是和l4t-cuda的部分文件冲突 Options marked [*] produce a lot of output - pipe it th…

webstorm新建vue项目相关问题

前言 这个迭代后端需求偏少,前端code的键盘都起火星子了。来了4个外包支持,1个后端3个前端,还是不够用啊。刚好趁这个机会稍微学习下vue,其实之前环境也配置过了,所以这里就不分享环境配置了,主要分享下新建…

R可视化:可发表的Y轴截断图

Y轴截断图by ggprism Y轴截断图by ggprism 介绍 ggplot2绘制Y轴截断图by ggprism加载R包 knitr::opts_chunk$set(message = FALSE, warning = FALSE)library(tidyverse) library(ggprism) library(patchwork)rm(list = ls()) options(stringsAsFactors = F) options(future.…

【全开源】分类记账小程序系统源码(ThinkPHP+FastAdmin+UniApp)

基于ThinkPHPFastAdminUniAppvk-uView-uiVue3.0开发的一款支持多人协作的记账本小程序,可用于家庭,团队,组织以及个人的日常收支情况记录,支持周月年度统计。 :智能管理您的财务生活 一、引言:财务智能化…

云计算中的弹性计算是什么?

弹性计算在管理云计算中的云服务器方面起着举足轻重的作用。顾名思义,弹性计算服务为云服务提供商提供了扩展和缩减计算资源(如内存、带宽、基础架构等)的能力。此功能可使用监控自动快速扩展资源以满足业务的不同需求工具。 本文 德迅云安全…

十五、Python模块(入门一定看!!!)「长期更新Python简单入门到适用」

首先什么是模块? 小伙伴们经常看我写的教程不难发现,前面我们用过几次模块就是sys的那个,其实python不仅标准库中包含了大量的模块(也被称之为准模块),还有大量的第三方模块,开发者也可以自己发…

集创北方ICN6211 MIPIDSI桥接到RGB,支持RGB565/RGB888/RGB666

ICN6211描述: ICN6211是一个桥接芯片,它接收MIPIDSI输入并发送RGB输出。MIPIDSI最多支持4个车道,每个车道的最大运行频率为1Gbps;总最大输入带宽为4Gbps;并且还支持MIPI定义的ULPS(超低功耗状态&#xff0…

算法课程笔记——矩阵乘法整除同余LCMGCD

算法课程笔记——矩阵乘法&整除&同余&LCM&GCD bool相等 不需要库函数 只有除法不是 本身就很大,如果不行就要考虑其他方法

vue3.0+ts+vite+scss创建一个vue项目

使用Vite创建一个vue3项目 文章目录 1、创建vue3项目2、安装less/scss3、自动导入 1、创建vue3项目 npm ​npm create vitelatestyarn ​yarn create vite输入新项目名字(例子:vueDemo) 按上下选择框架,vue按回车 ​​​​ 选…

Java进阶学习笔记5——Static应用知识:单例设计模式

设计模式: 架构师会使用到设计模式,开发框架,就需要掌握很多设计模式。 在Java基础阶段学习设计模式,将来面试笔试的时候,笔试题目会经常靠到设计模式。 将来会用到设计模式。框架代码中会用到设计模式。 什么是设计…

【Flutter】AspectRatio组件Card组件按钮组件Wrap组件

🔥 本文由 程序喵正在路上 原创,CSDN首发! 💖 系列专栏:Flutter学习 🌠 首发时间:2024年5月25日 🦋 欢迎关注🖱点赞👍收藏🌟留言🐾 目…

开源内网穿透神器:中微子代理(neutrino-proxy)实现内网穿刺

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…

go select 原理

编译器会使用如下的流程处理 select 语句: 将所有的 case 转换成包含 channel 以及类型等信息的 runtime.scase 结构体。调用运行时函数 runtime.selectgo 从多个准备就绪的 channel 中选择一个可执行的 runtime.scase 结构体。通过 for 循环生成一组 if 语句&…

计算机网络——TCP 协议的三次握手 / 四次挥手

简述 TCP / UDP 协议都是传输层的协议。 UDP 是面向无连接的协议,就是说发送端不在乎消息数据是否传输到接收端了,所以会出现数据丢失的情况,所以可靠性也不高。 TCP 是面向连接的、可靠的、基于字节流的传输层协议。所谓面向连接的&#…

win11 wsl ubuntu24.04

win11 wsl ubuntu24.04 一:开启Hyper-V二:安装wsl三:安装ubuntu24.04三:桥接模式,固定IP四:U盘使用五:wsl 从c盘迁移到其它盘参考资料 一:开启Hyper-V win11家庭版开启hyper-v 桌面…