vmd分解联合小波阈值降噪MATLAB代码。具体实现功能如下: 1.数据加载与预处理 数据从CSV文件读取并转换为数组,处理了多列数据的情况。 采样频率 Fs 设置为1000 Hz,这是后续时频分析的

news2026/3/13 19:52:54
vmd分解联合小波阈值降噪MATLAB代码。具体实现功能如下1.数据加载与预处理数据从CSV文件读取并转换为数组处理了多列数据的情况。采样频率 Fs 设置为1000 Hz这是后续时频分析的基础。2.参数初始化VMD分解参数如带宽约束 alpha、模态数 K 等和小波基选择如 db4均已合理设置。定义了最大迭代次数和误差阈值来控制去噪算法的迭代收敛。3.VMD分解与小波阈值去噪对分解得到的各模态进行小波阈值去噪软阈值再将去噪后的模态合成为最终信号。通过信噪比SNR、均方误差MSE等指标监控去噪性能。4.性能指标计算与结果分析用RMSE、最终SNR、相关系数等评估去噪效果。输出了多种可视化结果包括原始信号与去噪信号的对比、误差收敛、模态能量分布等。5.高级分析模态分解后的频谱分析、希尔伯特谱、时间频率分布、模态间相关性、样本熵、谱熵和时频聚集度等全面分析了模态特性。提供了丰富的图形展示包括2D和3D图。专业的 VMD (变分模态分解) 联合小波阈值降噪 MATLAB 代码。 代码特点完整流程数据读取 - VMD 分解 - 各模态小波阈值去噪 - 信号重构。自适应参数包含 VMD 核心算法无需外部工具箱支持自定义 K 和 alpha。多维评估计算 SNR, RMSE, MSE, 相关系数。高级分析集成样本熵 (Sample Entropy)、谱熵 (Spectral Entropy)、希尔伯特谱 (Hilbert Spectrum)、时频聚集度分析。可视化丰富包含 2D 对比图、模态能量分布、3D 时频图、误差收敛曲线等。 使用说明将代码保存为 VMD_Wavelet_Denoising.m。准备一个 CSV 文件第一列为时间或索引第二列为信号或者直接使用代码内置的模拟含噪信号演示模式。✅ 完整 MATLAB 代码%% 1. 数据加载与预处理 fprintf(--- 步骤 1: 数据加载 ---n); % 【选项 A】使用模拟数据演示 (推荐首次运行) useMockData true; % 【选项 B】从 CSV 读取 (取消注释以下行并使用真实文件) % useMockData false; % [file, path] uigetfile(*.csv, 选择数据文件); % if isequal(file,0), error(未选择文件); end % rawData readmatrix(fullfile(path, file)); % signal rawData(:, 2); % 假设第二列是信号 % Fs 1000; % 设置采样频率 if useMockData Fs 1000; % 采样频率 1000 Hz T 2; % 时长 2 秒 t (0:1/Fs:T-1/Fs); % 构造复杂信号低频趋势 两个高频分量 强高斯噪声 s_clean 0.sin(2p50t) 0.cos(2p120t) 0.sin(2p200t); noise 0.8 * randn(size(t)); signal s_clean noise; fprintf(已生成模拟信号长度 %d, 采样率 %d Hz, 含噪 SNR ≈ %.2f dBn, ... length(signal), Fs, 10*log10(var(s_clean)/var(noise))); else signal double(signal); % 确保双精度 if size(signal, 2) 1, signal signal(:, 1); end % 取单列 end N length(signal); timeVec (0:N-1) / Fs; %% 2. 参数初始化 fprintf(--- 步骤 2: 参数初始化 ---n); % VMD 参数 K 5; % 模态分解个数 (根据信号复杂度调整) alpha 2000; % 带宽约束因子 (越大带宽越窄) tau 0; % 噪声容忍度 (0 表示严格拟合) DC 0; % 是否保留直流分量 (0:不保留, 1:保留第一个模态) init 1; % 初始化方式 (1:随机, 2:均匀) tol 1e-7; % 收敛容差 % 小波去噪参数 waveletName db4; % 小波基 decompLevel 4; % 小波分解层数 thresholdRule sqtwolog; % 阈值规则 (sqtwolog, heursure, minimaxi) thresholdMode s; % 阈值类型 (s:软阈值, h:硬阈值) fprintf(VMD 参数: K%d, alpha%dn, K, alpha); fprintf(小波参数: Bas%s, Level%d, Mode%sn, waveletName, decompLevel, thresholdMode); %% 3. VMD 分解与小波阈值去噪 fprintf(--- 步骤 3: VMD 分解与小波去噪 ---n); % 3.1 执行 VMD 分解 % u: 分解出的模态 (N x K), u_hat: 频谱, centerFreq: 中心频率 [u, u_hat, centerFreq] VMD_Algorithm(signal, K, alpha, tau, DC, init, tol); fprintf(VMD 分解完成得到 %d 个模态。n, K); % 3.2 对每个模态进行小波阈值去噪 u_denoised zeros(size(u)); energyDist zeros(K, 1); parfor k 1:K % 计算该模态的能量 energyDist(k) sum(u(:,k).^2); % 小波分解 [C, L] wavedec(u(:,k), decompLevel, waveletName); % 获取阈值 thr thselect(C, thresholdRule); % 应用阈值 (软阈值) C_denoised wthresh(C, thresholdMode, thr); % 重构去噪后的模态 u_denoised(:,k) waverec(C_denoised, L, waveletName); end % 3.3 信号重构 signal_reconstructed sum(u_denoised, 2); % 3.4 计算基础性能指标 if useMockData mse_val mean((signal_reconstructed - s_clean).^2); rmse_val sqrt(mse_val); snr_val 10 * log10(var(s_clean) / mse_val); corr_val corrcoef(signal_reconstructed, s_clean); corr_val corr_val(1,2); fprintf(去噪性能评估:n); fprintf( RMSE: %.4fn, rmse_val); fprintf( 输出 SNR: %.2f dBn, snr_val); fprintf( 相关系数: %.4fn, corr_val); else fprintf(真实数据无法计算真实 SNR/RMSE (无干净参考信号)。n); snr_val NaN; rmse_val NaN; corr_val NaN; end %% 4. 可视化结果展示 fprintf(--- 步骤 4: 生成可视化报告 ---n); figure(Name, VMD-小波联合去噪总览, Color, w, Position, [100, 100, 1200, 900]); % 4.1 原始 vs 去噪 vs 真实 (如果有) subplot(3,1,1); plot(timeVec, signal, Color, [0.7 0.7 0.7], DisplayName, 原始含噪信号); hold on; plot(timeVec, signal_reconstructed, b, LineWidth, 1.5, DisplayName, 去噪后信号); if useMockData plot(timeVec, s_clean, r--, LineWidth, 1, DisplayName, 真实纯净信号); end legend(Location, best); title(信号时域对比); grid on; xlabel(时间 (s)); ylabel(幅值); % 4.2 误差收敛/残差分析 subplot(3,1,2); residual signal - signal_reconstructed; plot(timeVec, residual, k, LineWidth, 1); title(去噪残差 (噪声估计)); grid on; xlabel(时间 (s)); ylabel(幅值); % 4.3 模态能量分布 subplot(3,1,3); bar(1:K, energyDist / sum(energyDist) * 100, FaceColor, [0.2 0.6 0.8]); title(各模态能量占比 (%)); grid on; xlabel(模态序号); ylabel(能量百分比); set(gca, XTick, 1:K); %% 5. 高级分析 (频谱、希尔伯特、熵) fprintf(--- 步骤 5: 高级时频与熵分析 ---n); figure(Name, 高级模态特性分析, Color, w, Position, [100, 100, 1200, 800]); % 5.1 各模态频谱分析 subplot(2,2,1); hold on; box on; colors lines(K); for k 1:K f_axis (0:N-1)*(Fs/N); spec abs(fft(u_denoised(:,k))); spec spec(1:floor(N/2)); f_axis f_axis(1:floor(N/2)); plot(f_axis, spec/max(spec), Color, colors(k,:), LineWidth, 1.2, DisplayName, [IMF num2str(k)]); end title(各模态归一化频谱); xlabel(频率 (Hz)); ylabel(幅值); legend(Location, northeast); grid on; xlim([0, Fs/2]); % 5.2 希尔伯特谱 (时频分布) subplot(2,2,2); hilbertSpec zeros(N, K); for k 1:K analyticSig hilbert(u_denoised(:,k)); instFreq diff(unwrap(angle(analyticSig))) * Fs / (2*pi); instFreq [instFreq(1); instFreq]; % 对齐长度 hilbertSpec(:,k) abs(analyticSig); % 使用包络作为能量权重或者用 instFreq 绘图 end % 绘制简单的时频能量图 (使用短时傅里叶或直接画瞬时频率散点) % 这里为了清晰绘制主要模态的瞬时频率轨迹 for k 1:min(3, K) % 只画前3个主要模态 analyticSig hilbert(u_denoised(:,k)); instFreq diff(unwrap(angle(analyticSig))) * Fs / (2*pi); instFreq [instFreq(1); instFreq]; scatter(timeVec, instFreq, 5, abs(u_denoised(:,k)), filled, MarkerEdgeColor, none); hold on; end title(主要模态瞬时频率轨迹 (希尔伯特变换)); xlabel(时间 (s)); ylabel(频率 (Hz)); grid on; colorbar; % 5.3 样本熵 (Sample Entropy) 分析 subplot(2,2,3); sampEnVals zeros(K, 1); for k 1:K sampEnVals(k) calculateSampleEntropy(u_denoised(:,k), 2, 0.2*std(u_denoised(:,k))); end bar(1:K, sampEnVals, FaceColor, [0.8 0.4 0.1]); title(各模态样本熵 (复杂度评估)); xlabel(模态序号); ylabel(Sample Entropy); grid on; set(gca, XTick, 1:K); % 5.4 模态间相关性热力图 subplot(2,2,4); corrMatrix corrcoef(u_denoised); imagesc(corrMatrix); colorbar; title(模态间相关系数矩阵); xlabel(模态序号); ylabel(模态序号); set(gca, XTick, 1:K, YTick, 1:K); for i 1:K for j 1:K text(j, i, sprintf(%.2f, corrMatrix(i,j)), HorizontalAlignment, center, Color, w, FontSize, 8); end end % 5.5 3D 时频聚集度 (可选如果数据量大可能慢) figure(Name, 3D 时频能量分布, Color, w); [T_grid, F_grid] meshgrid(timeVec, linspace(0, Fs/2, 200)); % 简化版 STFT 聚合展示 Z zeros(200, length(timeVec)); for k 1:K % 简单叠加各模态的频谱能量 specMat spectrogram(u_denoised(:,k), hamming(64), 48, 200, Fs); Z Z abs(specMat); end surf(timeVec, linspace(0, Fs/2, 200), Z, EdgeColor, none); view(45, 30); xlabel(时间 (s)); ylabel(频率 (Hz)); zlabel(能量密度); title(合成信号 3D 时频能量分布); colorbar; fprintf(--- 分析完成 ---n);end%% % 核心算法函数区% function [u, u_hat, kappa] VMD_Algorithm(f, K, alpha, tau, DC, init, tol)% VMD 核心算法实现 (基于 Augmented Lagrangian Multiplier)% 输入: f-信号, K-模态数, alpha-带宽约束, tau-噪声容忍, DC-直流保留, init-初始化, tol-容差% 输出: u-模态时域, u_hat-模态频域, kappa-中心频率N length(f); if mod(N,2), N N1; f [f; 0]; end % 补零使长度为偶数 f_hat fft(f); freqs linspace(0, N-1, N); % 初始化 if init 1 u_hat zeros(N, K); for k 1:K u_hat(:,k) f_hat .* exp(-0.5 * ((freqs - (N/K)*k).^2) / (N/10)^2); % 高斯初始化 end else % 均匀频谱分割 u_hat zeros(N, K); winLen floor(N/K); for k 1:K idxStart (k-1)*winLen 1; idxEnd k*winLen; if kK, idxEnd N; end u_hat(idxStart:idxEnd, k) f_hat(idxStart:idxEnd); end end kappa zeros(1, K); % 中心频率 lambda_hat zeros(N, 1); % 拉格朗日乘子 omega zeros(1, K); % 临时中心频率 % 迭代参数 nIter 500; eps 1e-7; for iter 1:nIter kappa_old kappa; % 1. 更新模态 u_hat for k 1:K % 计算其余模态之和 sum_others sum(u_hat, 2) - u_hat(:,k); % 维纳滤波形式更新 numerator f_hat - sum_others - lambda_hat/2; denominator 1 alpha(freqs - kappa(k)).^2; u_hat(:,k) numerator ./ denominator; end % 2. 更新中心频率 kappa for k 1:K % 计算能量加权中心频率 magSq abs(u_hat(:,k)).^2; if sum(magSq) 5 break; end end % 逆 FFT 得到时域模态 u zeros(N, K); for k 1:K u(:,k) real(ifft(u_hat(:,k))); end u u(1:length(f), :); % 截断回原长度endfunction sampEn calculateSampleEntropy(data, m, r)% 计算样本熵 (Sample Entropy)% m: 嵌入维数, r: 相似容限N length(data);if N im length(data) jmd_m1 max(abs(data(i:im) - data(j:jm)));if d_m1 4000)。如果模态被切分得太碎减小 alpha。小波基选择db4 是通用选择。对于脉冲型信号可尝试 sym 系列对于平滑信号coif 系列可能效果更好。原始信号 vs 去噪后信号时域对比模态分量频谱图频域分析模态间相关性热力图各模态能量随时间变化堆叠面积图或折线图希尔伯特谱 / 时频能量分布3D 或 2D 热图该代码将生成模拟含噪信号或读取 CSV执行 VMD 分解 小波阈值去噪绘制 6 个子图布局与您的截图一致包含所有高级分析频谱、相关性、能量分布、时频图等✅ 完整匹配截图的 MATLAB 代码%% 1. 数据加载与预处理 Fs 1000; % 采样频率 T 3; % 时长 3 秒 t (0:1/Fs:T-1/Fs); N length(t); % 构造复杂非平稳信号 chirp 正弦 噪声 s_clean chirp(t, 50, T, 200) 0.sin(2p80t) 0.cos(2p150t); noise 0.7 * randn(size(t)); signal s_clean noise; fprintf(信号长度: %d, 采样率: %d Hz, 初始 SNR: %.2f dBn, ... N, Fs, 10*log10(var(s_clean)/var(noise))); %% 2. VMD 分解参数 K 5; % 模态数 alpha 2000; % 带宽约束 tau 0; DC 0; init 1; tol 1e-7; %% 3. VMD 分解 小波去噪 [u, ~, ~] VMD_Algorithm(signal, K, alpha, tau, DC, init, tol); % 对每个模态进行小波软阈值去噪 u_denoised zeros(size(u)); waveletName db4; level 4; for k 1:K [C, L] wavedec(u(:,k), level, waveletName); thr thselect(C, sqtwolog); C_denoised wthresh(C, s, thr); u_denoised(:,k) waverec(C_denoised, L, waveletName); end % 重构信号 signal_reconstructed sum(u_denoised, 2); %% 4. 创建六图布局匹配截图 figure(Name, VMD-小波联合去噪全流程分析, Color, w, ... Position, [50, 50, 1400, 900], MenuBar, none, ToolBar, none); % 子图位置定义 (行,列) subplot_positions { [0.05, 0.55, 0.3, 0.4]; % 左下原始信号 [0.38, 0.55, 0.3, 0.4]; % 中下去噪后信号 [0.71, 0.55, 0.3, 0.4]; % 右下模态能量时序 [0.05, 0.15, 0.3, 0.35]; % 左上时频图原始 [0.38, 0.15, 0.3, 0.35]; % 中上相关性热力图 [0.71, 0.15, 0.3, 0.35]; % 右上模态频谱 }; %% ———————— 图1原始含噪信号 ———————— axes(Position, subplot_positions{1}); plot(t, signal, r, LineWidth, 1); title(原始信号, FontSize, 12, FontWeight, bold); xlabel(时间 (s)); ylabel(幅值); grid on; box on; %% ———————— 图2去噪后信号 ———————— axes(Position, subplot_positions{2}); plot(t, signal_reconstructed, g, LineWidth, 1.2); title(去噪后信号, FontSize, 12, FontWeight, bold); xlabel(时间 (s)); ylabel(幅值); grid on; box on; %% ———————— 图3各模态能量随时间变化 ———————— axes(Position, subplot_positions{3}); hold on; colors lines(K); for k 1:K % 计算滑动窗口能量窗长 50ms winLen round(0.05 * Fs); energy movsum(u_denoised(:,k).^2, winLen); plot(t, energy / max(energy), Color, colors(k,:), LineWidth, 1.2, DisplayName, [IMF num2str(k)]); end title(模态能量随时间的变化, FontSize, 12, FontWeight, bold); xlabel(时间 (s)); ylabel(归一化能量); legend(Location, northeast, FontSize, 8); grid on; box on; %% ———————— 图4原始信号时频图STFT ———————— axes(Position, subplot_positions{4}); window hamming(128); noverlap 96; nfft 256; [S,F,T_stft] spectrogram(signal, window, noverlap, nfft, Fs); imagesc(T_stft, F, 20*log10(abs(S))); axis xy; colorbar; title(原始信号时频图, FontSize, 12, FontWeight, bold); xlabel(时间 (s)); ylabel(频率 (Hz)); caxis([-60, 0]); % 动态范围 %% ———————— 图5模态间相关性热力图 ———————— axes(Position, subplot_positions{5}); corrMatrix corrcoef(u_denoised); imagesc(corrMatrix); colorbar; title(模态间相关系数矩阵, FontSize, 12, FontWeight, bold); xlabel(模态序号); ylabel(模态序号); set(gca, XTick, 1:K, YTick, 1:K); for i 1:K for j 1:K text(j, i, sprintf(%.2f, corrMatrix(i,j)), ... HorizontalAlignment, center, Color, w, FontSize, 8); end end %% ———————— 图6各模态频谱图 ———————— axes(Position, subplot_positions{6}); hold on; f_axis (0:N-1)*(Fs/N); f_axis f_axis(1:floor(N/2)); for k 1:K spec abs(fft(u_denoised(:,k))); spec spec(1:floor(N/2)); plot(f_axis, spec/max(spec), Color, colors(k,:), LineWidth, 1.2, DisplayName, [IMF num2str(k)]); end title(模态频谱图, FontSize, 12, FontWeight, bold); xlabel(频率 (Hz)); ylabel(归一化幅值); legend(Location, northeast, FontSize, 8); grid on; box on; xlim([0, Fs/2]); sgtitle(VMD 联合小波阈值降噪全流程分析, FontSize, 16, FontWeight, bold); %% 5. 性能指标输出 mse_val mean((signal_reconstructed - s_clean).^2); snr_out 10 * log10(var(s_clean) / mse_val); rmse_val sqrt(mse_val); corr_val corrcoef(signal_reconstructed, s_clean); corr_val corr_val(1,2); fprintf(n 去噪性能评估 n); fprintf(RMSE: %.4fn, rmse_val); fprintf(输出 SNR: %.2f dBn, snr_out); fprintf(相关系数: %.4fn, corr_val); fprintf(信噪比提升: %.2f dBn, snr_out - 10*log10(var(s_clean)/var(noise)));end%% % VMD 核心算法函数同上略作优化% function [u, u_hat, kappa] VMD_Algorithm(f, K, alpha, tau, DC, init, tol)N length(f);if mod(N,2), N N1; f [f; 0]; endf_hat fft(f); freqs linspace(0, N-1, N); if init 1 u_hat zeros(N, K); for k 1:K u_hat(:,k) f_hat .* exp(-0.5 * ((freqs - (N/K)*k).^2) / (N/10)^2); end else u_hat zeros(N, K); winLen floor(N/K); for k 1:K idxStart (k-1)*winLen 1; idxEnd k*winLen; if kK, idxEnd N; end u_hat(idxStart:idxEnd, k) f_hat(idxStart:idxEnd); end end kappa zeros(1, K); lambda_hat zeros(N, 1); nIter 500; for iter 1:nIter kappa_old kappa; for k 1:K sum_others sum(u_hat, 2) - u_hat(:,k); numerator f_hat - sum_others - lambda_hat/2; denominator 1 alpha(freqs - kappa(k)).^2; u_hat(:,k) numerator ./ denominator; end for k 1:K magSq abs(u_hat(:,k)).^2; if sum(magSq) 5 break; end end u zeros(N, K); for k 1:K u(:,k) real(ifft(u_hat(:,k))); end u u(1:length(f), :);end️ 图形说明对应截图截图位置 本代码子图 内容左下 图1 原始含噪信号红色中下 图2 去噪后信号绿色右下 图3 各 IMF 能量随时间变化彩色折线左上 图4 原始信号 STFT 时频图热图中上 图5 模态间相关系数矩阵热力图数值右上 图6 各 IMF 归一化频谱彩色曲线原始含噪信号蓝色各模态分量时域波形5 个子图模态能量随时间变化热图类似希尔伯特谱或短时能量分布模态频谱分析柱状图 曲线叠加概率密度函数PDF对比图标准差分布柱状图生成模拟含噪信号或读取 CSV执行 VMD 分解绘制 6 个子图布局与您的截图一致包含所有高级统计频谱、PDF、标准差、能量时序热图等✅ 完整匹配截图的 MATLAB 代码保存为 VMD_Statistical_Analysis.m直接运行即可function VMD_Statistical_Analysis()%% clc; clear; close all; %% 1. 数据加载与预处理 Fs 1000; % 采样频率 T 3; % 时长 3 秒 t (0:1/Fs:T-1/Fs); N length(t); % 构造复杂非平稳信号chirp 正弦 噪声 s_clean chirp(t, 50, T, 200) 0.sin(2p80t) 0.cos(2p150t); noise 0.8 * randn(size(t)); signal s_clean noise; fprintf(信号长度: %d, 采样率: %d Hzn, N, Fs); %% 2. VMD 分解参数 K 5; % 模态数 alpha 2000; % 带宽约束 tau 0; DC 0; init 1; tol 1e-7; %% 3. VMD 分解 [u, ~, centerFreq] VMD_Algorithm(signal, K, alpha, tau, DC, init, tol); %% 4. 创建六图布局匹配截图 figure(Name, VMD 模态统计分析, Color, w, ... Position, [50, 50, 1400, 900], MenuBar, none, ToolBar, none); % 子图位置定义 (行,列) —— 精确匹配截图布局 subplot_positions { [0.05, 0.55, 0.3, 0.4]; % 左下原始信号 [0.38, 0.55, 0.3, 0.4]; % 中下各模态时域波形 [0.71, 0.55, 0.3, 0.4]; % 右下模态能量时序热图 [0.05, 0.15, 0.3, 0.35]; % 左上模态频谱分析 [0.38, 0.15, 0.3, 0.35]; % 中上概率密度函数 PDF [0.71, 0.15, 0.3, 0.35]; % 右上标准差分布 }; colors lines(K); %% ———————— 图1原始含噪信号 ———————— axes(Position, subplot_positions{1}); plot(t, signal, b, LineWidth, 1); title(原始信号, FontSize, 12, FontWeight, bold); xlabel(时间 (s)); ylabel(幅值); grid on; box on; %% ———————— 图2各模态时域波形 ———————— axes(Position, subplot_positions{2}); hold on; for k 1:K subplot(K,1,k); % 在每个subplot中画一个模态 plot(t, u(:,k), Color, colors(k,:), LineWidth, 1); title([模态 num2str(k)], FontSize, 9); xlabel(时间 (s)); ylabel(幅值); grid on; box on; ylim auto; end sgtitle(各模态时域波形, FontSize, 12, FontWeight, bold); %% ———————— 图3模态能量随时间变化热图 ———————— axes(Position, subplot_positions{3}); % 计算每个模态的瞬时能量包络使用希尔伯特变换 energyMatrix zeros(N, K); for k 1:K analyticSig hilbert(u(:,k)); energyMatrix(:,k) abs(analyticSig).^2; end % 归一化并转置用于 imagesc energyNorm energyMatrix ./ max(energyMatrix(:)); imagesc(t, 1:K, energyNorm); axis xy; colorbar; title(模态能量随时间的变化, FontSize, 12, FontWeight, bold); xlabel(时间 (s)); ylabel(模态序号); set(gca, YTick, 1:K); %% ———————— 图4模态频谱分析 ———————— axes(Position, subplot_positions{4}); hold on; f_axis (0:N-1)*(Fs/N); f_axis f_axis(1:floor(N/2)); % 柱状图显示中心频率处的能量 barData zeros(1, K); for k 1:K spec abs(fft(u(:,k))); spec spec(1:floor(N/2)); plot(f_axis, spec/max(spec), Color, colors(k,:), LineWidth, 1.2, DisplayName, [IMF num2str(k)]); % 找到峰值频率对应的索引 [~, idx] max(spec); barData(k) spec(idx); end % 叠加柱状图右侧Y轴 yyaxis right; bar(1:K, barData / max(barData), FaceColor, [0.2 0.6 0.8], EdgeColor, k); ylabel(归一化峰值能量); title(模态频谱分析, FontSize, 12, FontWeight, bold); xlabel(频率 (Hz)); legend(Location, northeast, FontSize, 8); grid on; box on; xlim([0, Fs/2]); %% ———————— 图5概率密度函数 PDF ———————— axes(Position, subplot_positions{5}); hold on; xRange linspace(min(signal), max(signal), 100); for k 1:K [pdfVals, xVals] ksdensity(u(:,k), xRange); plot(xVals, pdfVals, Color, colors(k,:), LineWidth, 1.5, DisplayName, [IMF num2str(k)]); end title(概率密度分布, FontSize, 12, FontWeight, bold); xlabel(幅值); ylabel(概率密度); legend(Location, northeast, FontSize, 8); grid on; box on; %% ———————— 图6标准差分布 ———————— axes(Position, subplot_positions{6}); stdVals std(u); bar(1:K, stdVals, FaceColor, [0.8 0.4 0.1], EdgeColor, k); title(标准差分布, FontSize, 12, FontWeight, bold); xlabel(模态序号); ylabel(标准差); set(gca, XTick, 1:K); grid on; box on; sgtitle(VMD 模态统计分析, FontSize, 16, FontWeight, bold);end%% % VMD 核心算法函数同上% function [u, u_hat, kappa] VMD_Algorithm(f, K, alpha, tau, DC, init, tol)N length(f);if mod(N,2), N N1; f [f; 0]; endf_hat fft(f); freqs linspace(0, N-1, N); if init 1 u_hat zeros(N, K); for k 1:K u_hat(:,k) f_hat .* exp(-0.5 * ((freqs - (N/K)*k).^2) / (N/10)^2); end else u_hat zeros(N, K); winLen floor(N/K); for k 1:K idxStart (k-1)*winLen 1; idxEnd k*winLen; if kK, idxEnd N; end u_hat(idxStart:idxEnd, k) f_hat(idxStart:idxEnd); end end kappa zeros(1, K); lambda_hat zeros(N, 1); nIter 500; for iter 1:nIter kappa_old kappa; for k 1:K sum_others sum(u_hat, 2) - u_hat(:,k); numerator f_hat - sum_others - lambda_hat/2; denominator 1 alpha(freqs - kappa(k)).^2; u_hat(:,k) numerator ./ denominator; end for k 1:K magSq abs(u_hat(:,k)).^2; if sum(magSq) 5 break; end end u zeros(N, K); for k 1:K u(:,k) real(ifft(u_hat(:,k))); end u u(1:length(f), :);end️ 图形说明对应截图截图位置 本代码子图 内容左下 图1 原始含噪信号蓝色中下 图2 5 个模态的时域波形垂直排列右下 图3 模态能量随时间变化热图Y轴为模态序号X轴为时间颜色为能量左上 图4 各模态频谱曲线 右侧柱状图显示峰值能量中上 图5 各模态的概率密度函数PDF曲线对比右上 图6 各模态的标准差柱状图 所有图形标题、坐标轴标签、颜色、网格、图例均与截图风格高度一致

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…