常用数据特征提取,时域特征、频域特征、小波特征提取汇总;特征提取;有效matlab代码_时域特征提取_phm建模方法论之 数据特征提取-程序员宅基地

技术标签: matlab  算法  机器学习  神经网络  信号处理  数据挖掘  

clc;clear
%% 导入数据
load(‘ct.mat’)
Fs=12800;
a=[];c=[];w=[];
%% 1时域特征提取
for i=2:8
y=ct(:,i);
a(1,i) = max(y); %最大值
a(2,i)= min(y); %最小值
a(3,i) = mean(y); %平均值
ma=a(1,i) ;mi=a(2,i);
a(4,i) = ma-mi; %峰-峰值
a(5,i) = mean(abs(y)); %绝对值的平均值(整流平均值)
a(6,i) = var(y); %方差
a(7,i) = std(y); %标准差
a(8,i) = kurtosis(y); %峭度
a(9,i)= skewness(y); %偏度
a(10,i) = rms(y); %均方根
av=a(5,i) ;rm=a(10,i) ;pk=a(4,i);
a(11,i) = rm/av; %波形因子
a(12,i) = pk/rm; %峰值因子
a(13,i) = pk/av; %脉冲因子
a(14,i) = mean(sqrt(abs(y))).^2;
xr=a(14,i);
a(15,i) = pk/xr; %裕度因子
%% 2频域特征提取
[ frequencystruct ]=frequencyDomainFeatures( y,Fs);
c(1,i)=frequencystruct.MF;%频率均值
c(2,i)=frequencystruct.FC;%重心频率
c(3,i)=frequencystruct.RMSF;%频率均方根
c(4,i)=frequencystruct.RVF;%频率标准差
%% 3小波特征提取
[ waveletstruct ] = waveletFeatures(y);
w(1,i)=waveletstruct.E1;
w(2,i)=waveletstruct.E2;
w(3,i)=waveletstruct.E3;
w(4,i)=waveletstruct.E4;
w(5,i)=waveletstruct.E5;
w(6,i)=waveletstruct.E6;
w(7,i)=waveletstruct.E7;
w(8,i)=waveletstruct.E8;
w(9,i)=waveletstruct.p1;
w(10,i)=waveletstruct.p2;
w(11,i)=waveletstruct.p3;
w(12,i)=waveletstruct.p4;
w(13,i)=waveletstruct.p5;
w(14,i)=waveletstruct.p6;
w(15,i)=waveletstruct.p7;
w(16,i)=waveletstruct.p8;
w(17,i)=waveletstruct.qyshang;
end
a=a’;c=c’;w=w’;

function [ frequencystruct ] = frequencyDomainFeatures( src,fs)
%计算频域统计特征
%对信号进行FFT变换********
FS=fs;
N=length(src);n=0:N-1;
freq=n*fs/N;
f=abs(fft(src,N)*2/N);

x=f(1:N/2); %纵坐标 频率幅值
freq=freq(1:N/2)’; %横坐标 频率值

% plot(freq,x);
% title(‘原始信号频域波形’);
% xlabel(‘频率/hz’);
% ylabel(‘幅值/v’);

%***计算频域特征值
frequencystruct.MF=mean(x); %平均频率
frequencystruct.FC=sum(freq.*x)/sum(x);%重心频率
frequencystruct.RMSF=sqrt(sum([freq.^2].*x)/sum(x));%频率均方根
frequencystruct.RVF=sqrt(sum([(freq-frequencystruct.FC).^2].*x)/sum(x));%频率标准差

%第一级边频带幅值和=上下最靠近啮合频率的边频带对应序号的频率幅值 这里随便写
%已知:行星轮个数、转频,可以找到啮合频率,然后得到边频带,即可计算

% frequencystruct.FSB=x(1000)+x(2000);%第一级边频带幅值和
% frequencystruct.FSI=frequencystruct.FSB/2;%边频带指数
% frequencystruct.FM0=(max(x)-min(x))/frequencystruct.FSB;%FM0
% frequencystruct.FSLF=frequencystruct.FSB/std(x,1);%边频带等级因子

end

function [ waveletstruct ] = waveletFeatures( src)
%计算小波域统计特征
%wpcoef:找小波包分解的系数,N层小波包分解后将信号分成2N个子带,没个子带的信号长度是原是信号的1/2N倍,其实就是将原始信号化成2^N段,每段的长度是相等的且比原信号短
%wprcoef:是小波包分解系数重构,将分解的各个子带的信号拓展为原始信号那么长,
%两者的区别就是wprcoef是wpcoef的拓展(长度与原始信号一样),他们每个节点的能量是一样的

%%小波熵是一个统称,不是一种具体的熵算法。
%旗下包括小波时间熵、小波尺度熵(小波特征尺度熵)、小波时频熵、小波能量熵(小波能谱熵)
% 小波相关尺度熵(小波相关特征尺度熵)、小波奇异熵、小波方差谱熵、小波空间特征熵(小波空间特征尺度熵)

n=3;%3层小波包分解
T=wpdec(src,n,‘db6’); %3层小波包分解 得到8个子带
for i=1:2^n %%重构分量,使信号和原始信号一样长
E(i)=norm(wprcoef(T,[n,i-1]),2)*norm(wprcoef(T,[n,i-1]),2); %求第i个节点的二范数,乘以平方才是能量
end

E_total=sum(E);%总能量

%8个子带的小波能量比
waveletstruct.p1=E(1)/E_total;
waveletstruct.p2=E(2)/E_total;
waveletstruct.p3=E(3)/E_total;
waveletstruct.p4=E(4)/E_total;
waveletstruct.p5=E(5)/E_total;
waveletstruct.p6=E(6)/E_total;
waveletstruct.p7=E(7)/E_total;
waveletstruct.p8=E(8)/E_total;

%绘制条形图
% p=[waveletstruct.p1,waveletstruct.p2,waveletstruct.p3,waveletstruct.p4,…
% waveletstruct.p5,waveletstruct.p6,waveletstruct.p7,waveletstruct.p8];
% bar§;
% set(gca,‘XTickLabel’,{’(3,0)’,’(3,1)’,’(3,2)’,’(3,3)’ ,’(3,4)’,’(3,5)’,’(3,6)’,’(3,7)’});

%小波能量熵(小波能谱熵)
waveletstruct.energyE=-sum(E/E_total.*log(E/E_total));

%8个子带的小波熵(小波尺度熵) 在各尺度上求的是shannon熵=小波尺度熵(小波特征尺度熵)
waveletstruct.E1=wentropy(wpcoef(T,[3,0]),‘shannon’);%
waveletstruct.E2=wentropy(wpcoef(T,[3,1]),‘shannon’);%
waveletstruct.E3=wentropy(wpcoef(T,[3,2]),‘shannon’);%
waveletstruct.E4=wentropy(wpcoef(T,[3,3]),‘shannon’);%
waveletstruct.E5=wentropy(wpcoef(T,[3,4]),‘shannon’);%
waveletstruct.E6=wentropy(wpcoef(T,[3,5]),‘shannon’);%
waveletstruct.E7=wentropy(wpcoef(T,[3,6]),‘shannon’);%
waveletstruct.E8=wentropy(wpcoef(T,[3,7]),‘shannon’);%

%小波奇异谱熵
%%先求取奇异值,将奇异值构造向量即得到奇异值谱,然后计算熵值即可
%第一步:小波分解,得到各分量信号,对系数重构,得到完整系数
for i=1:2^n %%重构分量,使信号和原始信号一样长
q(:,i)=wprcoef(T,[n,i-1]); %求系数
end

%奇异值分解
s=svd(q);
S=sum(s);
dim=length(s);
for i=1:dim
p(i)=s(i)/S;
end
waveletstruct.qyshang=-sum(p.*log§);%小波奇异熵

end

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43967360/article/details/117995336

智能推荐

《数据仓库》一文读懂数据仓库建设_数仓建设-程序员宅基地

文章浏览阅读1.1w次,点赞31次,收藏144次。数据仓库建设一、数据仓库概念1.数仓架构​ 我们在谈到数据仓库,都会提到数仓架构,那么数仓架构到底是什么呢?首先,架构就是把一个整体工作按需切分成不同部分的内容,由不同角色来完成这些分工,并通过建立不同部分相互沟通的机制,使得这些部分能够有机的结合为一个整体,并完成这个整体所需要的所有活动。而数仓架构就可以理解为是构成数据仓库的组件以及之间的具有交互机制的关系。​ 如上图所示,数仓的数据源可能来自业务系统的数据,或者外部获取的数据,或者从线下文件导入的数据。通过抽取工作,将这些数据存储到数仓的原始_数仓建设

Android - AndroidStudio更改缓存目录-程序员宅基地

文章浏览阅读938次,点赞13次,收藏29次。那我们该怎么做才能做到年薪60万+呢,对于程序员来说,只有不断学习,不断提升自己的实力。我之前有篇文章提到过,感兴趣的可以看看,到底要学习哪些知识才能达到年薪60万+。通过职友集数据可以查看,以北京 Android 相关岗位为例,其中 【20k-30k】 薪酬的 Android 工程师,占到了整体从业者的 30.8%!北京 Android 工程师「工资收入水平 」今天重点内容是怎么去学,怎么提高自己的技术。1.合理安排时间2.找对好的系统的学习资料3.有老师带,可以随时解决问题。

MATLAB从入门到精通-matlab中符号推导应用及相关技巧_matlab符号推导-程序员宅基地

文章浏览阅读2k次。手撕公式必不可少,但是难免出错。在战略上手推公式,而在战术上用matlab符号推导辅助和验证可以大幅度减少出错,并提高效率。1.符号推导第一步,学会使用sym和syms a.生成 单个符号变量 sym a b.生成 单个符号变量symsab c d c.生成矩阵符号变量sym和syms的区别 使用sym只生成一个整体a可以控制元素显示方式 使用syms生成一个整体a及对应元素符号变量 d.生成向量和矩阵符..._matlab符号推导

Web安全之文件包含漏洞_allow_url_fopen http 文件包含-程序员宅基地

文章浏览阅读2.7k次,点赞2次,收藏3次。什么是文件包含程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件。而无需再次编写,这种 文件调用的过程一般被称为文件包含。例如:include “conn.php”PHP中常见包含文件函数include()当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进来,发生错误时之给出一个警告,继续向下执行。include_once()..._allow_url_fopen http 文件包含

MySQL安装配置教程最全详解,一步一图解_mysql安装教程图解-程序员宅基地

文章浏览阅读820次,点赞14次,收藏6次。这个方向初期比较容易入门一些,掌握一些基本技术,拿起各种现成的工具就可以开黑了。知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。(img-tcUzaO6d-1713163585912)]同时非常期待小伙伴们能够关注,后面慢慢推出更好的干货~嘻嘻。如果有写得不正确的地方,麻烦指出,感激不尽。

node-sass 安装失败解决办法_nodesass安装报错-程序员宅基地

文章浏览阅读3.5k次,点赞2次,收藏6次。很多小伙伴在安装node-sass的时候都失败了,主要的原因是node版本和项目依赖的node-sass版本不匹配。node-sass依赖node版本,而sass则不需要。解决方案:卸载node-sass,安装sass,项目全局搜索/deep/, 把/deep/替换为::v-deep即可。_nodesass安装报错

随便推点

分布式锁-这一篇全了解(Redis实现分布式锁完美方案)_“分布式锁-这一篇全了解(redis 实现分布式锁完美方案)”, franco 蜡笔小强,csdn,-程序员宅基地

文章浏览阅读2.4w次,点赞91次,收藏658次。前言在某些场景中,多个进程必须以互斥的方式独占共享资源,这时用分布式锁是最直接有效的。随着技术快速发展,数据规模增大,分布式系统越来越普及,一个应用往往会部署在多台机器上(多节点),在有些场景中,为了保证数据不重复,要求在同一时刻,同一任务只在一个节点上运行,即保证某一方法同一时刻只能被一个线程执行。在单机环境中,应用是在同一进程下的,只需要保证单进程多线程环境中的线程安全性,通过 JAV..._“分布式锁-这一篇全了解(redis 实现分布式锁完美方案)”, franco 蜡笔小强,csdn,

控制台乱码DefaultVFS - Reader entry: ����-程序员宅基地

文章浏览阅读2k次。原因:MyBatis 的 DefaultVFS 打印的日志乱码解决办法:不打印该日志(眼不见心不烦????)在mybatis.xml里面把别名那一行注释掉就可以了(直接搜索sqlSessionFactory查找xml)_defaultvfs

被忽视的NTP安全_ntp是加密协议吗-程序员宅基地

文章浏览阅读196次。NTP(Network Time Protocol)网络时间协议是一种基于UDP的网络协议,它用于网络时间同步,使网络中的计算机时钟同步到,再配合各个时区的偏移调整就能实现精准同步对时功能。NTP协议可广泛应用于各类设备或系统,对网络世界有着举足轻重的作用,但是在实际应用中却往往忽视了它的作用,甚至可能会带来一些危害。如影响业务系统运行,影响日志审计的真实性等。某单位新部署了一批服务器,运行一段时间后发现大部分Linux服务器时钟发生跳变。_ntp是加密协议吗

2017.03.04【NOIP 普及组】模拟赛C组 T4:泽泽在埃及_探花泽泽-程序员宅基地

文章浏览阅读1.1k次。【2011.12.10普及模拟】泽泽在埃及 题目描述泽泽已52:0的比分输了球,被足球流氓打了一顿,扔进了窨井里……出来的时候,泽泽已经在埃及了。滚滚的黄沙在周围飞舞,没有一样生物在这里栖息。泽泽不想就挂在这里。忽然,泽泽被风沙遮住的眼睛瞥见了一座金字塔。这是一座很雄伟的金字塔,而且重要的是,金字塔顶端,竟然有一架直升飞机!泽泽就像抓到了救命稻草,用他在长城上999999999999999999_探花泽泽

python ttk separator_python - ttk.Separator设置长度/宽度 - 堆栈内存溢出-程序员宅基地

文章浏览阅读645次。如何在Tkinter中设置/更改ttk.Separator对象的长度/宽度?ttk.Separator(self, orient='horizontal').grid(column=0,row=0, columnspan=2, sticky='ew')看起来柱子试图完成这项工作,但是当你有多个具有相同列宽的分隔符时,它们似乎有不同的长度 - 任何想法为什么?这是一个简单快速的特殊“脏”测试示例:i..._tkinter seperator 宽度

Could not find bundle: org.eclipse.equinox.console-程序员宅基地

文章浏览阅读1.6k次。问题 描述: org.osgi.framework.BundleException: Could not find bundle: org.eclipse.equinox.console 解决方案如下步骤一:eclipse.ini 设置 jdk 在vm 后加上/usr/java/jre1.7.0_06/bin/java设置前-startupplugins/org.eclipse.equin_could not find bundle: org.eclipse.equinox.console

推荐文章

热门文章

相关标签