当前位置: 首页 > news >正文

Matlab实现序贯变分模态分解(SVMD)

        大家好,我是带我去滑雪!

       序贯变分模态分解(SVMD) 是一种信号处理和数据分析方法。它可以将复杂信号分解为一系列模态函数,每个模态函数代表信号中的特定频率分量。 SVMD 的主要目标是提取信号中的不同频率分量并将其重构为原始信号。SVMD的基本原理是通过变分模态分解的方式将信号分解为多个模态函数。在每个迭代步骤中,SVMD 通过最小化信号和模态函数之间的差异来更新模态函数。重复这个过程直到收敛。得到的模态函数可用于重建原始信号。

        SVMD 的另一个关键特征是连续分解。在每个迭代步骤中,SVMD 从信号中提取主频率分量并将其从信号中删除。这样,每次迭代步骤都会提取信号中的一个频率分量,直到提取完所有频率分量。这种逐次分解方法可以更好地捕获信号中的不同频率分量。SVMD 在信号处理和数据分析方面有着广泛的应用。它可用于去噪、特征提取、频谱分析等多个领域。通过将信号分解为模态函数,SVMD可以更好地理解和描述信号的频率特性。这对于信号处理和数据分析非常重要。SVMD的数据重构是将分解后的模态函数重新组合成原始信号的过程。通过各模态函数的加权相加即可得到重构信号。这个过程可以用来恢复原始信号的频率特性,并且可以根据需要进一步分析和处理。

         综上所述,逐次变分模态分解是一种有效的信号处理和数据分析方法。它可以将复杂信号分解为多个模态函数,并可以通过数据重构将它们重新组合成原始信号。 SVMD有着广泛的应用范围,对于理解和描述信号的频率特性非常有帮助。通过深入研究和应用SVMD,我们可以更好地处理和分析各类信号和数据。下面开始代码实战。

(1)SVMD实现

function [u,u_hat,omega]=svmd(signal,maxAlpha,tau,tol,stopc,init_omega)%% ------------ Part 1: Start initializingy = sgolayfilt(signal,8,25); %--filtering the input to estimate the noise
signoise=signal-y; %-estimating the noisesave_T = length(signal);
fs = 1/save_T;%______________________________________________________________________
%
%           Mirroring the signal and noise part to extend
%______________________________________________________________________
T = save_T;
f_mir=zeros(1,T/2);
f_mir_noise=zeros(1,T/2);
f_mir(1:T/2) = signal(T/2:-1:1);
f_mir_noise(1:T/2) = signoise(T/2:-1:1);
f_mir(T/2+1:3*T/2) = signal;
f_mir_noise(T/2+1:3*T/2) = signoise;
f_mir(3*T/2+1:2*T) = signal(T:-1:T/2+1);
f_mir_noise(3*T/2+1:2*T) = signoise(T:-1:T/2+1);f = f_mir;
fnoise=f_mir_noise;
%______________________________________________________________________
%______________________________________________________________________T = length(f);%------------- time domain (t -->> 0 to T)
t = (1:T)/T;udiff = tol+eps; %------ update stepomega_freqs = t-0.5-1/T;%------------- discretization of spectral domain%______________________________________________________________________
%
%     FFT of signal(and Hilbert transform concept=making it one-sided)
%______________________________________________________________________f_hat = fftshift((fft(f)));
f_hat_onesided = f_hat;
f_hat_onesided(1:T/2) =0;
f_hat_n = fftshift((fft(fnoise)));
f_hat_n_onesided = f_hat_n;
f_hat_n_onesided(1:T/2) =0;
%______________________________________________________________________
%______________________________________________________________________noisepe=norm(f_hat_n_onesided,2).^2;%------------- noise power estimationN = 300;%------------ Max. number of iterations to obtain each modeomega_L = zeros(N, 1);%----------- Initializing omega_dswitch nargincase 6if init_omega == 0omega_L(1) = 0;elseomega_L(1) = sort(exp(log(fs) + (log(0.5)-log(fs))*rand(1,1)));endotherwiseinit_omega = 0;omega_L(1) = 0;
endminAlpha=10; %------ the initial value of alpha
Alpha=minAlpha; %------ the initial value of alpha
alpha=zeros(1,1);
%----------- dual variables vector
lambda = zeros(N, length(omega_freqs));%---------- keeping changes of mode spectrum
u_hat_L = zeros(N, length(omega_freqs));n = 1; %------------------ main loop counterm=0;      %------ iteration counter for increasing alpha
SC2=0; % ------ main stopping criteria index
l=1;  %------ the initial number of modes
bf=0;  % ----- bit flag to increase alpha
BIC=zeros(1,1);  % ------- the initial value of Bayesian indexh_hat_Temp=zeros(2, length(omega_freqs));%-initialization of filter matrixu_hat_Temp=zeros(1,length(omega_freqs),1);%- matrix1 of modes 
u_hat_i=zeros(1, length(omega_freqs));%- matrix2 of modesn2=0; % ---- counter for initializing omega_Lpolm=zeros(2,1);  % ---- initializing Power of Last Mode indexomega_d_Temp=zeros(1,1);%-initialization of center frequencies vector1
sigerror=zeros(1,1);%initializing signal error index for stopping criteria
gamma=zeros(1,1);%----initializing gamma
normind=zeros(1,1);%% ---------------------- Part 2: Main loop for iterative updates
while (SC2~=1)while (Alpha(1,1)<(maxAlpha+1)) while ( udiff > tol &&  n < N ) %------------------ update uLu_hat_L(n+1,:)= (f_hat_onesided+...((Alpha(1,1).^2)*(omega_freqs - omega_L(n,1)).^4).*u_hat_L(n,:)+...lambda(n,:)/2)./(1+(Alpha(1,1).^2)*(omega_freqs - omega_L(n,1)).^4 ....*((1+(2*Alpha(1,1))*(omega_freqs - omega_L(n,1)).^2))+sum(h_hat_Temp));%------------------ update omega_Lomega_L(n+1,1) = (omega_freqs(T/2+1:T)*(abs(u_hat_L(n+1, T/2+1:T)).^2)')/sum(abs(u_hat_L(n+1,T/2+1:T,1)).^2);%------------------ update lambda (dual ascent)lambda(n+1,:) = lambda(n,:) + tau*(f_hat_onesided...-(u_hat_L(n+1,:) + (((Alpha(1,1).^2)*(omega_freqs - omega_L(n,1)).^4.....*(f_hat_onesided - u_hat_L(n+1,:)-sum(u_hat_i)+lambda(n,:)/2)-sum(u_hat_i))..../(1+(Alpha(1,1).^2)*(omega_freqs - omega_L(n,1)).^4 ))+...sum(u_hat_i)));udiff = eps;%------------------ 1st loop criterionudiff = udiff + (1/T*(u_hat_L(n+1,:)-u_hat_L(n,:))*conj((u_hat_L(n+1,:)-u_hat_L(n,:)))').../ (1/T*(u_hat_L(n,:))*conj((u_hat_L(n,:)))');udiff = abs(udiff);n = n+1;end%% ---- Part 3: Increasing Alpha to achieve a pure modeif abs(m-log(maxAlpha))> 1m=m+1;elsem=m+.05;bf=bf+1;endif  bf>=2Alpha=Alpha+1;endif   Alpha(1,1)<=(maxAlpha-1)  %exp(SC1)<=(maxAlpha)if (bf ==1)Alpha(1,1)=maxAlpha-1;elseAlpha(1,1)=exp(m);endomega_L=omega_L(n,1);% ------- Initializingudiff = tol+eps; % update steptemp_ud = u_hat_L(n,:);%keeping the last update of obtained moden = 1; % loop counterlambda = zeros(N, length(omega_freqs));u_hat_L = zeros(N, length(omega_freqs));u_hat_L(n,:)=temp_ud;endend%% Part 4: Saving the Modes and Center Frequenciesomega_L=omega_L(omega_L>0);u_hat_Temp(1,:,l)=u_hat_L(n,:);omega_d_Temp(l)=omega_L(n-1,1);alpha(1,l)=Alpha(1,1);Alpha(1,1)=minAlpha;bf=0;%------------------------------initializing omega_Lif init_omega >0ii=0;while (ii<1 && n2 < 300)omega_L = sort(exp(log(fs) + (log(0.5)-log(fs))*rand(1,1)));checkp=abs(omega_d_Temp-omega_L);if (size(find(checkp<0.02),2)<=0) % it will continue if difference between previous vector of omega_d and the current random omega_plus is about 2Hzii=1;endn2=n2+1;endelseomega_L=0;endudiff = tol+eps; % update steplambda = zeros(N, length(omega_freqs));gamma(l)=1;h_hat_Temp(l,:)=gamma(l) ./((alpha(1,l)^2)*...(omega_freqs - omega_d_Temp(l)).^4);%---------keeping the last desired mode as one of the extracted modesu_hat_i(l,:)=u_hat_Temp(1,:,l);%%  Part 5: Stopping Criteria:if nargin >=5 % checking input of the functionswitch stopccase 1%-----------------In the Presence of Noiseif size(u_hat_i,1) == 1sigerror(l)=  norm((f_hat_onesided-(u_hat_i)),2)^2;elsesigerror(l)=  norm((f_hat_onesided-sum(u_hat_i)),2)^2;endif ( n2 >= 300 || sigerror(l) <= round(noisepe))SC2=1;endcase 2%-----------------Exact Reconstructionsum_u=sum(u_hat_Temp(1,:,:),3); % -- sum of current obtained modesnormind(l)=(1/T) *(norm(sum_u-f_hat_onesided).^2)..../((1/T) * norm(f_hat_onesided).^2);if( n2 >= 300 || normind(l) <.005 )SC2=1;endcase 3%------------------Bayesian Methodif size(u_hat_i,1) == 1sigerror(l)= norm((f_hat_onesided-(u_hat_i)),2)^2;elsesigerror(l)= norm((f_hat_onesided-sum(u_hat_i)),2)^2;endBIC(l)=2*T*log(sigerror(l))+(3*l)*log(2*T);if(l>1)if(BIC(l)>BIC(l-1))SC2=1;endendotherwise%------------------Power of the Last Modeif (l<2)polm(l)=norm((4*Alpha(1,1)*u_hat_i(l,:)./(1+2*Alpha(1,1)*...(omega_freqs-omega_d_Temp(l)).^2))*u_hat_i(l,:)',2);polm_temp=polm(l);polm(l)=polm(l)./max(polm(l));elsepolm(l)=norm((4*Alpha(1,1)*u_hat_i(l,:)./(1+2*Alpha(1,1)*...(omega_freqs-omega_d_Temp(l)).^2))*u_hat_i(l,:)',2);polm(l)=polm(l)./polm_temp;endif (l>1 && (abs(polm(l)-polm(l-1))<0.001) )SC2=1;endendelse%------------------Power of the Last Modeif (l<2)polm(l)=norm((4*Alpha(1,1)*u_hat_i(l,:)./(1+2*Alpha(1,1)*...(omega_freqs-omega_d_Temp(l)).^2))*u_hat_i(l,:)',2);polm_temp=polm(l);polm(l)=polm(l)./max(polm(l));elsepolm(l)=norm((4*Alpha(1,1)*u_hat_i(l,:)./(1+2*Alpha(1,1)*...(omega_freqs-omega_d_Temp(l)).^2))*u_hat_i(l,:)',2);polm(l)=polm(l)./polm_temp;endif (l>1 && (abs(polm(l)-polm(l-1))<tol) )SC2=1;endend%% Part 6: Resetting the counters and initializations  u_hat_L = zeros(N, length(omega_freqs));n = 1; % ----- reset the loop counterl=l+1; %---(number of obtained modes)+1m=0;n2=0;
end%% ------------------ Part 7: Signal Reconstructionomega = omega_d_Temp;
L=length(omega); %------number of modesu_hat = zeros(T, L);
u_hat((T/2+1):T,:) = squeeze(u_hat_Temp(1,(T/2+1):T,:));
u_hat((T/2+1):-1:2,:) = squeeze(conj(u_hat_Temp(1,(T/2+1):T,:)));
u_hat(1,:) = conj(u_hat(end,:));u = zeros(L,length(t));for l = 1:Lu(l,:)=real(ifft(ifftshift(u_hat(:,l))));
end[omega,indic]=sort(omega);
u=u(indic,:);
%---------- remove mirror part
u = u(:,T/4+1:3*T/4);%--------------- recompute spectrum
clear u_hat;
for l = 1:Lu_hat(:,l)=fftshift(fft(u(l,:)))';
endend

(2)SVMD绘图

function Huatu_svmd(emd_imf,signal,t,Fs)
if nargin <4
figure('Name','SVMD分解与各IMF分量时域图','Color','white');set(gcf, 'Position', [400 100 600 700]);
subplot(size(emd_imf,1)+1,1,1);
plot(t,signal,'k');grid on;
ylabel('\fontname{宋体}原始数据');title('\fontname{Times new roman}SVMD\fontname{宋体}分解');
set(gca,'XTick',[]);
for i = 2:size(emd_imf,1)+1subplot(size(emd_imf,1)+1,1,i);plot(t,emd_imf(i-1,:),'k');ylabel(['\fontname{Times new roman}IMF',num2str(i-1)]);if (i ~= size(emd_imf,1)+1)set(gca,'XTick',[]);endif (i == size(emd_imf,1)+1)ylabel('\fontname{Times new roman}RSE');xlabel('\fontname{Times new roman}Time/\it{s}');endgrid on;
end
else
figure('Name','SVMD分解与各IMF分量频谱对照图','Color','white');set(gcf, 'Position', [400 100 600 700]);
subplot(size(emd_imf,1)+1,2,1);
plot(t,signal,'k');grid on;
ylabel('\fontname{宋体}原始数据');
title('\fontname{Times new roman}SVMD\fontname{宋体}分解');
set(gca,'XTick',[]);
subplot(size(emd_imf,1)+1,2,2);
pFFT(signal,Fs);grid on;
title('\fontname{宋体}对应频谱');
set(gca,'XTick',[]);
for i = 2:size(emd_imf,1)+1subplot(size(emd_imf,1)+1,2,i*2-1);plot(t,emd_imf(i-1,:),'k');ylabel(['\fontname{Times new roman}IMF',num2str(i-1)]);if (i ~= size(emd_imf,1)+1)set(gca,'XTick',[]);endif (i == size(emd_imf,1)+1)ylabel('\fontname{Times new roman}RSE');xlabel('\fontname{Times new roman}Time/\it{s}');endgrid on;subplot(size(emd_imf,1)+1,2,i*2);pFFT(emd_imf(i-1,:),Fs);if (i ~= size(emd_imf,1)+1)set(gca,'XTick',[]);endif (i == size(emd_imf,1)+1)xlabel('\fontname{Times new roman}Frequency/\it{Hz}');endgrid on;
end
end

(3)测试

clc
clear
close all
SIG=importdata('NASA电容量.csv');
sig=SIG(2:161,2);%%想要分解哪一列就填几
%(1)导入时间数据来设置时间
t=SIG(2:161,2);
Fs=1/(t(2)-t(1));
%(2)设置采样率来设置时间
% N=length(sig);
% Fs=1000;%%采样频率自己设置
% t1=((0:N-1)*1/Fs)';
% SNR = 10;    
% sig = awgn(sig,SNR,'measured');   
figure('Name','原始信号');
% subplot(211);
plot(t,sig,'k');
title('\fontname{宋体}原始信号');
ylabel('\fontname{宋体}幅值');
xlabel('\fontname{Times new roman}Time/\it{s}');
% subplot(212);pFFT(sig,Fs)
% title('\fontname{宋体}频谱图');
% ylabel('\fontname{宋体}幅值');
% xlabel('\fontname{Times new roman}Frequency/\it{Hz}');
maxAlpha=1000; %compactness of mode
tau=0;%time-step of the dual ascent
tol=1e-6; %tolerance of convergence criterion;
stopc=4;%the type of stopping criteria
[svmd_imf,uhat,omega]=svmd(sig,maxAlpha,tau,tol,stopc);
Huatu_svmd(svmd_imf,sig,t);
svmd_imf=svmd_imf';

需要数据集的家人们可以去百度网盘(永久有效)获取:

链接:https://pan.baidu.com/s/173deLlgLYUz789M3KHYw-Q?pwd=0ly6
提取码:2138 


更多优质内容持续发布中,请移步主页查看。

博主的WeChat:TCB1736732074

   点赞+关注,下次不迷路!

相关文章:

Matlab实现序贯变分模态分解(SVMD)

大家好&#xff0c;我是带我去滑雪&#xff01; 序贯变分模态分解(SVMD) 是一种信号处理和数据分析方法。它可以将复杂信号分解为一系列模态函数&#xff0c;每个模态函数代表信号中的特定频率分量。 SVMD 的主要目标是提取信号中的不同频率分量并将其重构为原始信号。SVMD的基…...

云安全与云计算的关系

云计算又被称为网格计算&#xff0c;是分布式计算的一种&#xff0c;能够将大量的数据计算处理程序通过网络“云”分解成多个小程序&#xff0c;然后将这些小程序的结果反馈给用户。云计算主要就是能够解决任务分发&#xff0c;并进行计算结果的合并。 云安全则是我国企业创造的…...

WPF 界面变量绑定(通知界面变化)

1、继承属性变化接口 public partial class MainWindow : Window, INotifyPropertyChanged {// 通知界面属性发生变化public event PropertyChangedEventHandler PropertyChanged;private void RaisePropertyChanged(string propertyName){PropertyChangedEventHandler handle…...

eclipse导入svn项目

1、配置maven 2、用svn引入项目 3一直点击next,到最后选完成。...

Prompt提示工程上手指南:基础原理及实践(四)-检索增强生成(RAG)策略下的Prompt

前言 此篇文章已经是本系列的第四篇文章&#xff0c;意味着我们已经进入了Prompt工程的深水区&#xff0c;掌握的知识和技术都在不断提高&#xff0c;对于Prompt的技巧策略也不能只局限于局部运用而要适应LLM大模型的整体框架去进行改进休整。较为主流的LLM模型框架设计可以基…...

阿里云倚天云服务器怎么样?如何收费?

阿里云倚天云服务器CPU采用倚天710处理器&#xff0c;租用倚天服务器c8y、g8y和r8y可以享受优惠价格&#xff0c;阿里云服务器网aliyunfuwuqi.com整理倚天云服务器详细介绍、倚天710处理器性能测评、CIPU架构优势、倚天服务器使用场景及生态支持&#xff1a; 阿里云倚天云服务…...

海外社交营销为什么用云手机?不用普通手机?

海外社交营销作为企业拓展海外市场的重要手段&#xff0c;正日益受到企业的青睐。云手机以其成本效益和全球性特征&#xff0c;成为海外社交营销领域的得力助手。那么&#xff0c;究竟是什么特性使得越来越多的企业选择利用云手机进行海外社交营销呢&#xff1f;下文将对此进行…...

【Mysql数据库基础05】子查询 where、from、exists子查询、分页查询

where、from、exists子查询、分页查询 1 where子查询1.1 where后面的标量子查询1.1.1 having后的标量子查询 1.2 where后面的列子查询1.3 where后面的行子查询&#xff08;了解即可&#xff09; 2 from子查询3 exists子查询&#xff08;相关子查询&#xff09;4 分页查询5 联合…...

在Linux/Debian/Ubuntu上通过 Azure Data Studio 管理 SQL Server 2019

Microsoft 提供 Azure Data Studio&#xff0c;这是一种可在 Linux、macOS 和 Windows 上运行的跨平台数据库工具。 它提供与 SSMS 类似的功能&#xff0c;包括查询、脚本编写和可视化数据。 要在 Ubuntu 上安装 Azure Data Studio&#xff0c;可以按照以下步骤操作&#xff1…...

Java代码基础算法练习-搬砖问题-2024.03.25

任务描述&#xff1a; m块砖&#xff0c;n人搬&#xff0c;男搬4&#xff0c;女搬3&#xff0c;两个小孩抬一砖&#xff0c;要求一次全搬完&#xff0c;问男、 女、小孩各若干&#xff1f; 任务要求&#xff1a; 代码示例&#xff1a; package M0317_0331;import java.util.S…...

Tomcat调优

1、调整线程数 <Connector port"8080" maxHttpHeaderSize"8192"maxThreads"1900" minSpareThreads"250" maxSpareThreads"750"enableLookups"false" redirectPort"8443" acceptCount"100"…...

每日OJ题_栈①_力扣1047. 删除字符串中的所有相邻重复项

目录 力扣1047. 删除字符串中的所有相邻重复项 解析代码 力扣1047. 删除字符串中的所有相邻重复项 1047. 删除字符串中的所有相邻重复项 难度 简单 给出由小写字母组成的字符串 S&#xff0c;重复项删除操作会选择两个相邻且相同的字母&#xff0c;并删除它们。 在 S 上反…...

SQLServer SEQUENCE用法

SEQUENCE&#xff1a;数据库中的序列生成器 在数据库管理中&#xff0c;经常需要生成唯一且递增的数值序列&#xff0c;用于作为主键或其他需要唯一标识的列的值。为了实现这一功能&#xff0c;SQL Server 引入了 SEQUENCE 对象。SEQUENCE 是一个独立的数据库对象&#xff0c;用…...

Java中的代理模式(动态代理和静态代理)

代理模式 我们先了解一下代理模式&#xff1a; 在开发中&#xff0c;当我们要访问目标类时&#xff0c;不是直接访问目标类&#xff0c;而是访问器代理类。通过代理类调用目标类完成操作。简单来说就是&#xff1a;把直接访问变为间接访问。 这样做的最大好处就是&#xff1a…...

强化学习之父Richard Sutton:通往AGI的另一种可能

2019年&#xff0c;强化学习之父、阿尔伯塔大学教授Richard Sutton发表了后来被AI领域奉为经典的The Bitter lesson&#xff0c;这也是OpenAI研究员的必读文章。 在这篇文章中&#xff0c;Richard指出&#xff0c;过去 70 年来&#xff0c;AI 研究的一大教训是过于重视人类既有…...

【智能算法】秃鹰搜索算法(BES)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2020年&#xff0c; Alsattar等人受到秃鹰猎食自然行为启发&#xff0c;提出了秃鹰搜索算法&#xff08;Bald Eagle Search&#xff0c;BES&#xff09;。 2.算法原理 2.1算法思想 BES主要分为三…...

前端并发控制

本文讲解Promise&#xff0c;callback&#xff0c;RxJS多种方式实现并发限制 1.Promise 目前来说&#xff0c;Promise是最通用的方案&#xff0c;一般我们最先想到Promise.all&#xff0c;当然最好是使用新出的Promise.allsettled。 下面简单介绍下二者的区别&#xff0c;假…...

基于YOLOv8深度学习的橙子病害智能诊断与防治系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标分类

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…...

Java中的多线程详解(超级简单理解)(上篇)

使用工具 IntelliJ IDEA Community Edition 2023.1.4 使用语言 Java8 代码能力快速提升小方法&#xff0c;看完代码自己敲一遍&#xff0c;十分有用 目录 1.多线程概述 1.1 进程与线程 1.2 多线程的运行机制 1.3 多线程的优势 2.多线程编程 2.1 Thread类介绍 2.2 …...

Elastic-Job 分布式任务调度

一、使用场景 &#xff08;1&#xff09;分布式项目中 定时任务。如果只部署一台机器&#xff0c;可用性无法保证&#xff0c;如果定时任务机器宕机&#xff0c;无法故障转移&#xff0c;如果部署多台机器时&#xff0c;同一个任务会执行多次&#xff0c;任务重复执行也会出问…...

协程的常用阻塞函数

以下是一些常见的阻塞函数示例&#xff1a; 1. **Thread.sleep()** 阻塞当前线程一段时间。 kotlin Thread.sleep(1000) // 阻塞线程 1 秒 2. **InputStream.read()** 从输入流中读取数据时会阻塞&#xff0c;直到有数据可用或流结束。 kotlin val inputStream FileInputStre…...

C#子线程更新主线程UI及委托回调使用示例

1.声明线程方法 2.线程中传入对象 3.声明委托与使用 声明委托对象 委托作为参数传入方法 4.在线程中传入委托 5.调用传入的委托...

使用VuePress2.X构建个人知识博客,并且用个人域名部署到GitHub Pages中

使用VuePress2.X构建个人知识博客&#xff0c;并且用个人域名部署到GitHub Pages中 什么是VuePress VuePress 是一个以 Markdown 为中心的静态网站生成器。你可以使用 Markdown 来书写内容&#xff08;如文档、博客等&#xff09;&#xff0c;然后 VuePress 会帮助你生成一个…...

35 C 语言字符串转数值函数详解:strtof、strtod、strtold(含 errno 处理、ERANGE 错误)

1 strtof() 函数 1.1 函数原型 #include <stdlib.h> // 必须包含这个头文件才能使用 strtof() #include <errno.h> // 包含 errno 和 ERANGE #include <float.h> // 包含 FlOAT_MAX 和 FLOAT_MIN #include <math.h> // 包含 HUGE_VALF(inf)float…...

springCloud2025+springBoot3.5.0+Nacos集成redis从nacos拉配置起服务

文章目录 前言一、网关gateway选型1. 响应式编程模型2. 网关的特定需求3. 技术栈一致性4. 性能对比5. 实际应用场景优势 二、redis的集成1.引入库2.配置类A、自定义配置类RedisAfterNacosAutoConfigurationB、自定义配置类RedisConfig 总结 前言 最近在搭建最新的springCloud …...

宝塔面板安装nodejs后,通过node -v获取不到版本号,报错node: command not found

如果在 宝塔面板 安装了 Node.js&#xff0c;但运行 node -v 或 npm -v 时提示 command not found&#xff0c;通常是因为 Node.js 的路径未正确添加到系统环境变量。以下是解决方法&#xff1a; 1. 确认 Node.js 是否安装成功 &#xff08;1&#xff09;检查宝塔面板的 Node.…...

HttpURLConnection实现

我有一个接口 http://ip:port/Others/airportnew/&#xff0c;采用post方法调用&#xff0c;采用body方式传值&#xff0c;其body内容为{"data": {"data": {"image": ""}} }&#xff0c;现在我需要在java中调用这个接口&#xff0c;帮…...

在CSDN发布AWS Proton解决方案:实现云原生应用的标准化部署

引言&#xff1a;云原生时代的部署挑战 在云原生应用开发中&#xff0c;基础设施管理的复杂性已成为团队面临的核心挑战。随着微服务架构的普及&#xff0c;每个服务可能包含数十个AWS资源&#xff08;如Lambda、API Gateway、ECS集群等&#xff09;&#xff0c;传统的手动配置…...

agent 开发

什么是 agent&#xff1f; Agent智能体&#xff08;又称AI Agent&#xff09;是一种具备自主感知、决策与行动能力的智能系统&#xff0c;其核心在于模仿人类的认知过程来处理复杂任务。以下是其关键特性和发展现状的综合分析&#xff1a; 一、核心定义与特征 #‌## 自主决策…...

新华三H3CNE网络工程师认证—Easy IP

Easy IP 就是“用路由器自己的公网IP&#xff0c;给全家所有设备当共享门牌号”的技术&#xff01;&#xff08;省掉额外公网IP&#xff0c;省钱又省配置&#xff01;&#xff09; 生活场景对比&#xff0c;想象你住在一个小区&#xff1a;普通动态NAT&#xff1a;物业申请了 …...