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

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

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 各模态的标准差柱状图 所有图形标题、坐标轴标签、颜色、网格、图例均与截图风格高度一致

相关文章:

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

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

分库分表(一)

假设目前有一张表order 订单表,需要分库分表,举例给出方案设计,并解决上述提到的分库分表带来的问题,详细说明下面给你用一个比较接近真实互联网生产环境的例子来说明: 假设有一张 order 订单表,数据量增长…...

京东社招——Java后端开发面试复盘

最近参加了京东大数据的面试,整个过程涵盖了项目细节、基础八股文以及手撕算法。本文将这次面试中遇到的9个核心问题进行了复盘和深度整理,特别是关于RabbitMQ的消息积压处理以及MySQL的RR隔离级别实现。base:北京1. 项目问题:你的…...

全自动颗粒清洁度分析系统,西恩士工业让颗粒计数精准高效

颗粒计数是清洁度检测的核心环节,传统的人工颗粒计数,不仅效率低,还容易出现误判、漏判,尤其是大规模生产时,人工计数根本跟不上节奏。西恩士的全自动颗粒清洁度分析系统,让颗粒计数摆脱人工,做…...

为什么要使用动态IP代理?详解动态IP在不同业务场景下的技术选型逻辑

做网络爬虫总被封IP?多账号运营动辄被风控警告?采集数据时地域限制拦路、数据不准?相信很多做技术、做运营的伙伴,在高频网络操作中,都曾被这些问题困住。为什么很多企业和从业者,都离不开动态IP代理&#…...

交稿前一晚!千笔,专科生论文救星!

你是否曾在论文写作中感到力不从心?选题无头绪、框架混乱、文献资料难找、查重率高得让人焦虑……这些难题,是否让你夜不能寐?专科生的论文之路,本就充满挑战,而千笔AI,正是为解决这些问题而生。它用智能技…...

实测有效:解决VSCode编译运行C++前无故卡顿的方案

最近用VSCode写C(其实C也一样)的时候发现了一个很闹心的问题:编译和运行本身速度没问题,但每次点执行后,VSCode会先卡好几秒才正式开始编译,加载圈完全是空转,白白浪费时间。踩了不少坑后终于找…...

求最大子序和---涉及到贪心+动态规划

1.什么是贪心和动态规划package siyangyuan;/*** Class Name :MaxSubArray* Package :siyangyuan* Description:** Author: Mr.chunxugao* Create: 2026-03-12- 14:13* Version:v1.0*///求最大子序和 public class MaxSubArray {public static int maxSubArray(int[] nums){//贪…...

2026全球范围内最知名且权威的计算机科技与人工智能信息获取平台

以下是全球范围内最知名且权威的计算机科技与人工智能信息获取平台,涵盖科技媒体、学术研究、开发者社区、AI工具导航以及趋势追踪平台等多个维度。一、国际权威科技媒体TechCrunch网址:https://techcrunch.com/硅谷科技风向标,长期关注科技创…...

基于PLC的药品包装机控制系统设计

收藏关注不迷路!! 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题(免费咨询指导选题),项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多…...

基于PLC的小型音乐喷泉设计

收藏关注不迷路!! 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题(免费咨询指导选题),项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多…...

如何从bode图得到单位阶跃的趋势

传递函数>阶跃响应;拉普拉斯逆变化就可以得到时域函数,可以绘制出图像。bode图>阶跃响应;以下例子进行测试:Ge -15.93 s---------------------s^2 16.34 s 94.09从伯德图(Bode Plot)定性判断单位阶…...

基于PLC的隧道照明控制系统设计

收藏关注不迷路!! 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题(免费咨询指导选题),项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多…...

期货软件开发「启动加载页 / 初始化窗口」

一、初始化窗口作用:• 程序刚打开时显示• 后台连接行情服务器• 加载历史 K 线 / 行情数据• 加载完成后自动进入主界面 二、当前已实现的核心功能1. 窗体基础功能• 无边框拖动(顶部栏按住可移动窗口)• 最小化按钮 •关闭按钮• 基于 …...

供应链产研交付提效:后端开发提效实战

引言 在传统后端开发流程中,需求解析、接口开发、测试验证、部署上线等环节存在大量重复性工作,且需求变更易导致研发成本上升、交付周期延长。为解决这一痛点,本文围绕后端开发提效展开全维度规划,从架构设计、分阶段落地计划、核…...

洛谷P8218 【深进1.例1】求区间和 考点:一维前缀和

题目 P8218 【深进1.例1】求区间和 - 洛谷 核心思路 一维前缀和模板题 代码 可以让AI总结一下代码逻辑 这段代码实现了一维前缀和算法,用于高效解决区间求和问题。主要逻辑如下: 预处理 (数据输入与求和): 读取数组长度 n。在读取每个元…...

SGP.22 eSIM通信原理-打电话

三个关键阶段:准备阶段(下载Profile)、激活阶段(网络注册)和使用阶段(拨打电话)。 第一阶段:准备——将中国移动的“身份”下载到手机 用户买了一部支持eSIM的新手机,决定…...

Python自动化实现思路

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快Python自动化实现思路通常分为以下几步1. 确定自动化测试的范围和目标:首先需要明确需要进行自动化测试的范围和目标,包括测试场景、测试用…...

S款直流一体机模块问题排查指导

S款直流一体机模块问题排查指导一、问题现象:现场S款直流一体机设备启动时报错:绝缘检测超时,请插拔充电桩。或者事件内有模块的相关报错,比如:直流模块通讯故障,直流模块输出故障等。图一:启动…...

双有源桥式DC-DC变换器仿真及Matlab建模实践:自行设定输入输出电压值与基础讲解

双有源桥式dcdc变换器仿真 dab变换器Matlab仿真模型 自行设计输入输出电压值 配基础讲解一份双有主动桥(DAB)变换器这个拓扑结构就像两个武林高手在推手——输入侧的H桥和输出侧的H桥通过高频变压器连接,通过调节两者的相位差来控制能量流动。…...

CGAL ::Surface Mesh 参考文档examples详解

1 引言 CGAL::Surface_mesh 是 CGAL 中用于表示多面体表面的半边数据结构(Halfedge Data Structure, HDS),是传统指针式半边结构和3D 多面体表面的轻量化替代方案,核心优势是基于整数索引而非指针,兼顾内存效率、易用…...

膜结构车棚性价比排名深度解析

在停车设施领域,膜结构车棚凭借其独特优势逐渐成为热门选择。下面将深入分析膜结构车棚性价比相关因素。性能优势凸显性价比膜结构车棚以高强度建筑膜材为覆盖材料,配合钢结构支撑。其膜材有 PVC/PVDF 涂层聚酯膜、PTFE 膜等。它具有诸多性能优势&#x…...

实验室纯水机怎么选?2026 纯水系统品牌及选型全攻略

在实验室筹建或设备更新时,面对琳琅满目的品牌和参数,“怎么选”往往比“买不买”更令人头疼。选错设备,轻则耗材成本高昂,重则导致实验结果偏差、质谱基线不稳。要选对实验室纯水机,建议按照以下“四步筛选法”进行决…...

(新界面)NVR即时回放功能操作指导

(新界面)NVR即时回放功能操作指导一、功能介绍对系统当前时间点之前5分钟(可自定义,默认5分钟)内的录像进行回放,方便在预览实况时发现异常并即时回放。旧版本NVR需升级至NVR-BXXXX.50.13.250529或更高版本…...

技术人的困境:参数碾压对手,客户却不选你?用“技术路线图叙事”破局

作为技术出身的B2B从业者,你可能一直坚信:技术够硬,就是最好的销售语言。你带着PPT去见客户,第一页:屈服强度对比图,比竞争对手高15%;第二页:专利清单,密密麻麻排了三页&…...

求推荐超绝高性价比的GEO优化公司

一直以来,传统SEO投放大量网络资源却难以让用户精准找到品牌,且严重依赖搜索框、时效慢、流量少等问题,是当前行业普遍面临的难题。倍霖卓越推出的倍霖GEO针对这一问题提供了专业解决方案。倍霖GEO系统,采用多类型多平台全方位内容…...

IonicSelect组件使用指南

ionic select 基础用法ionic select 组件允许用户从一组选项中选择一个或多个值。基本用法需要在 ion-select 标签内嵌套 ion-select-option 标签。<ion-select placeholder"选择水果"><ion-select-option value"apple">苹果</ion-select-o…...

用大白话解释Sub-Agents

用大白话解释 Sub-Agent 就是"被派出去干活的 Claude 分身"。最直白的比喻 想象你是一个包工头&#xff08;主 Claude&#xff09;&#xff1a;你接到一个装修任务&#xff0c;但你不可能同时贴瓷砖、刷墙、装电路。 所以你派出三个工人去分别干这三件事&#xff1a;…...

【研报221】2026年汽车零部件行业投资策略研究:智驾平权+人形机器人量产趋势

本报告提供限时下载&#xff0c;请查看文后提示以下仅为报告部分内容&#xff1a;此报告全面解析汽车零部件行业2026年的发展趋势与投资机会。2025年行业受益于乘用车销量增长&#xff0c;零部件板块收入同比8.3%&#xff0c;其中智能化赛道表现最优&#xff0c;收入增速达20.0…...

【漏洞赏金猎人必看】竞态条件漏洞:从概念到实战,一文讲透(含挖掘技巧)

【漏洞赏金猎人必看】竞态条件漏洞&#xff1a;从概念到实战&#xff0c;一文讲透&#xff08;含挖掘技巧&#xff09; 本文将带你从 0 到 1 彻底理解竞态条件漏洞&#xff0c;并学会在 SRC 和赏金平台中高效挖掘这类高价值漏洞。 我会用最通俗的方式&#xff0c;教你如何判断一…...