MATLAB中功率谱密度计算pwelch函数使用详解

news2024/12/23 18:56:37

MATLAB中功率谱密度计算pwelch函数使用详解

目录

前言

一、pwelch函数简介

二、pwelch函数参数说明

三、pxx = pwelch(x)示例

四、[pxx,f]=pwelch(x,window,noverlap,nfft,fs)示例

四、[pxx,f] = pwelch(x,window,noverlap,nfft,fs,freqrange,spectrumtype)示例

五、多通道功率谱估计

六、参考资料

总结


前言

        详细介绍MATLAB中功率谱密度计算pwelch函数的使用方法,介绍如何使用该函数及输入各个参数的含义,手把手用代码教你学习pwelch函数,文中附有代码,足够pwelch函数入门了。


提示:以下是本篇文章正文内容,希望能帮助到各位,转载请附上链接。

一、pwelch函数简介

         MATLAB中的pwelch函数是一种用于快速估计信号功率谱密度的工具,也可以计算信号的功率谱,通过阅读该函数使用说明会发现功率谱和功率谱密度是两个不同的概念,要注意一下,在很多教材上都称功率谱和功率谱密度是同一个概念,这是错的,不要被误导。

        pwelch函数可以只对一个信号进行功率谱密度估计,也可以同时对多个信号进行功率谱密度估计,简而言之,就是其输入信号那个参数可以是向量,也可以是矩阵。

二、pwelch函数参数说明

        函数说明文档里面pwelch函数调用的句话格式很多,我们不用关心那么多,关心如下几个格式和默认参数是怎么一回事就可以了。

pxx = pwelch(x)

[ pxx, f ] = pwelch(x,window,noverlap,nfft,fs)

[ pxx, f ] = pwelch(x,window,noverlap,nfft,fs,freqrange)

[ pxx, f ] = pwelch(x,window,noverlap,nfft,fs,freqrange,spectrumtype)

x--------输入信号,指定为行向量或列向量,或矩阵。 如果 x 是矩阵,则其被视为独立通道

Window--------窗口,指定为行向量或列向量或整数。 如果 window 是一个向量,pwelch 将 x 划分为长度等于 window 长度的重叠段,然后将每个信号段与 window 中指定的向量相乘。 如果window是整数,则将pwelch分成长度等于整数值的段,并使用等长的汉明窗。 如果x的长度不能精确地划分为具有noverlap数量的重叠样本的整数段,则x被相应地截断。 如果将 window 指定为空,则使用默认的 Hamming 窗来获取 x 的 8 段,其中具有 noverlap 重叠样本。

noverlap----------重叠样本的数量,指定为小于窗口长度的正整数。 如果省略 noverlap 或 noverlap 指定为空,则使用一个值来获得段之间 50% 的重叠,即默认50%重叠

nfft--------DFT 点数,指定为正整数。 对于实值输入信号 x(PSD 估计值),如果 nfft 为偶数,则 pxx 的长度为 (nfft/2 + 1);如果 nfft 为奇数,则 pxx 的长度为 (nfft + 1)/2。 对于复值输入信号 x,PSD 估计的长度始终为 nfft。 如果 nfft 指定为空,则使用默认的 nfft。如果 nfft 大于Window长度,则数据用零填充。 如果 nfft 小于Window长度,则使用 datawrap包装该段,使长度等于nfft。建议两者相等。

fs-------采样频率,指定为正标量。 采样率是单位时间内的采样数。 如果时间单位是秒,那么采样率的单位是Hz。

freqrange--------------PSD 估计的频率范围,指定为“单边”、“双边”或“中心”之一。 对于实值信号,默认值为“单侧”;对于复值信号,默认值为“双侧”。 每个选项对应的频率范围为

        'oneside' — 返回实值输入信号 x 的单侧 PSD 估计。 如果 nfft 为偶数,则 pxx 的长度为 nfft/2 + 1, 如果 nfft 为奇数,则 pxx 的长度为 (nfft + 1)/2,间隔为 [0,π) rad/sample。 当 fs 可选指定时,对于偶数和奇数长度 nfft,相应的间隔分别为 [0,fs/2] 周期/单位时间和 [0,fs/2) 周期/单位时间。该函数将除 0 和奈奎斯特频率之外的所有频率的功率乘以 2,以保持总功率不变。

        'twoside' - 返回实值或复值输入 x 的两侧 PSD 估计值。 在这种情况下,pxx 的长度为 nfft,并在区间 [0,2π) rad/sample 上计算。 当指定fs时,间隔为[0,fs)周期/单位时间。

        'centered' - 返回实值或复值输入 x 的中心两侧 PSD 估计值。 在这种情况下,pxx 的长度为 nfft,并且在偶数长度 nfft 的间隔 (–π,π] rad/sample 和奇数长度 nfft 的 (–π,π) rad/sample 区间内计算。当 fs 可选地指定时,相应的对于偶数和奇数长度 nfft,间隔分别为 (–fs/2, fs/2] 周期/单位时间和 (–fs/2, fs/2) 周期/单位时间。

spectrumtype------------功率谱类型,指定为“psd”或“power”之一。 默认“psd”,将返回功率谱密度。 指定“power”可通过窗口的等效噪声带宽来缩放 PSD 的每个估计值。 使用“power”选项可以获得每个频率的功率估计值。

三、pxx = pwelch(x)示例

        创建一个角频率为π/4 rad的正弦波,外加N(0,1)白噪声。信号的长度是320个样本。得到其Welch PSD估计。

clc;
clear;
close all;

rng default

n = 0:319;
x = cos(pi/4*n)+randn(size(n));

pxx = pwelch(x);

可见,默认横轴是归一化的角频率,纵轴是取了10log10( )的dB功率谱密度。

关于归一化频率,参考:滤波器设计中的频率归一化问题_滤波器归一化频率-CSDN博客

解释如下:

        信号处理工具箱中经常使用的频率是Nyquist频率,它被定义为采样频率的一半,在滤波器的结束选择和设计当中的截止频率均使用Nyquist频率进行归一化处理。

   例如,对于一个采样频率为1000Hz的系统,300Hz的归一化即为300/500=0.6。归一化频率的范围在[0,1]之间。如果要将归一化频率转换为角频率,则将归一化频率乘以pi;如果将归一化频率转换成Hz,则将归一化频率乘以采样频率的一半。

        采样率的一半是最高频率,认为是1,那么真实频率和最高频率的比值就是归一化频率!也叫数字频率。
     将信号分成长度为nsc=⌊Nx/4.5⌋。这个动作相当于将信号分成尽可能长的段,以获得接近但不超过8个重叠50%的段。使用汉明窗口显示各部分。指定相邻部分之间50%的重叠

要计算FFT,使用max(256,2^p),其中p=[log2nsc⌉。

Nx = length(x);
nsc = floor(Nx/4.5);
nov = floor(nsc/2);
nff = max(256,2^nextpow2(nsc));

t = pwelch(x,hamming(nsc),nov,nff);

maxerr = max(abs(abs(t(:))-abs(pxx(:))))

默认分成8段,每段的长度为Nx/4.5=320/4.5=71.1111,舍去多余的数据,分段长度为71,并用同等长度的汉明窗;重叠长度为50%,则nov=floor(71/2)=35;DFT的点数取每段长度最接近的2的整数次幂和256的最大值,最接近的2的整数次幂是比每段长度长的最接近的2的整数次幂,所以DFT计算的时候如果DFT点数大于每段长度。会自动补0。

对于实值信号,默认值为“单侧”PSD,所以计算DFT点数为256,估计的PSD长度只有256/2+1=129点的长度。

四、[pxx,f]=pwelch(x,window,noverlap,nfft,fs)示例

        创建一个由100Hz正弦波和加性N(0,1)白噪声组成的信号。采样率为1khz,信号持续时间为5秒。使用500个样本和300个重叠样本的段长度,使用500个DFT点。

clc;
clear;
close all;

rng default

fs = 1000;
t = 0:1/fs:5-1/fs;
x = cos(2*pi*100*t) + randn(size(t));

[pxx,f] = pwelch(x,500,300,500,fs);

plot(f,10*log10(pxx))

xlabel('Frequency (Hz)')
ylabel('PSD (dB/Hz)')

sum(abs(x).^2)/length(x) %信号功率
P = fs/2/length(pxx) * (sum(pxx) - 0.5*(pxx(1) + pxx(end))) %梯形法积分

验证功率,对功率谱密度积分发现和信号功率几乎相等。

增大点数

clc;
clear;
close all;

rng default

fs = 10000;
t = 0:1/fs:5-1/fs;
x = cos(2*pi*100*t) + randn(size(t));

[pxx,f] = pwelch(x,5000,3000,5000,fs);

plot(f,10*log10(pxx))

xlabel('Frequency (Hz)')
ylabel('PSD (dB/Hz)')

sum(abs(x).^2)/length(x) %信号功率
P = fs/2/length(pxx) * (sum(pxx) - 0.5*(pxx(1) + pxx(end))) %梯形法积分

增大段长度,会发现功率谱估计的准,功率谱密度积分的值更接近信号的功率。

四、[pxx,f] = pwelch(x,window,noverlap,nfft,fs,freqrange,spectrumtype)示例

         创建一个由100Hz正弦波和加性N(0,1)白噪声组成的信号。采样率为1khz,信号持续时间为5秒。使用500个样本和300个重叠样本的段长度,使用500个DFT点。

clc;
clear;
close all;

rng default

fs = 1000;
t = 0:1/fs:10-1/fs;

x = cos(2*pi*100*t)+randn(size(t))+1;

[pxx,f] = pwelch(x,500,300,500,fs,'centered');

plot(f,10*log10(pxx))
xlabel('Frequency (Hz)')
ylabel('PSD (dB/Hz)')
E=sum(abs(x).^2)  %信号能量
P=sum(abs(x).^2)/length(x) %信号功率
P = fs/length(pxx) * (sum(pxx) - 0.5*(pxx(1) + pxx(end))) %梯形法积分�

[pxx,f] = pwelch(x,500,300,500,fs,'centered','power');
figure(2)
plot(f,10*log10(pxx))
xlabel('Frequency (Hz)')
ylabel('Magnitude (dB)')
grid

使用参数centered得到双边功率谱密度:

使用参数power得到双边功率谱(不是双边功率谱密度):

观察图可知,与信号设置的功率吻合。

取对数画出如下:

        可见,将功率谱密度积分和信号功率相等;观察功率谱图可知,每个频率对应的点显示了该频点的功率大小。

五、多通道功率谱估计

        在加性N(0,1)高斯白噪声中生成由三个正弦波组成的多通道信号的1024个样本。正弦波的频率分别为100、200、300Hz,采样频率为1000Hz。使用Welch的方法估计信号的PSD并绘制它。

clc;
clear;
close all;

rng default

fs = 1000;
t = 0:1/fs:5-1/fs;
f = [100;200;300];
x = cos(2*pi*f*t)' + randn(length(t),3);

[pxx,f] = pwelch(x,500,300,500,fs);

plot(f,10*log10(pxx));

xlabel('Frequency (Hz)')
ylabel('PSD (dB/Hz)')

六、参考资料

Welch’s power spectral density estimate - MATLAB pwelch- MathWorks 中国

https://download.csdn.net/download/m0_66360845/89084990icon-default.png?t=N7T8https://download.csdn.net/download/m0_66360845/89084990


总结

        以上就是今天要讲的内容,本文仅仅简单介绍了功率谱密度(功率谱)绘制函数pwelch函数的使用,希望对各位小伙伴有所帮助。

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

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

相关文章

CI/CD:基于kubernetes的Gitlab搭建

1. 项目目标 (1)熟悉使用k8s环境搭建Gitlab (2)熟练应用Gitlab基本配置 2. 项目准备 2.1. 规划节点 主机名 主机IP 节点规划 k8s-master 10.0.1.1 kube_master k8s-node1 10.0.1.2 kube_node k8s-node2 10.0.1.3 k…

Java 源码 - DelayQueue 源码解析

文章目录 1. 整体设计1.1 类注释1.2、类图1.3 延迟队列的属性1.4 DelayQueue 的主要方法1.4.1 offer 添加元素1.4.2 take 取出元素1.4.3 poll 取出元素 1. 整体设计 DelayQueue 延迟队列底层使用的是锁的能力,比如说要在当前时间往后延迟 5 秒执行,那么…

UnityWebGL获取话筒实时数据

看了木子李大佬的数字人https://digital.lkz.fit/之后,我也想搞一个,于是开始研究起来,先从WebGL录音开始,一共试了三个插件,个个都有问题…… 1、UnityWebGLMicrophone 用起来没啥问题,但是只能录音&#…

【百度Apollo】探索自动驾驶:Apollo 新版本 Beta 全新的Dreamview+,便捷灵活更丰富

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《linux深造日志》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 引入一、Dreamview介绍二、Dreamview 新特性2.1、基于模式的多场景——流程更简洁地图视角调节:调试流…

创业两个月以来我的思想感悟和日志记录

截止目前,出来创业差不多两个月时间了,写篇文章记录总结一下吧,给大家讲讲这两个来,我的感受和心路历程吧。 先来说说我为什么要出来创业,在如今市场环境这么差的情况下,很多身边的朋友都找不到工作&#…

财报解读:汽车销售基本盘,承载了特斯拉的“高科技梦”

“即使外星人明天绑架了我,特斯拉也要解决掉自动驾驶问题。”在自动驾驶业务布局上,马斯克的决心坚定。 不过,想要做好自动驾驶,马斯克可能还需解决最紧要的业绩问题。日前,特斯拉正式发布了其2024年第一季度财报&…

salesforce 如何访问lwc组件

访问lwc有哪些途径呢? Action ButtonTabAura use lwc(拓展)如何区分是新建页面还是编辑页面 Action Button xml文件中要配置tab<?xml version"1.0" encoding"UTF-8"?> <LightningComponentBundle xmlns"http://soap.sforce.com/2006/04/…

AI小白使用Macbook Pro安装llama3与langchain初体验

1. 背景 AI爆火了2年有余&#xff0c;但我仍是一个AI小白&#xff0c;最近零星在学&#xff0c;随手记录点内容供自己复习。 上次在Macbook Pro上安装了Stable Diffusion&#xff0c;体验了本地所心所欲地生成各种心仪的图片&#xff0c;完全没有任何限制的惬意。今天想使用M…

Pandas数据可视化 - Matplotlib、Seaborn、Pandas Plot、Plotly

可视化工具介绍 让我们一起探讨Matplotlib、Seaborn、Pandas Plot和Plotly这四个数据可视化库的优缺点以及各自的适用场景。这有助于你根据不同的需求选择合适的工具。 1. Matplotlib 优点: 功能强大&#xff1a;几乎可以用于绘制任何静态、动画和交互式图表。高度可定制&a…

《HCIP-openEuler实验指导手册》1.6 Apache静态资源配置

知识点 常用用途&#xff1a; 软件仓库镜像及提供下载服务&#xff1a; 配置步骤 删除网站主目录中的文件&#xff08;本实验机目录为/home/source ip为192.168.12.137 端口为81&#xff09; cd /home/source rm -rf *在主目录中新建6个文件夹如下图 mkdir test{1..6}新建…

深入浅出一文图解Vision Mamba(ViM)

文章目录 引言&#xff1a;Mamba第一章&#xff1a;环境安装1.1安装教程1.2问题总结1.3安装总结 第二章&#xff1a;即插即用模块2.1模块一&#xff1a;Mamba Vision代码&#xff1a;models_mamba.py运行结果 2.2模块二&#xff1a;MambaIR代码&#xff1a;MambaIR运行结果 第三…

【MyBatis】进阶使用 (动态SQL)

动态SQL \<if>\<trim>\<where>\<set>\<foreach>\<include> 在填写表单时&#xff0c;有些数据是非必填字段&#xff08;例如性别&#xff0c;年龄等字段&#xff09;&#xff0c;那就需要在接收到参数时判断&#xff0c;根据参数具体的情况…

ROS2 学习笔记(二)常用小工具

1. rqt_console #启动 ros2 run rqt_console rqt_console日志级别&#xff1a;Fatal --> Error --> Warn --> Info --> Debug #修改允许发布的日志级别 ros2 run <package_name> <executable_name> --ros-args --log-level WARN2. launch文件 ROS2中…

TMS320F280049 EQEP模块--QCAP(3)

功能框图 如上图所示&#xff0c;QCAP的核心功能块是CTCU捕获事件控制单元。CTCU以CAPCLK为时钟来计数&#xff0c;在UPEVNT事件时QCTMR值会锁存到QCPRD并重置。此时软件可以读取该QCPRD来计算速度。 速度计算公式 公式 QCAP主要为了在低速模式下使用&#xff0c;速度计算公…

49. 【Android教程】HTTP 使用详解

在你浏览互联网的时候&#xff0c;绝大多数的数据都是通过 HTTP 协议获取到的&#xff0c;也就是说如果你想要实现一个能上网的 App&#xff0c;那么就一定会和 HTTP 打上交道。当然 Android 发展到现在这么多年&#xff0c;已经有很多非常好用&#xff0c;功能非常完善的网络框…

无人机+低空经济:释放中国低空经济动力的必要条件

无人机与低空经济的结合&#xff0c;对于释放中国低空经济动力具有重要的意义。无人机作为低空经济的重要组成部分&#xff0c;可以为低空经济提供新的动力和发展方向。以下是无人机与低空经济结合释放中国低空经济动力的必要条件&#xff1a; 1. 无人机技术的不断发展和创新&a…

InternVL——GPT-4V 的开源替代方案

您的浏览器不支持 video 标签。 在人工智能领域&#xff0c;InternVL 无疑是一颗耀眼的新星。它被认为是最接近 GPT-4V 表现的可商用开源模型&#xff0c;为我们带来了许多惊喜。 InternVL 具备强大的功能&#xff0c;不仅能够处理图像和文本数据&#xff0c;还能精妙地理解…

神之浩劫2测试预约 神之浩劫2怎么预约测试资格教程

在备受赞誉的第三人称动作MOBA经典《神之浩劫》的荣耀轨迹上&#xff0c;其续集《神之浩劫2》即将于5月3日&#xff08;北京时间&#xff09;启幕Alpha测试阶段&#xff0c;首度揭露其神秘面纱&#xff0c;届时&#xff0c;14位英勇无畏的英雄将迎接被甄选玩家的驾驭与探索。此…

后端如何处理接口的重复调用

首先是&#xff0c;原理在请求接口之前&#xff0c;使用过滤器拦截数据&#xff0c;来进行判断两次数据是否一致。 1.自定义注解 2.创建一个Handler处理器 3.RepeatSubmitInterceptor的实现类 4.过滤器的配置

JavaEE技术之MySql高级(索引、索引优化、sql实战、View视图、Mysql日志和锁、多版本并发控制)

文章目录 1. MySQL简介2. MySQL安装2.1 MySQL8新特性2.2 安装MySQL2.2.1 在docker中创建并启动MySQL容器&#xff1a;2.2.2 修改mysql密码2.2.3 重启mysql容器2.2.4 常见问题解决 2.3 字符集问题2.4 远程访问MySQL(用户与权限管理)2.4.0 远程连接问题1、防火墙2、账号不支持远程…