(36)高分辨率频谱——通过在时域序列后面补零提高频域分辨率

news2024/10/17 9:43:03

文章目录

  • 前言
  • 一、仿真分析较少的采集数据
    • 1.MATLAB代码
    • 2.仿真结果
  • 二、高分辨率频谱
    • 1.有限信号样本高分辨率频谱的计算方法
    • 2.仿真结果


前言

在实际工程应用中,我们很多时候所能采集的信号并不正好是整周期的。此时若对信号做傅里叶变化,得到的结果中包含着多种频谱分量,而实际上我们只需要分析主要的频率分量即可。另一方面,如果采集到的信号样本有限,将导致频谱的分辨率不够高,这也就意味着所得到的主要的频率分量的误差较大。一种有效的处理方法是在有限的信号样本后面补零,然后再进行傅里叶变化得到信号频谱,此时,就可以得到高分辨率的频谱,使所得到的频率分量更加精确。本文将使用MATLAB仿真的方法,给出具体实现方法。


一、仿真分析较少的采集数据

1.MATLAB代码

生成有限信号长度,并进行频谱分析代码如下:

%% 生成余弦波
% 指定信号的参数,频率5Hz,采样频率为32Hz,信号持续时间跨越8个samples。
f = 5;                            % 余弦波的振荡频率,简称频率
fs = 32;                          % 数字信号的采样频率(sampling frequency ),简称采样率
Ts = 1/fs;                        % 采样周期,也即采样值的时间间隔
L = 8;                            % 一个采样值称为一个sample,L为sample的个数
t = (0:L-1)*Ts;                   % 时间向量
x = cos(2*pi*f*t);                % 生成余弦波x

% 画出生成余弦波的时域波形
figure()
plot(t,x,'LineWidth',1.5)
title(['余弦波的时域波形(f=',num2str(f),'Hz,fs=',num2str(fs),' samples/s)'])
grid on
xlabel('t/s')
ylabel('cos(2*pi*f*t)')
%% 单边幅度谱
N = L;                          % N=8
Y = fft(x,N);                   % 信号的傅里叶变换

% 计算信号的双边幅度频谱
P2 = abs(Y/L);

% 计算信号的单边幅度频谱
P1 = P2(1:N/2+1);              % 取出直流到fs/2的频谱分量
P1(2:end-1) = 2*P1(2:end-1);

figure()
stem(0:(fs/N):(fs/2),P1(1:N/2+1),'LineWidth',1.5)    % 画到fs/2对应的点
grid on
title(['余弦波的单边幅度谱(f=',num2str(f),'Hz,fs=',num2str(fs),' samples/s,','N=',num2str(N),')'])
xlabel('频率(Hz)  (单边谱的频率范围0Hz到fs/2)')    % 频率范围0Hz到fs/2
ylabel('频谱幅度|Y|')

2.仿真结果

信号波形如下图所示:

在这里插入图片描述

直接使用有限的时域信号样本得到的频谱如下图所示:

在这里插入图片描述
代码中设置的信号频率是5Hz,由于采集的信号较少,只有8个样本,所以计算得到的频谱分量并不准确,给出的主要频率分量是4Hz,与真是情况偏差较大。

下面给出提高频率分辨率的方法。

二、高分辨率频谱

1.有限信号样本高分辨率频谱的计算方法

通过在时域有限信号样本后面补0,在进行FFT变换,可以得到高分辨率频谱。代码如下:

%% 通过在序列后面补0增加时域的数据量,进而提高频谱分辨率
N = 64;                         
Y = fft(x,N);                   % 信号的傅里叶变换。在x后面补0,使新序列长度=N

% 计算信号的双边幅度频谱
P2 = abs(Y/L);

% 计算信号的单边幅度频谱
P1 = P2(1:N/2+1);              % 取出直流到fs/2的频谱分量
P1(2:end-1) = 2*P1(2:end-1);

figure()
stem(0:(fs/N):(fs/2),P1(1:N/2+1),'LineWidth',1.5)    % 画到fs/2对应的点
grid on
title(['余弦波的单边幅度谱(f=',num2str(f),'Hz,fs=',num2str(fs),' samples/s,','N=',num2str(N),')'])
xlabel('频率(Hz)  (单边谱的频率范围0Hz到fs/2)')    % 频率范围0Hz到fs/2
ylabel('频谱幅度|Y|')

2.仿真结果

得到的高分辨率频谱如下:

在这里插入图片描述

此时,频谱中的主要频率分量是5Hz,和真实的频率一致。


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

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

相关文章

跨境电商不同节点的物流配送实现

由于涉及到国际运输、清关、仓储和本地配送等复杂环节,跨境物流与国内物流有着显著区别。本文将详细介绍跨境电商的不同物流配送模式,以及从头程到尾程各个节点的实现过程,并讨论相应的电商ERP系统在各个环节中的设计要点。 一、跨境电商的物流配送模式 跨境电商的物流配送…

【C】分支与循环2--while/for/do-while/goto以及break和continue在不同循环中的辨析~

分支与循环 while循环 if与while的对比 if(表达式)语句&#xff1b;while(表达式)语句&#xff1b;下面来看一个例子&#xff1a; 用 if 写&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() {if (1)printf("hehe");//if后面条…

数据结构——排序(2)

数据结构——排序(2) 文章目录 数据结构——排序(2)前言&#xff1a;1.快速排序&#xff08;非递归版本&#xff09;基本步骤&#xff1a;代码实现 2.归并排序算法思想&#xff1a;核心步骤&#xff1a;代码实现&#xff1a;特征总结&#xff1a; 3.计数排序&#xff08;非比较…

跨境电商独立站的本地化

随着全球电商的快速发展,越来越多的跨境电商选择建立独立站以摆脱平台限制,打造品牌影响力。独立站的成功不仅依赖于技术能力和供应链管理,更取决于对目标市场的本地化策略。 本文将从网站建设、商品信息展示、SEO推广等方面分析跨境电商独立站如何进行本地化适配,并讨论如…

SMARTFORM 条形码和二维码

本文主要是记录了二维码和条形码的创建以及在SMARTFORMS的使用 文章目录 SMARTFORM 条形码创建新的BARCODE创建条形码样式创建段落样式SMARTFORM调用条形码 SMARTFORM 二维码创建二维码Module Size 调节二维码的尺寸Module Size: 像素值ErrCorrLev : 容错率二维码的使用 SMARTF…

Springboot3+druid+jasypt+application.yml配置文件数据库密码加密技术

说明 开发环境我们经常把数据库密码直接明文暴露在配置文件中,但是在生产环境,出于安全考虑,必须对数据库密码进行加密。 Jasypt是一个简单易用的Java加密工具库。Jasypt支持多种加密算法,如AES、SHA512、AES_256等,以适应不同的安全需求,可以轻松将加密技术应用于配置…

虚拟机错误:‘VirtualBox Host-Only Ethernet Adapter #2‘

这个错误确实让我很难受。同时我也找了很多的方法&#xff0c;最终得到了这种方法是比较有效的。 参考 https://www.virtualbox.org/ticket/16807

2023年“网络建设与运维”广西省赛试题复盘

2023年“网络搭建与应用”省赛试题复盘 第一部分&#xff1a;网络搭建及安全部署项目 &#xff08;500分&#xff09; 一、竞赛内容分布 “网络搭建与应用”竞赛共分二个部分&#xff0c;其中&#xff1a; 第一部分&#xff1a;网络搭建及安全部署项目 第二部分&#xff1a;服…

Uncaught (in promise) TypeError: Cannot convert object to primitive value

使用vue3的时候报了这个错误&#xff0c;而且还同时报了一个警告 说一下我这里这个错误和警告的原因&#xff0c;是因为我把传给 第三方组件的值 也当做了 第三方组件的 ref&#xff0c;可能没太说清楚&#xff0c;所以接下来看代码&#xff0c;我这里使用的第三方组件是 vxe-t…

Vue2项目中使用 echarts(5.2.2)图表组件含代码(二)

1.图表预览 2.注释说明 Vue 的组件开发 通过 props 定义外部传入的属性&#xff0c;例如 className、width、height、autoResize、chartData 等。使用 Vue 的生命周期钩子函数 mounted 进行 ECharts 的实例化&#xff0c;确保组件加载完毕后才初始化图表。通过 watch 监听 ch…

半小时速通RHCSA

1-7章: #01创建以上目录和文件结构&#xff0c;并将/yasuo目录拷贝4份到/目录下 #02查看系统合法shell #03查看系统发行版版本 #04查看系统内核版本 #05临时修改主机名 #06查看系统指令的查找路径 #07查看passwd指令的执行路径 #08为/yasuo/ssh_config文件在/mulu目录下创建软链…

【Vue】Vue扫盲(四)组件化思想与简单应用

【Vue】Vue扫盲&#xff08;一&#xff09;事件标签、事件修饰符&#xff1a;click.prevent click.stop click.stop.prevent、按键修饰符、及常用指令 【Vue】Vue扫盲&#xff08;二&#xff09;指令&#xff1a;v-for 、v-if、v-else-if、v-else、v-show 【Vue】Vue扫盲&…

Oracle-19g数据库的安装

简介 Oracle是一家全球领先的数据库和云解决方案提供商。他们提供了一套完整的技术和产品&#xff0c;包括数据库管理系统、企业级应用程序、人工智能和机器学习工具等。Oracle的数据库管理系统是业界最受欢迎和广泛使用的数据库之一&#xff0c;它可以管理和存储大量结构化和…

内核定时器API实现点灯

1.内核定时器 定时器是一个很常用的功能&#xff0c;需要周期性处理的工作都要用到定时器。 Linux 内核定时器 采用系统时钟来实现&#xff0c;并不是6ull里面的硬件定时器。 Linux 内核定时器使用很简单&#xff0c;只需要提供超时时间(相当于定时值)和定时处理函数即…

高阶数据结构与算法——红黑树の奥秘

1.认识红黑树 1.1红黑树的概念 红⿊树是⼀棵⼆叉搜索树&#xff0c;他的每个结点增加⼀个存储位来表⽰结点的颜⾊&#xff0c;可以是红⾊或者⿊⾊。通过对任何⼀条从根到叶⼦的路径上各个结点的颜⾊进⾏约束&#xff0c;红⿊树确保没有⼀条路径会⽐其他路径⻓出2倍&#xff0c…

graphrag学习总结

学习视频&#xff1a;b站链接 项目链接 GraphRAG 的基本概念 Document&#xff08;文档&#xff09;&#xff1a;系统中的输入文档。这些文档要么代表CSV中的单独行&#xff0c;要么代表单独的txt文件。 TextUnit&#xff08;文本块&#xff09;&#xff1a;要分析的文本块。…

pdf阅读软件有哪些?5个软件帮助你快速进行pdf阅读

pdf阅读软件有哪些&#xff1f;5个软件帮助你快速进行pdf阅读 如果你正在寻找优秀的PDF阅读软件&#xff0c;以下推荐的5款软件能够帮助你快速、轻松地阅读和管理PDF文件。这些工具各具特色&#xff0c;适用于不同的使用需求&#xff0c;无论是注释、签名、还是管理大文件&…

使用Rollup.js快速开始构建一个前端项目

Rollup 是一个用于 JavaScript 项目的模块打包器&#xff0c;它将小块代码编译成更大、更复杂的代码&#xff0c;例如库或应用程序。Rollup 对代码模块使用 ES6 模块标准&#xff0c;它支持 Tree-shaking&#xff08;摇树优化&#xff09;&#xff0c;可以剔除那些实际上没有被…

lwip多线程使用说明,注意事项

lwIP: Common pitfalls 相关问题&#xff1a; lwIP - A Lightweight TCP/IP stack - Bugs: bug #56531, Missing locking in tcp_input() [Savannah] 我也碰到了差不多情况

goDoH:一款使用了DNS-over-HTTPS作为传输端口的C2框架

工具介绍 goDoH是一款概念验证命令与控制框架&#xff0c;该工具采用Golang开发&#xff0c;并使用了DNS-over-HTTP作为传输介质。 项目依赖 goDoH的代码构建需要使用到Dep&#xff08;【GitHub传送门】&#xff09;&#xff0c;Dep是一款针对Go语言的依赖管理工具。 在mac…