首页 > 其他分享 >Matlab信号处理:频域分析中的功率谱

Matlab信号处理:频域分析中的功率谱

时间:2024-11-14 20:47:57浏览次数:3  
标签:P1 密度 power 信号处理 频域 Matlab 信号 功率 psd

本文介绍信号频域分析中功率谱和功率谱密度(PSD)的相关代码和分析过程,该功率谱和功率谱密度采用的是非参数法中的周期图法。本文提供功率谱和功率谱密度的封装函数,但还是推荐使用Matlab的periodogram函数。

1.理论介绍

功率谱和功率谱密度是针对随机信号而言,关于信号分类的定义如下图:

图片

确定性信号:可以表示为一个确定的时间函数,因而可确定其任何时刻的量值,这种信号称为确定性信号。

周期信号:按照一定时间间隔周而复始重复出现,无始无终的信号。

非周期信号:不具有周期重复性的信号。

准周期信号:两种以上的周期信号合成的,但其组成分量间无法找到公共周期,因而无法按某一时间间隔周期而重复出现的信号。

瞬变非周期信号:除准周期信号之外的其他非周期信号,是一些或在一定时间区间内存在,或随着时间的增长而衰减至零的信号。

随机信号:一种不能准确预测其未来瞬时值,也无法用数学关系式来描述的信号。但是具有某些统计特征,可以用概率统计方法由其过去来估计其未来。例如噪声信号、含噪信号,工程中没有绝对意义的无噪信号,可使用功率谱和功率谱密度分析。

对随机信号按照历程所作的各次长时间观测记录成为样本函数。在同一试验条件下,全部样本函数的集合就是随机过程。随机过程有平稳过程和非平稳过程之分,平稳随机过程是指其统计特征参数不随时间而变化的随机过程,否则为非平稳随机过程。

在平稳随机过程中,若任一单个样本函数的时间平均统计特征等于该过程的集合平均统计特征,这样的平稳随机过程叫各态历经随机过程。工程中,很多随机信号分析时我们都前提认为所取信号具有各态历经性,有的虽然不满足严格的各态历经过程,但可以忽略那些不具有各态历经性分量,它们可能不是重点研究对象。

随机信号在时间上是无限的,因此是能量无限、功率有限的信号。而能量无限的信号不满足傅里叶变换绝对可积条件。因此随机信号的傅里叶变换是不存在的,但是随机信号的功率是有限的,采用功率谱可以从统计的角度来描述随机信号的频域特性。

2.具体案例

周期图法绘制信号的功率谱,就是取一段有限长的信号进行傅里叶变换然,然后取模的平方,再除以信号的长度。这里有一个含噪信号y11,表达式如下:

图片

noise表示一个符合标准正态分布的随机噪声,采样频率设置为1000,信长度为2000,即信号的时间长度为2s。上述这个信号的时域波形如下图所示:

图片

上图信号的功率谱和功率谱密度如下图所示:

图片图片

无论是从上述功率谱和功率谱密度中,都能发现信号中存在两个突出的频率分量50Hz和300Hz。幅值数值的意义需要比较不同信号才有价值,实际分析信号时一般都只看功率谱密度。

需要注意的是,上述功率谱和功率谱密度画图时采用pow2db函数,将功率转换为了分贝数,关系式为:ydb=10log10(y)。周期图法中,功率谱和功率谱密度的区别在于,功率谱密度是功率谱再除以采样频率fs,可以理解为去除采用频率差异的影响,所以功率谱和功率谱密度的单位分别为dB和dB/Hz。

除此之外,值得注意的是该图中有两条曲线,一条蓝色的一条红色的,蓝色为测试函数,红色为matlab的periodogram函数,它们的结果是一样的,这也验证了测试函数的正确性。

3.具体代码

主函数main1.m代码:

%% 信号处理————频域分析(功率谱和功率谱密度)

clc
clear all
close all
%
fs=1000;                                             %采样频率
L=2000;                                              %信号长度
t=(0:L-1)/fs;                                          %时间序列
y1=0.8+0.7*cos(2*pi*50*t-pi/4)+0.8*cos(2*pi*300*t+pi/5);    %信号y1
y11=y1+0.5*randn(size(y1));                                 %加噪信号y11


y=y11';       %分析的信号,y的列为信号数量维度,y的行为每个信号的索引维度
figure('Position', [100, 100, 600, 100]);
plot(t,y11,'b');xlabel('时间(s)');ylabel('幅值');

[freq,P1,Theta,P1_power,P1_psd]=frequ_am_phase_power_psd(y,fs);   %幅值谱和相位谱     相位谱的阈值参数为1e-6

%画图
[P11_power P11_freq_power]=periodogram(y,rectwin(size(y,1)),size(y,1),fs,'power');
[P11_psd P11_freq_psd]=periodogram(y,rectwin(size(y,1)),size(y,1),fs,'psd');


%幅值谱
figure
stem(freq,P1(:,1),'k');    %作图
xlabel('频率(Hz)');ylabel('幅值');title('幅值谱');
%相位谱
figure
stem(freq,Theta(:,1),'k');    %作图
xlabel('频率(Hz)');ylabel('相位 (\pi)');title('相位谱');
%功率谱
figure
plot(freq,pow2db(P1_power(:,1)),'b');hold on;  %作图
plot(P11_freq_power,pow2db(P11_power(:,1)),'r');
xlabel('频率(Hz)');ylabel('功率(dB)');title('功率谱');
legend('测试函数','matlab函数');
fprintf('测试信号y的功率谱中测试函数与matlab函数之间的差为%f \n',sum(P1_power(:,1)-P11_power(:,1)));
%功率谱密度
figure
plot(freq,pow2db(P1_psd(:,1)),'b');hold on;  %作图
plot(P11_freq_psd,pow2db(P11_psd(:,1)),'r');
xlabel('频率(Hz)');ylabel('功率(dB/HZ)');title('功率谱密度');
legend('测试函数','matlab函数');
fprintf('测试信号y的功率谱密度中测试函数与matlab函数之间的差为%f \n',sum(P1_psd(:,1)-P11_psd(:,1)));

幅值谱、相位谱、功率谱和功率谱密度计算函数的相关代码:

function [freq,P1,Theta,P1_power,P1_psd]=frequ_am_phase_power_psd(y,fs,tol)

%% 绘制信号频域的功率谱和功率谱密度
%% 参数解释: 
%     y: 表示输入信号,它可以为一个矩阵,行X列,具体为单个信号的采样索引X信号数
%        比如y的大小为8192X12,表示一个有12个信号的数据矩阵,每个信号长度为8192
%        注意,如果仅有一个信号,则y应该是一个列向量
%        同时,y的行数尽量为偶数,奇数的话会引起程序索引的警告
%     fs:表示采样频率
%     tol:相位阈值参数
%     freq:表示幅值谱的横轴
%     P1:表示幅值谱的纵轴
%     Theta:表示相位谱的纵轴
%     P1_power:表示功率谱的纵轴
%     P1_psd:表示功率谱密度的纵轴

if nargin==2
    tol=1e-6;  %计算误差的默认阈值
end

L=size(y,1);         % 信号长度
% Y=fft(y,2^nextpow2(L));          % FFT 快速傅里叶变换
Y=fft(y,L);          % FFT 快速傅里叶变换
freq=(0:L/2)*fs/L;   % 设置频率刻度  横轴Hz
%幅值谱
P2 = abs(Y/L);
P1 = P2(1:L/2+1,:);
P1(2:end-1,:) = 2*P1(2:end-1,:);  %纵轴 幅值

%相位谱
P2(2:end-1,:)=2*P2(2:end-1,:);
for i=1:size(Y,2)
    Y(P2(:,i)<tol,i) = 0;
    theta(:,i) = angle(Y(:,i))/pi;
end
Theta=theta(1:L/2+1,:);

%功率谱
P2_power=abs(fft(y,L)).^2/(L^2);   %双边功率谱
% P2_power=abs(fft(y,L)).^2/(L);   %双边功率谱
P1_power=P2_power(1:L/2+1,:);  %单边功率谱
P1_power(2:end-1,:)=2*P1_power(2:end-1,:);  %纵轴 功率

%功率谱密度
P2_psd=abs(fft(y,L)).^2/(L*fs);   %双边功率谱密度
P1_psd=P2_psd(1:L/2+1,:);  %单边功率谱密度
P1_psd(2:end-1,:)=2*P1_psd(2:end-1,:);  %纵轴 功率密度

end

上述是一个随机信号的功率谱和功率谱密度的示例,采用的是周期图法,在原先封装幅值谱和相位谱的函数基础上增加了功率谱和功率谱密度,方便大家使用,但是关于功率谱和功率谱密度还是推荐matlab的periodogram函数。 

标签:P1,密度,power,信号处理,频域,Matlab,信号,功率,psd
From: https://blog.csdn.net/2401_88845856/article/details/143780328

相关文章

  • MATLAB实现PSO-KELM粒子群算法优化核极限学习机时间序列预测
    目录项目背景介绍...1项目目标与意义...1项目挑战...1项目特点与创新...1项目应用领域...2项目效果预测图程序设计...2项目模型架构...2项目模型描述...2项目模型算法流程图...4项目结构设计...5项目部署与应用...5项目扩展...5项目应该注意事项...5......
  • MATLAB实现NGO-SVM北方苍鹰算法优化支持向量机多输入单输出回归预测(多指标,多图)
    目录项目背景介绍...1项目目标与意义...1项目挑战...2项目特点与创新...2项目应用领域...3项目效果预测图程序设计...3项目模型架构...4项目模型描述...4项目模型算法流程图...5项目结构设计...5项目部署与应用...6项目扩展...6项目应该注意事项...6......
  • 用matlab算子提取相机亮度一致性曲线,转VC++实现
    用matlab的算子,提取相机亮度一致性曲线,用曲线调节相机亮度一致性。用C++开发,开发工具vs2019,使用迈德威视的相机。算法原理:间隔提取整副图像中的采集点,横向10点,竖向10点,均匀覆盖整图,采样不同曝光时间采集N帧图像,然后计算亮度的变化趋势,得到亮度曲线。读取原始图片,把......
  • 基于FCM模糊聚类算法的图像分割matlab仿真
    1.算法运行效果图预览(完整程序运行后无水印) 2.算法运行软件版本matlab2022a 3.部分核心程序(完整版代码包含详细中文注释和操作步骤视频)I_mean=func_median(Im1,Lwin);%%将图像灰度按列排列X=Im1(:);X_spatial=I_mean(:);%初始化......
  • 基于Lipschitz李式指数的随机信号特征识别和故障检测matlab仿真
    1.程序功能描述基于Lipschitz李式指数的随机信号特征识别和故障检测.2.测试软件版本以及运行结果展示MATLAB2013B版本运行 3.核心程序%---Executesonbuttonpressinpushbutton2.functionpushbutton2_Callback(hObject,eventdata,handles)%hObjecthandle......
  • 数学建模---t检验样例和matlab代码
    文章目录1.问题概述2.单个样本t检验2.1问题分析2.2matlab代码2.3结果分析3.配对样本t检验3.1问题分析3.2代码求解3.3结果分析4.独立样本t检验4.1问题分析4.2代码求解4.3结果分析4.3结果分析1.问题概述之前介绍了这个t检验的类型:1)单样本t检验:2)配对样本t检验:3)独......
  • 手把手教你学simulink(13.5)--Simulink 信号处理场景:音频信号降噪处理
    目录项目实例:音频信号降噪处理项目背景步骤模型示意图结果分析MATLAB代码补充总结使用Simulink进行音频信号的降噪处理。这个项目将展示如何使用Simulink设计一个简单的音频降噪系统,通过滤波器去除音频信号中的背景噪声。项目实例:音频信号降噪处理项目背景......
  • 【24年新算法故障诊断】基于FVIM-DBN四向量优化深度置信网络的故障诊断(Matlab代码,评估
    本文采用四向量优化算法(FVIM,2024年新算法)优化深度置信网络DBN的超参数,形成FVIM-DBN故障诊断模型,以进一步提升其在数据分类任务中的性能。深度置信网络(DBN)是经典强大的深度神经网络,是一种具有多个隐藏层的前馈深度神经网络。它由若干堆叠的受限玻尔兹曼机(RestrictedBolt......
  • 深入定制SerDes系统:通过MATLAB函数块和SerDes Toolbox中的AMI模型利用AMI参数优化数据
    深入定制SerDes系统:利用AMI参数优化数据路径控制在高速数字通信系统中,SerDes(串行/并行转换器)是最为关键的组件之一。它将大量的数据串行化,传输到另一个模块或设备,再将其还原成并行数据。随着通信标准的不断演进,诸如PCIe4、IEEE802.3等协议在数据速率、信号完整性和传输效......
  • 【MATLAB源码-第290期】基于matlab的MRC检测算法在OTFS通信系统中的仿真,输出误码率曲
    操作环境:MATLAB2022a1、算法描述在无线通信系统的发展历程中,随着频谱的日益紧张以及高频通信需求的增加,传统的通信方法逐渐显露出其在复杂信道环境中的局限性。尤其是在高速移动、多径传播和多普勒效应严重的环境下,传统的OFDM(正交频分复用)等技术往往难以应对这些挑战。因此......