%% Add "Method_Scripts" path
% Method_Scripts is the folder where DB-VMD and VMD are implemeneted
init_pwd = pwd;
cd ..
addpath('Method_Scripts')
cd(init_pwd)
%% Preparations and parameters definition
clear; clc; close all
snr_arr = 20:-2:10;
tau_l_arr = [0.1];
max_it = 500; % Number of iterations
% Parameters
alpha = 1000; % VMD bandwidth factor
K = 3; % Components' count
tau_ab = 0.1; % Bandwidth rate of change (DB-VMD)
DC = 0; % DC impose (0 for none)
init = 3; % Central frequencies initialization
tol = 1e-7; % Stopping criteria tolerance
N = 500; % Signal length
n = (1:N)';
% Generating Hanning windows
L_arr = [500, 125, 100];
d_arr = [250, 125, 375];
hann_windows = nan(N,K);
for i=1:K
temp = zeros(N, 1);
low = d_arr(i) - L_arr(i)/2 + 1;
high = d_arr(i) + L_arr(i)/2;
temp(low: high) = hann(L_arr(i));
hann_windows(:, i) = temp;
end
% Success rate array for (iteration number, SNR, tau_l) combination
SR_DB_vmd_arr = nan(max_it, length(snr_arr), length(tau_l_arr));
SR_vmd_arr = nan(max_it, length(snr_arr), length(tau_l_arr));
%% Noise robustness experiment
for i_tau_l = 1:length(tau_l_arr)
tau_l = tau_l_arr(i_tau_l);
for i_snr = 1:length(snr_arr)
for it = 1:max_it
% Printing progress
if mod(it, 50) == 0
fprintf("iteration: %d/%d - SNR: %.2f (%d/%d) - tau_l: %.2f (%d/%d)\n", ...
it, max_it, ...
snr_arr(i_snr), i_snr, length(snr_arr), ...
tau_l_arr(i_tau_l), i_tau_l, length(tau_l_arr))
end
% Signal generation
omega_arr = unifrnd(0, pi, 3, 1);
A_arr = unifrnd(0.5, 1.5, 3, 1);
fsub = cell(K, 1);
s = zeros(N, 1);
for i=1:K
fsub{i} = hann_windows(:, i) .* A_arr(i) .* cos(omega_arr(i).*n);
s = s + hann_windows(:, i) .* A_arr(i) .* cos(omega_arr(i).*n);
end
[~, sortIndex] = sort(omega_arr);
fsub = fsub(sortIndex);
s = awgn(s, snr_arr(i_snr), "measured"); % Add noise
% DB-VMD applied
[u, ~, omega] = DB_VMD(s, tau_ab, tau_l, K, DC, init, tol);
[~, sortIndex] = sort(omega(end, :));
u = u(sortIndex, :);
% DB-VMD Success rate
corr_arr = nan(K, 1);
for k=1:K
corr_arr(k) = abs(xcorr(fsub{k}, u(k,:), 0, 'normalized'));
end
SR_DB_vmd_arr(it, i_snr, i_tau_l) = mean(corr_arr);
% VMD applied
[u, ~, omega] = VMD(s, alpha, tau_l, K, DC, init, tol);
[~, sortIndex] = sort(omega(end, :));
u = u(sortIndex, :);
% VMD Success rate
corr_arr = nan(K, 1);
for k=1:K
corr_arr(k) = xcorr(fsub{k}, u(k,:), 0, 'normalized');
end
SR_vmd_arr(it, i_snr, i_tau_l) = mean(corr_arr);
end
end
end
%% Results
% Plotting medians and Median Absolute Deviation (MAD)
for i=1:length(tau_l_arr)
medians_vec_DB_VMD = median(SR_DB_vmd_arr(:, :, i_tau_l));
mad_vec_DB_VMD = mad(SR_DB_vmd_arr(:, :, i_tau_l), 1);
medians_vec_VMD = median(SR_vmd_arr(:, :, i_tau_l));
mad_vec_VMD = mad(SR_vmd_arr(:, :, i_tau_l), 1);
figure("Name", sprintf("tau_l = %.2f", tau_l_arr(i_tau_l)))
h(1) = semilogx(snr_arr, medians_vec_DB_VMD, 'k-', 'LineWidth', 3);
for j_snr = 1:length(snr_arr)
hold on
plot([snr_arr(j_snr) snr_arr(j_snr)], ...
[medians_vec_DB_VMD(j_snr) - mad_vec_DB_VMD(j_snr), ...
medians_vec_DB_VMD(j_snr) + mad_vec_DB_VMD(j_snr)], ...
'k:_', 'LineWidth', 2)
end
hold on
h(2) = semilogx(snr_arr, medians_vec_VMD, 'b--', 'LineWidth', 3);
for j_snr = 1:length(snr_arr)
hold on
plot([snr_arr(j_snr) snr_arr(j_snr)], ...
[medians_vec_VMD(j_snr) - mad_vec_VMD(j_snr), ...
medians_vec_VMD(j_snr) + mad_vec_VMD(j_snr)], ...
'b:_', 'LineWidth', 2)
end
xlabel("SNR (dB)", 'FontSize', 15)
ylabel("Success Rate", 'FontSize', 20)
xlim([min(snr_arr) - 0.1, max(snr_arr) + 0.1])
legend(h, "DB-VMD", "VMD", "Location", "Best", 'FontSize', 15)
title("Success Rate vs SNR", 'FontSize', 30)
set(gca, 'XGrid', 'on', 'XMinorGrid', 'on');
end
没有合适的资源?快使用搜索试试~ 我知道了~
【变分模式分解】基于matlab动态带宽变分模式分解【含Matlab源码 3722期】.zip
共12个文件
jpg:9个
m:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 71 浏览量
2023-12-26
22:06:54
上传
评论
收藏 539KB ZIP 举报
温馨提示
CSDN海神之光上传的代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作 功率谱估计: 故障诊断分析: 雷达通信:雷达LFM、MIMO、成像、定位、干扰、检测、信号分析、脉冲压缩 滤波估计:SOC估计 目标定位:WSN定位、滤波跟踪、目标定位 生物电信号:肌电信号EMG、脑电信号EEG、心电信号ECG 通信系统:DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测识别融合、LEACH协议、信号检测、水声通信
资源推荐
资源详情
资源评论
收起资源包目录
【变分模式分解】基于matlab动态带宽变分模式分解【含Matlab源码 3722期】.zip (12个子文件)
【变分模式分解】基于matlab动态带宽变分模式分解【含Matlab源码 3722期】
noise_robustness.m 4KB
运行结果1.jpg 43KB
运行结果6.jpg 68KB
运行结果5.jpg 41KB
visualize_methods.m 4KB
运行结果9.jpg 118KB
运行结果2.jpg 66KB
运行结果8.jpg 96KB
运行结果4.jpg 33KB
运行结果7.jpg 111KB
tones_seperation.m 3KB
运行结果3.jpg 33KB
共 12 条
- 1
资源评论
海神之光
- 粉丝: 3w+
- 资源: 2093
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功