一维信号全变分(TV)降噪方法(MATLAB)

130 篇文章 5 订阅
44 篇文章 0 订阅

信号降噪一直是领域研究的热点,这是一项十分有意义并且极具挑战性的工作,经过几十年来相关科研人员的共同努力,降噪技术得到了极大的发展,并在现实生活中也得到了广泛的应用。其中,许多常用的方法有:小波变换、线性滤波等算法。线性滤波方法计算简单、运算速度快,这种降噪算法在心电监测仪器中已经被广泛应用。但是,像特殊的生物信号如肌电信号,噪声信号的频谱往往与肌电信号的频谱重叠,传统的线性滤波技术无法将噪声信号与肌电信号分离,提取有效的肌电信号。

现有的降噪算法虽具有良好的降噪性能。但是利用这些算法在对稀疏信号进行降噪时会产生一些阶梯伪像噪声,如寄生噪声尖峰和Gibbs振荡,导致原始信号中重要信号丢失。而 Rudin Osherand Fatemi基于变分法的思想提出基于全变分正则化的降噪方法,由于该方法主要是利用了信号在时域内的光滑性,在对稀疏信号进行降噪时能保留信号的边缘信息并准确还原原始信号。

全变分去噪是一种基于基础信号为分段常数信号的非线性滤波方法(等效地,基础信号的导数是稀疏的)这种信号出现在地球科学、生物物理学和其他领域,全变分去噪技术还与其它方法结合使用,以处理更一般类型的信号,但是全变分去噪方法在处理稀疏信号时更为突出。

全变分降噪的主运行代码如下:

clc;
clear all;
close all;


%Generate sine wave;
%{
x = -10*pi:.1:10*pi; 
y = sin(x); 
plot(x,y)
%}

%Load a piecewice defined function instead of a sine wave
% You can use any  signal that you have
load testSig3.mat;
y = testSig3;

%add some noise to it
sigma = 10;
noisy_y = y + sigma * randn(1, length(y));

%figure;
%plot(x,noisy_y) %To plot sine wave;

lam = 0.0078;
rho = 1.0;
Nit = 200;

%% ********** Run the TV-solver ***************
out = ADMM_1D(noisy_y, lam, rho, Nit); 
%% ********************************************

%%
figure;
subplot(3,1,1)
plot(y);
axis tight;
title('Original Signal');

subplot(3,1,2);
plot(noisy_y)
axis tight;
title('Noisy Signal');

subplot(3,1,3);
plot(out.sol);
axis tight;
title('TV Denoised');

figure;
plot(out.funVal);
title('Function Value');

完整代码:https://mbd.pub/o/bread/ZJeXmptu

擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。

图片

图片

擅长领域:现代信号处理,机器学习,深度学习,数字孪生,时间序列分析,设备缺陷检测、设备异常检测、设备智能故障诊断与健康管理PHM等。

  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哥廷根数学学派

码字不易,且行且珍惜

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值