【matlab】信号分解/故障诊断——智能优化算法优化VMD
目录
引言
应用领域
VMD代码实现
智能优化算法优化VMD
引言
VMD(变分模态分解)是一种新的非线性自适应信号分解方法,它通过变分原理将复杂信号分解为若干个具有不同频率中心和带宽的本征模态函数(Intrinsic Mode Functions, IMFs)。
变分原理:VMD的分解过程即变分问题的求解过程。在该算法中,IMF被定义为一个有带宽限制的调幅-调频函数。
目标:VMD算法的目标是找到若干模态函数,使得每个模态函数的带宽最小
自适应性强:VMD可以自适应地选择模态数量和频率中心。
高分辨率:VMD具有较高的时频分辨率,能够 取信号的时频特征。
抗噪性强:VMD对噪声具有较强的鲁棒性,能够有效分离信号和噪声。
避免问题:VMD将信号分量的获取过程转移到变分框架内,采用非递归的处理策略,能有效避免模态混叠、过包络、欠包络、边界效应等问题。
具体推导参考:
对变分模态分解(VMD)的理解_vmd的自适应形态-CSDN博客
变分模态分解(VMD)学习-CSDN博客
应用领域
信号处理:VMD广泛应用于各种信号处理任务,如语音信号处理、地震信号分析等。
机械故障诊断:VMD可以用于机械设备的故障诊断,通过分析振动信号,识别设备的故障状态。
生物医学信号分析:VMD在生物医学信号分析中具有重要应用,如心电信号分解、脑电信号分析等。
VMD代码实现
matalb中VMD函数,参照如下:
function [u, u_hat, omega] = VMD(signal, alpha, tau, K, DC, init, tol)% Period and sampling frequency of input signal
save_T = length(signal);
fs = 1/save_T;% extend the signal by mirroring
T = save_T;
f_mirror(1:T/2) = signal(T/2:-1:1);
f_mirror(T/2+1:3*T/2) = signal;
f_mirror(3*T/2+1:2*T) = signal(T:-1:T/2+1);
f = f_mirror;% Time Domain 0 to T (of mirrored signal)
T = length(f);
t = (1:T)/T;% Spectral Domain discretization
freqs = t-0.5-1/T;% Maximum number of iterations (if not converged yet, then it won't anyway)
N = 100;% For future generalizations: individual alpha for each mode
Alpha = alpha*ones(1,K);% Construct and center f_hat
f_hat = fftshift((fft(f)));
f_hat_plus = f_hat;
f_hat_plus(1:T/2) = 0;% matrix keeping track of every iterant // could be discarded for mem
u_hat_plus = zeros(N, length(freqs), K);% Initialization of omega_k
omega_plus = zeros(N, K);
switch initcase 1for i = 1:Komega_plus(1,i) = (0.5/K)*(i-1);endcase 2omega_plus(1,:) = sort(exp(log(fs) + (log(0.5)-log(fs))*rand(1,K)));otherwiseomega_plus(1,:) = 0;
end% if DC mode imposed, set its omega to 0
if DComega_plus(1,1) = 0;
end% start with empty dual variables
lambda_hat = zeros(N, length(freqs));% other inits
uDiff = tol+eps; % update step
n = 1; % loop counter
sum_uk = 0; % accumulator% ----------- Main loop for iterative updateswhile ( uDiff > tol && n < N ) % not converged and below iterations limit% update first mode accumulatork = 1;sum_uk = u_hat_plus(n,:,K) + sum_uk - u_hat_plus(n,:,1);% update spectrum of first mode through Wiener filter of residualsu_hat_plus(n+1,:,k) = (f_hat_plus - sum_uk - lambda_hat(n,:)/2)./(1+Alpha(1,k)*(freqs - omega_plus(n,k)).^2);% update first omega if not held at 0if ~DComega_plus(n+1,k) = (freqs(T/2+1:T)*(abs(u_hat_plus(n+1, T/2+1:T, k)).^2)')/sum(abs(u_hat_plus(n+1,T/2+1:T,k)).^2);end% update of any other modefor k=2:K% accumulatorsum_uk = u_hat_plus(n+1,:,k-1) + sum_uk - u_hat_plus(n,:,k);% mode spectrumu_hat_plus(n+1,:,k) = (f_hat_plus - sum_uk - lambda_hat(n,:)/2)./(1+Alpha(1,k)*(freqs - omega_plus(n,k)).^2);% center frequenciesomega_plus(n+1,k) = (freqs(T/2+1:T)*(abs(u_hat_plus(n+1, T/2+1:T, k)).^2)')/sum(abs(u_hat_plus(n+1,T/2+1:T,k)).^2);end% Dual ascentlambda_hat(n+1,:) = lambda_hat(n,:) + tau*(sum(u_hat_plus(n+1,:,:),3) - f_hat_plus);% loop countern = n+1;% converged yet?uDiff = eps;for i=1:KuDiff = uDiff + 1/T*(u_hat_plus(n,:,i)-u_hat_plus(n-1,:,i))*conj((u_hat_plus(n,:,i)-u_hat_plus(n-1,:,i)))';enduDiff = abs(uDiff);end%------ Postprocessing and cleanup% discard empty space if converged early
N = min(N,n);
omega = omega_plus(1:N,:);% Signal reconstruction
u_hat = zeros(T, K);
u_hat((T/2+1):T,:) = squeeze(u_hat_plus(N,(T/2+1):T,:));
u_hat((T/2+1):-1:2,:) = squeeze(conj(u_hat_plus(N,(T/2+1):T,:)));
u_hat(1,:) = conj(u_hat(end,:));u = zeros(K,length(t));for k = 1:Ku(k,:)=real(ifft(ifftshift(u_hat(:,k))));
end% remove mirror part
u = u(:,T/4+1:3*T/4);% recompute spectrum
clear u_hat;
for k = 1:Ku_hat(:,k)=fftshift(fft(u(k,:)))';
endend
智能优化算法优化VMD
VMD(变分模态分解)在解决EMD(经验模态分解)的模态混叠问题上表现出色,但其性能高度依赖于参数的选择,特别是惩罚因子alpha和模态分解数k。手动调整这些参数既繁琐又不经济,因此研究者们已经开始探索利用群智能优化算法来自动选择这些参数。
-
定义优化目标函数:根据具体的应用需求,选择一个或多个评估指标来定义优化目标函数。
-
初始化算法参数:设置群智能优化算法的参数,如粒子数量、迭代次数、搜索空间范围等。
-
初始化候选解:在搜索空间内随机初始化一组候选解,每个候选解代表一组VMD参数(
alpha和k)。 -
评估候选解:使用VMD对每个候选解进行信号分解,并计算优化目标函数的值。
-
更新候选解:根据优化目标函数的值,利用群智能优化算法的更新机制来更新候选解。
-
终止条件判断:检查是否满足终止条件(如达到最大迭代次数、优化目标函数值收敛等)。如果满足,则输出最优解;否则,返回步骤4继续迭代。
clc; %% 加载数据
load('data.mat');
signal = signal_data; % 假设数据变量名为 signal_data %% 设定优化算法参数
Max_iter = 10; % 迭代次数
sizepop = 20; % 种群规模
lb = [1000, 3]; % 变量下限(VMD 参数 alpha 和 K 的下限)
ub = [3000, 10]; % 变量上限(VMD 参数 alpha 和 K 的上限)
dim = length(lb); % 优化参数个数(VMD 的 alpha 和 K) fobj = @(x) -objfun(x, signal); %% 调用蜣螂优化算法进行VMD参数寻优
[best_fitness, best_params, Convergence_curve] = DBO(sizepop, Max_iter, lb, ub, dim, fobj); %% 最优参数
alpha_opt = best_params(1);
K_opt = round(best_params(2));
tau = 0;
DC = 0;
init = 1;
tol = 1e-6; %% VMD分解
[u_opt, u_hat_opt, omega_opt] = VMD(signal, alpha_opt, tau, K_opt, DC, init, tol); %% 绘制VMD分解曲线图
figure;
for k = 1:length(u_opt) subplot(length(u_opt), 1, k); plot(u_opt{k}); title(['模态 ', num2str(k)]); xlabel('时间'); ylabel('振幅');
end %% 绘制优化算法的迭代曲线图
figure;
plot(1:length(Convergence_curve), Convergence_curve);
title('优化算法的迭代曲线');
xlabel('迭代次数');
ylabel('适应度值');
相关文章:
【matlab】信号分解/故障诊断——智能优化算法优化VMD
目录 引言 应用领域 VMD代码实现 智能优化算法优化VMD 引言 VMD(变分模态分解)是一种新的非线性自适应信号分解方法,它通过变分原理将复杂信号分解为若干个具有不同频率中心和带宽的本征模态函数(Intrinsic Mode Functions, …...
【重磅】万能模型-直接能换迪丽热巴的模型
万能模型,顾名思义,不用重新训练src,直接可以用的模型,适应大部分原视频脸 模型用法和正常模型一样,但可以跳过训练阶段!直接到合成阶段使用该模型 本模型没有做Xseg,对遮挡过多的画面不会自动适…...
Web基础和HTTP协议
web基础与HTTP协议: web:就是我们所说的网页。打开网站展示的页面。(全球广域网,万维网) world wide web 分布式图形信息系统 http https 超文本传输协议 分布式:计算机系统或者应用程序分布在多台计算机或者服务器上。通过计算机网络互相通信和协作。共同完成任…...
Mini-L-CTF-2022 minispringboot Thymeleaf模板注入 spel的绕过
Mini-L-CTF-2022 minispringboot Thymeleaf模板注入 spel的绕过 就是一个低版本的Thymeleaf注入 漏洞点 public class MainController {GetMapping({"/{language}"})public String test(PathVariable(name "language") String language, RequestParam(…...
LLM - 神经网络的组成
1. 一个神经元的结构:即接受多个输入X向量,在一个权重向量W和一个偏执标量b的作用下,经过激活函数后,产生一个输出。 2. 一层神经网络的结构:该层网络里的每个神经元并行计算,得到各自的输出;计算方式是输入…...
C++:拷贝构造函数
拷贝构造函数的引入 用对象来初始化对象 (1)简单变量定义时,可以直接初始化,也可以用另一个同类型变量来初始化。举例说明 (2)用class来定义对象时,可以直接初始化,也可以用另一个对象来初始化。举例说明 testperson xiaohong(na…...
云服务出现故障这样处理
无法连接云服务器 服务器远程无法连接时,可通过7ECloud控制台进行连接。 常见故障现象 1、ping不通 2、ping丢包 3、部分端口telnet不通 4、全部端口telnet不通 5、广告、弹窗植入 6、域名无法访问IP访问正常 常见故障原因 1、云服务器过期、关机或者EIP被…...
CVPR2024自动驾驶轨迹预测方向的论文整理
2024年自动驾驶轨迹预测方向的论文汇总 1、Producing and Leveraging Online Map Uncertainty in Trajectory Prediction 论文地址:https://arxiv.org/pdf/2403.16439 提出针对在线地图不确定性带给轨迹预测的影响对应的解决方案。 在轨迹预测中,利用在…...
数据结构——队列练习题
在C语言中,.和->运算符用于访问结构体的成员变量。它们之间的区别在于:.运算符用于访问结构体变量的成员。->运算符用于访问结构体指针变量的成员 1a(rear指向队尾元素后一位,判空判满时牺牲一个存储单元) 首先…...
PLL和CDR的内部结构及其区别
比较PLL和CDR的内部结构及其区别: 基本结构: PLL(相位锁定环): 相位检测器环路滤波器压控振荡器(VCO)分频器(可选,用于频率合成) CDR(时钟数据恢复…...
HarmonyOS APP应用开发项目- MCA助手(Day02持续更新中~)
简言: gitee地址:https://gitee.com/whltaoin_admin/money-controller-app.git端云一体化开发在线文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/agc-harmonyos-clouddev-view-0000001700053733-V5注:…...
华为交换机 LACP协议
华为交换机支持的LACP协议,即链路聚合控制协议,是一种基于IEEE 802.3ad标准的动态链路聚合与解聚合的协议。它允许设备根据自身配置自动形成聚合链路并启动聚合链路收发数据。 在LACP模式下,链路聚合组能够自动调整链路聚合,维护…...
node 下载文件到网络共享目录
1、登录网络共享计算器 2、登录进入后复制要存储文件的目录路径 例如: \\WIN-desktop\aa\bb\cc 3、node 下载后写入网络共享目录 注意(重要):在使用UNC路径时,请确保你正确转义了反斜杠(使用两个反斜杠来表示一个&…...
STM32基础知识
一.STM32概述 第一款STM32单片机发布的时间为2007年6月11日。由意法半导体(ST)公司推出,是STM32系列中的首款产品,具体型号为STM32F1,它是一款基于Cortex-M内核的32位微控制器(MCU)。 STM32F1…...
安装docker版rabbitmq 3.12
本文介绍在Ubuntu22中安装docker版rabbitmq 3.12。 一、拉取镜像 docker pull rabbitmq:3.12.14-management二、创建数据目录和docker-compose文件 创建目录: cd /root mkdir rabbitmq-docker cd rabbitmq-docker mkdir data chmod 777 data创建docker-compose配…...
c++重定向输出和输出(竞赛讲解)
1.命令行重定向 在命令行中指定输出文件 指令 .\重定向学习.exe > 1.txt 效果 命令行输入和输出 指令 .\重定向学习.exe < 2.txt > 1.txt 效果 代码 #include<bits/stdc++.h> using namespace std; int n; int main(){cin>>n;for(int i=0;i<n;i…...
实在智能对话钉钉:宜搭+实在Agent,AI时代的工作方式
比起一个需求需要等产品、技术排期,越来越多的人开始追求把自己武装成「全能战士」,通过低代码工具一搭,一个高效的工作平台便产生了。 宜搭是钉钉自研的低代码应用构建平台,无论是专业开发者还是没有代码基础的业务人员…...
MySQL的Docker部署方式
说明:Docker部署MySQL主要是简单快速,不会对电脑系统造成污染。假如你的本地没有Docker,或者你不会使用Docker,则使用PyCharm去启动MySQL,或者直接在本机安装MySQL都是可以的。最重要的是,你要有一个MySQL环境…...
光伏电站数据采集方案(基于工业路由器部署)
一、方案概述 本方案采用星创易联SR500工业路由器作为核心网关设备,实现对光伏电站现场数据的实时采集、安全传输和远程监控。SR500具备多接口、多功能、高可靠性等特点,能够满足光伏电站数据采集的各种需求。(key-iot.com/iotlist/sr500…...
一文让你彻底搞懂什么是CDN
一、引言 在当今互联网时代,网站的加载速度和稳定性是用户体验的关键因素之一。而CDN(Content Delivery Network,内容分发网络)作为提升网站性能的重要技术手段,受到了广泛的关注和应用。本篇博客将深入探讨CDN的工作…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...
java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...
【iOS】 Block再学习
iOS Block再学习 文章目录 iOS Block再学习前言Block的三种类型__ NSGlobalBlock____ NSMallocBlock____ NSStackBlock__小结 Block底层分析Block的结构捕获自由变量捕获全局(静态)变量捕获静态变量__block修饰符forwarding指针 Block的copy时机block作为函数返回值将block赋给…...
