信号傅里叶变换后频谱刻度设置问题-附Matlab代码

news2024/11/18 17:24:37

一、概述

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

二、实例分析

有一余弦信号,信号频率为30Hz,采样频率128Hz,信号长128,原始信号如下图所示:
Matlab代码如下:

fs=128;                         % 采样频率
N=128;                          % 信号长度
t=(0:N-1)/fs;                   % 时间序列
y=cos(2*pi*30*t);               % 余弦信号
figure,plot(y,'r'); xlabel('样点'); ylabel('幅值');

在这里插入图片描述

图1 原始信号

如果不对频谱刻度进行处理,而直接作图显示频谱,那么得到的频谱值会有所偏差,如下图所示:可知信号频谱为30Hz,而实际求出的频谱为31Hz,发生这种错误的原因是频率刻度的设置错误。

y=fft(y,N);                     % FFT
figure,stem(abs(y),'r');title('频谱')

在这里插入图片描述

图2 频谱图

三、频谱刻度设置方法

信号长为N,采样频率为fs,在DFT(FFT)以后信号的频率在-fs/2和fs/2之间,谱线之间的频率间隔为:

Δ f = f s N = 1 N T s \Delta f=\frac{{{f}_{s}}}{N}=\frac{1}{N{{T}_{s}}} Δf=Nfs=NTs1

式中: T s {{T}_{s}} Ts是采样周期。频率刻度从0开始,最大频率为 f s 2 \frac{{{f}_{s}}}{2} 2fs。因此,频谱刻度简单设置如下式所示:

f r e q = ( 0 : N − 1 ) × f s N freq=(0:N-1)\times \frac{{{f}_{s}}}{N} freq=(0:N1)×Nfs

给出的频率刻度为0,△f,···, f s 2 \frac{{{f}_{s}}}{2} 2fs,fs-△f,但实际不存在大于 f s 2 \frac{{{f}_{s}}}{2} 2fs的频率分量,大于 f s 2 \frac{{{f}_{s}}}{2} 2fs的频率分量实际是负频率的分量。如图3所示。

为了给出从负频率到正频率的全部分量,频率刻度应为

f r e q = ( 0 : N − 1 ) × f s N − f s 2 freq=(0:N-1)\times \frac{{{f}_{s}}}{N}-\frac{{{f}_{s}}}{2} freq=(0:N1)×Nfs2fs

这样给出的频率刻度是: − f s 2 − f s 2 + Δ f , ⋅ ⋅ ⋅ , 0 , Δ f , ⋅ ⋅ ⋅ , f s 2 − Δ f -\frac{{{f}_{s}}}{2}-\frac{{{f}_{s}}}{2}+\Delta f,\centerdot \centerdot \centerdot ,0,\Delta f,\centerdot \centerdot \centerdot ,\frac{{{f}_{s}}}{2}-\Delta f 2fs2fs+Δf,,0,Δf,,2fsΔf

在这里插入图片描述

图3 正负频率对比

3.1 正负频谱刻度设置

按照上述理论的设置,对应的matlab代码如下式所示:

%% 频谱显示1(正负频谱都显示)
freq0=(0:N-1)*fs/N;              % 频率间隔
figure,plot(freq0,abs(y),'r')    % 频谱

在这里插入图片描述

图4 频谱刻度设置(正负频率同时显示)

3.2 正频谱刻度设置

也可以通过上式只显示正频率:对应的Matlab代码如下:

%% 频谱显示2(正频谱)
freq=(0:N/2)*fs/N;              % 设置正频率刻度 
figure,plot(freq,abs(y(1:N/2+1)),'r');title('只有正频率刻度')
figure,stem(freq,abs(y(1:N/2+1)),'r');title(' 只有正频率刻度')

在这里插入图片描述

图5 频谱刻度设置(正频率)

3.3 通过linspace函数设置频率刻度(正、负频率都显示)

也可以通过linspace函数设置频率刻度,对应Matlab代码如下:

freq3=linspace(0,fs,N+1)-fs/2;     % linspace 函数设置正负频率
freq3=freq3(1:N);
figure,plot(freq3,abs(y),'r')    % 频谱

在这里插入图片描述

图6 频谱刻度设置(正负频率同时显示)

3.4 通过linspace函数设置频率刻度(正频率)

或者通过linspace函数设置频率刻度显示正频率

%% 通过linspace函数设置频率刻度(正频率)
freq4=linspace(0,fs/2,N/2+1);     % linspace 函数设置正负频率
figure,stem(freq4,abs(y(1:N/2+1)),'r');title('正频率刻度')

在这里插入图片描述

图7 频谱刻度设置(正频率)

四、Matlab程序获取与验证

代码也可从以下链接处获取:

频谱图中频率刻度设置

可开展针对性验证实验,请私信博主。

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

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

相关文章

【JavaScript+自然语言处理+HTML+CSS】实现Web端的智能聊天问答客服实战(附源码 超详细必看)

需要源码请点赞关注收藏后评论区留言私信~~~ 智能客服的部署方式比较多样化,可以作为组件嵌入到其他应用程序,也可以部署到定制网站,下面分别介绍如何新创建智能客服应用,从而使其能够集成为网站功能的一部分,以及如何…

给你讲明白MySQL的乐观锁和悲观锁

乐观锁与悲观锁是一种广义上的概念。不管是 Java 语言,也或者是其他语言以及数据库都有这类概念对应的实际应用。想要学习乐观锁和悲观锁就要学习他们的基本知识,那么下面我们来学习一下。 锁 生活中:锁在我们身边无处不在,比如我…

PMO项目经理必备的简洁解决问题方案和报告模板

项目经理虽然有责无权,他的权力更多来源于汇报的权力和影响力,作为项目经理和PMO难免经常会进行报告或者是提供方案建议,能够最短时间的讲明白问题和建议才会更多的获得机会,那么如何才能简明扼要的把你的方案和报告说清楚呢&…

基于jsp+mysql+ssm基金信息管理系统-计算机毕业设计

项目介绍 本基金信息管理系统主要包括系统基金信息管理模块、用户管理模块、基金收藏管理、登录模块、和退出模块等多个模块,系统采用了jsp的mvc框架,SSM(springMvcspringMybatis)框架进行开发,本系统是独立的运行,不依附于其他系统,可移植,…

图扑软件数字孪生污水处理厂

随着人工智能、大数据、云计算、物联网和5G等新技术不断融入水务行业的各个环节,智慧水务已逐渐成为传统水务领域转型升级的重要方向。 图扑软件依托自主研发的 HT for Web 产品,并结合视频融合、BIM、5G、物联网、云计算及大数据等先进技术,…

IIS反向代理 设置IIS跨域访问

概念说明 浏览器的同源策略限制了对某些资源的跨域访问,其目的是保障用户数据安全,但同时也阻止了部分合理的跨域请求。为了绕过同源策略的限制,人们提出了多种跨域访问方案。 解决步骤 打开IIS,选中当前站点 -》右侧找到HTTP响…

手写js-防抖,节流

防抖 debounce 函数所做的事情就是,在用户停止某个操作一段时间之后才执行相应的监听函数,而不是在用户操作的过程当中,浏览器触发多少次事件,就执行多少次监听函数。 以最后一次操作为准开始计时器 应用场景: 登录、发短信等按钮…

JAVA SCRIPT设计模式--结构型--设计模式之Bridge桥接模式(7)

JAVA SCRIPT设计模式是本人根据GOF的设计模式写的博客记录。使用JAVA SCRIPT语言来实现主体功能,所以不可能像C,JAVA等面向对象语言一样严谨,大部分程序都附上了JAVA SCRIPT代码,代码只是实现了设计模式的主体功能,不代…

Linux 之七 内核架构、API/ABI 介绍、文件层次结构、Kernel 源码文件

Linux 内核最早是在 1991 年由芬兰大学生林纳斯托瓦兹为自己的个人电脑开发的,并在 GNU 通用公共许可证第 2 版(也包含了其他兼容许可证)之下发布的一种开源的类 Unix 操作系统宏内核。 注意,我们通常说的 Linux 系统是 Linux Ker…

FineReport数据图表制作教程-密码控件

1. 概述 1.1 版本 报表服务器版本 功能变更 11.0 -- 1.2 应用场景 1.2.1 填报控件 填报报表中可以通过该控件输入密码信息,录入密码,如下图所示: 1.2.2 参数控件 参数面板处可以通过该控件输入密码信息,键入查询参数&#…

WebRTC GCC 拥塞控制算法(TFB-GCC)

目录 一. 前言 二. TFB-GCC原理 1. 接收端记录并反馈收包情况 (1)transport-wide sequence nunmber (2)RTCP RTPFB TW 报文 2. 发送端结合包接收反馈情况进行带宽预估拥塞控制 (1)基于延时梯度的带宽…

新手必看!jenkins邮件发送配置,一教就会!

最近刚学习jenkins,在配置邮件发送的时候,踩了很多坑,各种百度查询,调试了大半天,终于成功解决 !特此记录! 遇到最让我头痛的问题,就是明明控制台显示邮件发送成功,但是…

【STM32笔记】HAL库低功耗模式配置(ADC唤醒无法使用的解决方案)

【STM32笔记】HAL库低功耗模式配置(ADC唤醒无法使用的解决方案) 理论转载: leung-manwah.blog.csdn.net/article/details/114675725 一、低功耗模式简介 系统提供了多个低功耗模式,可在 CPU 不需要运行时(例如等待外…

Python实现PSO粒子群优化循环神经网络LSTM分类模型项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 PSO是粒子群优化算法(Particle Swarm Optimization)的英文缩写,是一…

配置别名 配置alias

Linux: ~/.bashrc MAC bash 的配置文件是 ~/.bash_profile zsh的配置文件是~/.zsh 查看一下你的shell类型 terminal->performance->shells open with 方案是 1. 创建新的文件存放alias cd ~ vi .myalias edit .myalias esc :wq保存 2. add config to ~/.zshrc …

Java数据结构与Java算法学习Day09---并查集(简略笔记记录)

目录 并查集的功能: 1.1并查集结构 136 1.2并查集API设计 137 1.3并查集代码的实现 137 1.3.1UF(int N)构造方法实现 1.3.2并查集代码测试 138 1.4并查集应用案例 139 1.5UF_Tree算法优化 139 1.5.1UF_tree API设计 1.5.2优化后的…

git基本操作

目录 1 git命令与状态 1.1 常用git命令 1.2 不那么常用的git命令 1.3 常见状态 2 一些概念 2.1 版本控制 2.2 git简介 2.3 开源许可协议 3 常见git操作 3.1 下载git 3.2 安装git 3.3 配置用户信息 3.4 初始化仓库 3.5 查看git仓库状态 3.6 将文件…

手机软件测试用例设计

实例讲解手机软件测试用例设计 实例讲解手机软件测试用例设计,测试伴随在整个手机软件开发的各个阶段中,测试质量的高低直接关系到手机软件的可用性,友好性,可靠性。可以说,测试环节是手机软件开发的重要环节,是整个开…

JavaScript大作业:基于HTML实现紫色化妆品包装设计公司企业网站

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

Linux与Nginx

Linux 一、Linux的概述: Linux是基于Unix的,Linux是一种自由和开放源码的操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、台式计算机…