💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
💥1 概述
摘要:凸优化与稀疏促进的凸正则化是估计噪声中稀疏信号的标准方法。为了比凸正则化更强烈地促进稀疏性,通常也会采用非凸优化。在本文中,我们采取第三种方法。我们利用选择非凸正则化项,使得总成本函数(包括数据一致性和正则化项)是凸的。因此,稀疏性比标准的凸公式更受到促进,但不会牺牲凸优化的吸引力(唯一最小值,鲁棒算法等)。我们利用这个想法来改进最近开发的“重叠组收缩”(OGS)算法,用于去噪组稀疏信号。该算法应用于语音增强问题,结果在信噪比和感知质量方面都有利。
本文将组稀疏信号去噪问题建模为一个带有非凸(实际上是严格凹的)正则化项的凸优化问题。正则化项基于重叠的分组,以促进组稀疏性。正则化项的凹性比任何凸正则化项都更强烈地促进稀疏性。对于几个由变量a参数化的凹惩罚函数,已经展示了如何约束a以确保优化问题是严格凸的。数值实验证明了所提出的方法在语音增强方面的有效性。
📚2 运行结果
2.1 算例1
group-sparse thresholding, 1D data
2.2 算例2
group-sparse thresholding, 2D data (speech spectrogram)
2.3 算例3
group-sparse thresholding, 3D data
部分代码:
function [x, cost] = ogs2(y, K1, K2, lam, pen, rho, Nit)
% x = ogs2(y, K1, K2, lam)
% Overlapping Group Shrinkage/Thresholding (2D)
%
% Input
% y : observed signal (2D array)
% lam : regularization parameter (lam > 0)
% K1, K2 : group size
%
% Output
% x : output signal
%
% Optional inputs
% x = ogs2(y, K1, K2, lam, pen)
% x = ogs2(y, K1, K2, lam, pen, rho)
% x = ogs2(y, K1, K2, lam, pen, rho, Nit)
%
% where
% pen : penalty ('abs', 'log', 'atan', 'rat', 'mcp')
% rho : normalized non-convexity parameter, 0 <= rho <= 1
% Nit : number of iterations
%
% Note: if pen is 'abs' then rho is ignored.
%
% Use [x, cost] = ogs2(...) for cost function history.
if nargin < 7
Nit = 25; % Default value
end
if nargin < 6
rho = 1; % Default value
end
if nargin < 5
pen = 'atan'; % Default value
end
% Error checking
if rho == 0
pen = 'abs';
elseif (rho < 0) || (rho > 1)
error('Error: need 0 <= rho <= 1.')
end
a_max = 1/(lam*K1*K2);
a = rho * a_max;
switch pen
case 'abs'
phi = @(x) abs(x);
wfun = @(x) abs(x);
a = 0;
case 'rat'
phi = @(x) abs(x)./(1+a*abs(x)/2);
wfun = @(x) abs(x) .* (1 + a*abs(x)/2).^2;
case 'log'
phi = @(x) 1/a * log(1 + a*abs(x));
wfun = @(x) abs(x) .* (1 + a*abs(x));
case 'atan'
phi = @(x) 2/(a*sqrt(3)) * (atan((1+2*a*abs(x))/sqrt(3)) - pi/6);
wfun = @(x) abs(x) .* (1 + a*abs(x) + a^2.*abs(x).^2);
case 'mcp'
phi = @(t) (abs(t) - a/2 * t.^2).*(abs(t) <= 1/a) + 1/(2*a)*(abs(t) > 1/a);
wfun = @(x) abs(x) ./ max(1 - a*abs(x), 0);
% Note: divide by zero OK -> divide by inf -> multiply by zero
otherwise
disp('penalty must be abs, log, atan, rat, or mcp')
x = []; cost = [];
return
end
h1 = ones(K1, 1);
h2 = ones(K2, 1);
x = y;
cost = zeros(1, Nit);
for it = 1 : Nit
r = sqrt( conv2(h1, h2, abs(x).^2, 'full') );
cost(it) = 0.5 * sum(sum(abs(x-y).^2)) + lam * sum(sum(phi(r)));
v = 1 + lam*conv2(h1, h2, 1./wfun(r), 'valid');
x = y./v;
end
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。