《基于先验未知盲反卷积技术的包络谱重复瞬态的循环平稳性提取》阅读笔记及代码整理

news2024/11/24 0:24:24

论文阅读笔记及代码整理
《Extracting cyclo-stationarity of repetitive transients from envelope
spectrum based on prior-unknown blind deconvolution technique》
代码有优化整理过,需要请下载:https://mbd.pub/o/bread/ZZaTl5ht

贡献:
1.文提出一种基于包络谱定义准则的盲反卷积(BD)技术。
2.所提出的方法不需要任何先验参数,并且对脉冲噪声具有鲁棒性。
3.所提方法优于传统的时域BD方法,包括MED和SF-SLSN
摘要:
传统盲反卷积方法的目标是从时域恢复脉冲信号。针对重复瞬态的循环平稳性,提出了一种新的盲反卷积(BD)技术,就是未知先验的盲反卷积技术,用于提取重复瞬态信号的循环平稳性。该方法通过最小化基于包络谱(ES)定义的最优准则来寻找反滤波器。此外,该方法不需要初始化BD的先验知识。基于该方法和广义Lp/Lq范数,介绍了如何设计一种提取重复瞬态循环平稳性(cyclo-stationarity)的BD算法。(主题就是通过使用ES定义的最优准则提供了一个反卷积的算法框架)

说明
盲反卷积(BD)旨在构建一个逆滤波器,BD得到的逆滤波器抵消了各种外部信号传输路径的影响。
根据不同的优化准则,盲反卷积包括最小熵反卷积(MED)[12]、广义MED[13]、最优最小熵反卷积(OMED)、单层单节点结构稀疏滤波(SF-SLSN)[15]、最大相关峭度反卷积(MCKD)、多点最佳最小熵解卷积调整卷积 (MOMEDA)[17]和基于循环平稳的盲反卷积(CYCBD)应用与脉冲特征检测。
MED的原理是利用峰度最大化的策略来实现逆滤波器
广义MED是通过最大化去卷积信号的 Gary 可变范数来恢复脉冲特征。
OMED使用最大化D范数的策略来获得逆滤波器。
然而,峰度、Gary 变模和 D 模对异常值极为敏感,因此往往会过度突出输入信号的主峰。

提出的SF-SLSN是一种BD方法,通过采用广义Lp/Lq范数(G-Lp/Lq)来恢复稀疏
了克服这些最优准则的局限性,提出了一些基于故障周期信息的最优准则,包括相关峰度(CK)、多D范数multi D-norm(MDN)和循环平稳性指标(ICS)。MCKD、MOMEDA和CYCBD分别是基于CK、MDN和ICS的典型BD技术。
另一种基于信号平方包络(SE)的最优判据是表征非平稳信号尤其是轴承故障信号冲量的有效判据,包括谱峭度(SK)[8]、谱L2/L1范数[24]、谱Lp/Lq范数[24]、谱平滑指数[25]、谱Gini指数。
为了充分利用ES在表征环平稳性信号方面的优势,本研究开展了以下工作。首先,本研究提出了一种新的BD技术,用于从ES中提取重复瞬态的循环平稳性。新方法通过最小化由ES定义的最优标准来搜索滤波器,而不是最小化由时域波形或SE定义的最优标准。(就是通过使用ES定义的最优准则提供了一个反卷积的算法框架),本文的内容还有介绍了所提出的以G-Lp/Lq范数为最优准则的BD方法。它展示了如何设计BD算法来从ES中提取重复瞬态的循环平稳性。这种基于G-Lp/Lq范数的BD方法是一种非参数方法,对异常值具有良好的鲁棒性。

理论
试图通过使滤波信号的最优准则最大化或最小化来追求一个反滤波器来抵消传输路径的影响,可以表示为: 在这里插入图片描述

y表示测量信号,f是期望的反滤波器,x是由反滤波器f获得的滤波信号,∗表示卷积算子。为了便于数值计算,将Eq.(1)的卷积过程重构为矩阵乘法的形式:
在这里插入图片描述

其中在这里插入图片描述

是由y导出的Hankel矩阵;N是y的长度;L是反滤波器f的长度。为了利用ES判据实现BD,需要将滤波后的信号x转换成ES。平方包络线e可以定义为:
在这里插入图片描述

hilbert (x)表示滤波后信号的hilbert变换(HT);|·|为模算子。对于向量x, | x |的模是通过使用恒等式在这里插入图片描述
得到的,其中圆圈点表示元素积,conj (x)是x的复共轭。

G- Lp/Lq范数代表了一大类稀疏测度,包括峰度、L2/L1范数[5]、偏态[35]、Gary变量范数(p > 2和q = 2)[20]和pq均值范数(0 < p < 1和q > 1)[21]。G- Lp/Lq范数具有很强的灵活性,其特性完全由变量p和q决定。G- Lp/Lq范数Lp,q的定义为:
在这里插入图片描述

中s为输入信号;N是s的长度。将项N (p/ q−1)加入式(14)的目的是得到归一化GLp/Lq范数。G- Lp / Lq具有很强的灵活性,可以表示许多常用的稀疏准则。

械设备的几种常用健康指标
在这里插入图片描述

提出方法的流程
在这里插入图片描述

案例:
引入一个模拟的轴承故障信号来说明所提方法的有效性。为了突出该方法的优点,将其结果与传统的基于MED和SF-SLSN的时域BD进行了比较。MED和SF-SLSN在MATLAB中的实现可以在外部资源部分中找到。模拟信号:

a(t)是故障阐述的故障脉冲信号,

d(t)是随机脉冲
在这里插入图片描述

n(t)是随机噪声
将模拟脉冲信号、随机脉冲信号、噪声信号和混合信号分别绘制在图4 (a)至(d)中,从图4 (d)的观察可以看出,重复脉冲信号完全淹没在噪声背景中,混合信号中的随机脉冲明显。图5为混合信号的ES。ES中的红线对应故障特征频率及其谐波。从图5可以看出,故障特征频率很难识别。
在这里插入图片描述

处理结果分别如图6(a)、(b)、(c)和(d)所示。在这种情况下,所提出的方法选择了G-L1/L2范数(p=1,q=2)和G-L0.4/L4范数(p=0.4,q=4)。 过滤器长度设置为 L=40。事实上,其他 p、q 值仍然是可选的。关于p和q的选择策略,请参考文献[15]。为了验证所提方法的优越性,采用基于MED和SF-SLSN的时域BD方法对混合信号进行处理。然后,滤波器长度 L 也设置为 40。MED和SF-SLSN得到的处理结果分别如图6(e)、(f)、(g)和(h)所示。从图6(a)、(c)、(e)和(g)可以看出,图6(a)和(c)具有明显的脉冲特性。然而,图6(e)和(g)中出现了一个大振幅的单脉冲。这些结果表明,MED和SF-SLSN对单个脉冲很敏感,这往往会过度突出输入信号中的主峰。相比之下,所提出的方法对随机脉冲具有鲁棒性。所提方法MED和SF-SLSN得到的信号包络谱分别绘制在图6(b)、(d)、(f)和(h)中。图6(b)和(d)中通过所提方法得到的包络谱表明了不同的故障谐波。该结果清楚地揭示了模拟的轴承故障。然而,MED和SF-SLSN得到的包络谱中的谱线非常混乱,很难观察到与故障特征频率相关的谐波,如图6(f)和(h)所示。正因为如此,时域中随机脉冲(异常值)的频谱类似于谱线分布均匀的“均匀谱”,因此基于ES定义的最优准则的BD不会收敛到时域随机脉冲。对图6(b)和(d)的结果进行比较,可以看出G-L1/L2范数和G-L0.4/L4范数的结果相似。这意味着结果的稀疏性受 p/q 比的影响较小。
在这里插入图片描述

测试主函数代码

%% demo 
clc
clear all
close all
addpath('./minFunc');
N=5000;
Fs=10000;  % sampling frequency
fts=[0:1:N-1]*Fs/N;
t=[0:1:N-1]/Fs;
load('sim_fault.mat');
load('sim_outlier.mat');
load('sim_noise.mat');
sx1=sim_fault+sim_outlier+sim_noise;
%%
close all
aa=300;bb=150;
figure(1)
plot(t,sim_fault,'LineWidth',1)
ylabel('Amplitude','fontsize',12)
xlabel('Time (s)','fontsize',12)
title("sim_fault");
set(gca,'linewidth',1);
set(gca,'FontSize',12);
set(gcf,'position',[200,300,aa,bb]);
ylim([-2,2])

figure(2)
plot(t,sim_outlier,'LineWidth',1)
ylabel('Amplitude','fontsize',12)
xlabel('Time (s)','fontsize',12)
title("sim_outlier");
set(gca,'linewidth',1);
set(gca,'FontSize',12);
set(gcf,'position',[200,300,aa,bb]);
ylim([-5,7])
yticks([-5,0,7])

figure(3)
plot(t,sim_noise,'LineWidth',1)
ylabel('Amplitude','fontsize',12)
xlabel('Time (s)','fontsize',12)
title("sim_noise");
set(gca,'linewidth',1);
set(gca,'FontSize',12);
set(gcf,'position',[200,300,aa,bb]);

figure(4);
plot(t,sx1,'LineWidth',1)
ylabel('Amplitude','fontsize',12)
xlabel('Time (s)','fontsize',12)
title("sim_fault+sim_outlier+sim_noise");
set(gca,'linewidth',1);
set(gca,'FontSize',12);
set(gcf,'position',[200,300,aa,bb]);
ylim([-5,7])
yticks([-5,0,7])
%%
figure(5)
plot(fts,abs(fft(sx1))*2/N,'LineWidth',1)
xlabel('Frequency (Hz)','fontsize',12)
ylabel('Amplitude','fontsize',12)
title("FFT");
set(gca,'linewidth',1);
set(gca,'FontSize',12);
set(gcf,'position',[200,300,300,150]);
% ylim([0,0.3])
xlim([0,5000])
figure(6)
plot(fts,abs(fft(abs(hilbert(sx1))))*2/N,'LineWidth',1)
xlabel('Frequency (Hz)','fontsize',12)
ylabel('Amplitude','fontsize',12)
title("hilbert_trans");
set(gca,'linewidth',1);
set(gca,'FontSize',12);
%set(gcf,'position',[200,300,300,150]);
ylim([0,0.1])
xlim([0,800])
set(gcf,'position',[200,300,600,200]);

%%
[~,rec1]=min_blp_lplq(sx1,40,0,1,2);
fts1=(0:length(rec1)-1)*Fs/length(rec1);
NN=length(rec1);
figure(7)
plot(t(1:NN),rec1,'LineWidth',1)
ylabel('Amplitude','fontsize',12)
xlabel('Time (s)','fontsize',12)
title("min_blp_lplq(rec1)");
set(gca,'linewidth',1);
set(gca,'FontSize',12);
set(gcf,'position',[200,300,aa,bb]);
ylim([-6,6])
yticks([-6:3:6])

figure(8)
plot(fts1,abs(fft(abs(hilbert(rec1))))*2/length(rec1),'LineWidth',1)
ylabel('Amplitude','fontsize',12)
xlabel('Frequency (Hz)','fontsize',12)
title("hilbert(rec1))");
set(gca,'linewidth',1);
set(gca,'FontSize',12);
set(gcf,'position',[200,300,aa,bb]);
xlim([0,400]);
ylim([0,0.4])
%%
[~,rec2]=min_blp_lplq(sx1,40,0,0.4,4);
fts1=(0:length(rec2)-1)*Fs/length(rec2);
NN=length(rec2);
figure(9)
plot(t(1:NN),rec2,'LineWidth',1)
ylabel('Amplitude','fontsize',12)
xlabel('Time (s)','fontsize',12)
title("min_blp_lplq(rec2)");
set(gca,'linewidth',1);
set(gca,'FontSize',12);
set(gcf,'position',[200,300,aa,bb]);
ylim([-6,6])
yticks([-6:3:6])

figure(10)
plot(fts1,abs(fft(abs(hilbert(rec2))))*2/length(rec2),'LineWidth',1)
ylabel('Amplitude','fontsize',12)
xlabel('Frequency (Hz)','fontsize',12)
title("hilbert(rec2))");
set(gca,'linewidth',1);
set(gca,'FontSize',12);
set(gcf,'position',[200,300,aa,bb]);
xlim([0,400]);
ylim([0,0.4])
%%
[y_final] =med2d(sx1,40,400,0.0001,0);
fts1=(0:length(y_final)-1)*Fs/length(y_final);
NN=length(y_final);
figure(11)
plot(t(1:NN),y_final,'LineWidth',1)
ylabel('Amplitude','fontsize',12)
xlabel('Time (s)','fontsize',12)
title("med2d(y_final))");
set(gca,'linewidth',1);
set(gca,'FontSize',12);
set(gcf,'position',[200,300,aa,bb]);
ylim([-5,10])
yticks([-5:5:10])

figure(12)
plot(fts1,abs(fft(abs(hilbert(y_final))))*2/length(y_final),'LineWidth',1)
ylabel('Amplitude','fontsize',12)
xlabel('Frequency (Hz)','fontsize',12)
title("(hilbert(y_final)");
set(gca,'linewidth',1);
set(gca,'FontSize',12);
set(gcf,'position',[200,300,aa,bb]);
xlim([0,400]);
ylim([0,0.4])

%%
[~,rec3]=min_lplq(sx1,40,0,1,2);
fts1=(0:length(rec3)-1)*Fs/length(rec3);
NN=length(rec3);
figure(13)
plot(t(1:NN),rec3,'LineWidth',1)
ylabel('Amplitude','fontsize',12)
xlabel('Time (s)','fontsize',12)
title("min_lplq(rec3)");
set(gca,'linewidth',1);
set(gca,'FontSize',12);
set(gcf,'position',[200,300,aa,bb]);
ylim([-6,6])
yticks([-6:3:6])

figure(14)
plot(fts1,abs(fft(abs(hilbert(rec3))))*2/length(rec3),'LineWidth',1)
ylabel('Amplitude','fontsize',12)
xlabel('Frequency (Hz)','fontsize',12)
title("hilbert(rec3)");
set(gca,'linewidth',1);
set(gca,'FontSize',12);
set(gcf,'position',[200,300,aa,bb]);
xlim([0,400]);
ylim([0,0.4])

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

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

相关文章

文件如何变成下载链接?

文件如何变成下载链接&#xff1f;有时候工作需要&#xff0c;要把一些文档&#xff08;比如Word&#xff0c;Excel&#xff0c;PPT&#xff0c;PDF等&#xff09;转成下载链接&#xff0c;作为公众号文章的附件&#xff0c;给粉丝们下载。 把文件转成下载链接&#xff0c;有几…

vue生命周期总结

包含页面的生命周期以及路由的生命周期 页面内&#xff1a; <script> export default {name: "",data() {return {value: "路由页面",};},// 组件不具有此钩子beforeRouteEnter(to, from, next) {console.log("beforeRouteEnter",this);/…

IntelliJ IDEA 2023 最新版如何试用?IntelliJ IDEA 2023最新版试用方法及验证ja-netfilter配置成功提示

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

Langchain-Chatchat项目:4.1-P-Tuning v2实现过程

常见参数高效微调方法(Parameter-Efficient Fine-Tuning&#xff0c;PEFT)有哪些呢&#xff1f;主要是Prompt系列和LoRA系列。本文主要介绍P-Tuning v2微调方法。如下所示&#xff1a; Prompt系列比如&#xff0c;Prefix Tuning(2021.01-Stanford)、Prompt Tuning(2021.09-Goo…

OpenGL_Learn04

我这边并不是教程&#xff0c;只是学习记录&#xff0c;方便后面回顾&#xff0c;代码均是100%可以运行成功的。 1. 渐变三角形 #include <glad/glad.h> #include <GLFW/glfw3.h>#include <iostream> #include <cmath>void framebuffer_size_callba…

科学计数法 [极客大挑战 2019]BuyFlag1

打开题目 注意中说&#xff0c;我们需要买flag&#xff0c;首先必须是cuit的学生&#xff0c;其次必须输对正确的密码 查看源代码得到 代码审计 首先&#xff0c;检查是否存在名为 password 的POST请求。 如果 password 存在&#xff0c;将其存储在变量 $password 中。 然后…

你没有见过的 git log 风格

背景 git大家都不陌生&#xff0c;git log 也是大家经常用的指令&#xff0c;今天分享三种 git log的美化格式&#xff0c;大家看看哪种更易读。 git log -15 --graph --decorate --oneline 带有 pretty 格式的git log 风格 log --color --graph --prettyformat:‘%Cred%h%C…

【音视频 | Ogg】RFC3533 :Ogg封装格式版本 0(The Ogg Encapsulation Format Version 0)

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

Vue3入门指南:零基础小白也能轻松理解的学习笔记

文章目录 创建项目开发环境项目目录模板语法属性绑定条件渲染列表渲染事件处理内联事件处理器方法事件处理器&#xff08;常用&#xff09; 事件参数获取 event 事件事件传参 事件修饰符阻止默认事件阻止事件冒泡 数组变化侦测变更方法替换一个数组 计算属性class 绑定单对象绑…

汽车标定技术(一):XCP概述

目录 1.汽车标定概述 2.XCP协议由来及版本介绍 3.XCP技术通览 3.1 XCP上下机通信模型 3.2 XCP指令集 3.2.1 XCP帧结构定义 3.2.2 标准指令集 3.2.3 标定指令集 3.2.4 页切换指令集 3.2.5 数据采集指令集 3.2.6 刷写指令集 3.3 ECU描述文件(A2L)概述 3.3.1 标定上位…

无限上下文,多级内存管理!突破ChatGPT等大语言模型上下文限制

目前&#xff0c;ChatGPT、Llama 2、文心一言等主流大语言模型&#xff0c;因技术架构的问题上下文输入一直受到限制&#xff0c;即便是Claude 最多只支持10万token输入&#xff0c;这对于解读上百页报告、书籍、论文来说非常不方便。 为了解决这一难题&#xff0c;加州伯克利…

物联网AI MicroPython传感器学习 之 QMC5883指南针罗盘传感器

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; 一、产品简介 QMC5883是一款表面贴装的集成了信号处理电路的三轴磁性传感器&#xff0c;应用场景主要包括罗盘、导航、无人机、机器人和手持设备等一些高精度的场合。 引脚定义 VCC&#xff1a;3V3&#…

【Java 进阶篇】Java ServletContext详解:获取MIME类型

MIME&#xff08;Multipurpose Internet Mail Extensions&#xff09;类型是一种标识文件类型的文本标签&#xff0c;通常用于指示浏览器如何处理Web服务器返回的文件。在Java Web应用程序中&#xff0c;ServletContext对象提供了一种方便的方法来获取文件的MIME类型。本篇博客…

【实战Flask API项目指南】之五 RESTful API设计

实战Flask API项目指南之 RESTful API设计 本系列文章将带你深入探索实战Flask API项目指南&#xff0c;通过跟随小菜的学习之旅&#xff0c;你将逐步掌握 Flask 在实际项目中的应用。让我们一起踏上这个精彩的学习之旅吧&#xff01; 前言 当小菜踏入Flask后端开发的世界时…

Redis-命令操作Redis

&#x1f3ac; 艳艳耶✌️&#xff1a;个人主页 &#x1f525; 个人专栏 &#xff1a;《Spring与Mybatis集成整合》《Vue.js使用》 ⛺️ 越努力 &#xff0c;越幸运。 1.Redis简介 1.1.什么是Redis Redis是一个开源&#xff08;BSD许可&#xff09;&#xff0c;内存存储的数据…

费用预算管理系统

费用预算管理系统 1. 模块概述 《费用管理》以企业费用管理为核心&#xff0c;围绕费用支出审批流程&#xff0c;从费用发生前的事前申请&#xff0c;报销单据审批、付款单据审批&#xff0c;再到出纳付款、会计记账等所有工作流程都在系统中全员、协同完成&#xff1b;并且能…

el-table中的el-input标签修改值,但界面未更新,解决方法

el-table中的el-input标签修改值&#xff0c;界面未更新 在el-table中的el-input里面写的change事件根本不触发&#xff0c;都不打印&#xff0c;试了网络上各种方法都没用 然后换成input事件&#xff0c;input事件会触发&#xff0c;但界面也未更新。我在触发事件的时候&…

微信小程序之开发工具介绍

一、微信小程序开发工具下载 微信小程序开发工具下载可以参考这篇博客《微信小程序开发者工具下载-CSDN博客》 二、开发工具组成部分 如下图所示&#xff0c;开发者工具主要由菜单栏、工具栏、模拟器、编辑器和调试器 5 个部分组成。。 1、菜单栏 菜单栏中主要包括项目、文…

听GPT 讲Rust源代码--library/std(13)

题图来自 Decoding Rust: Everything You Need to Know About the Programming Language[1] File: rust/library/std/src/os/horizon/raw.rs 在Rust源代码中&#xff0c;rust/library/std/src/os/horizon/raw.rs这个文件的作用是为Rust的标准库提供与Horizon操作系统相关的原始…

STM32HAL-完全解耦面向对象思维的架构-时间轮片法使用(timeslice)

目录 概述 一、开发环境 二、STM32CubeMx配置 三、编码 四、运行结果 五、代码解释 六、总结 概述 timeslice是一个时间片轮询框架&#xff0c;完全解耦的时间片轮询框架&#xff0c;非常适合裸机单片机引用。接下来将该框架移植到stm32单片机运行&#xff0c;单片机…