Mercurial > hg > smallbox
diff toolboxes/AudioInpaintingToolbox/Solvers/inpaintFrame_janssenInterpolation.m @ 138:56d719a5fd31 ivand_dev
Audio Inpaintin Toolbox
author | Ivan Damnjanovic lnx <ivan.damnjanovic@eecs.qmul.ac.uk> |
---|---|
date | Thu, 21 Jul 2011 14:27:47 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toolboxes/AudioInpaintingToolbox/Solvers/inpaintFrame_janssenInterpolation.m Thu Jul 21 14:27:47 2011 +0100 @@ -0,0 +1,82 @@ +function y = inpaintFrame_janssenInterpolation(problemData,param) +% Frame-level inpainting method based on the linear prediction by +% Janssen. +% +% Usage: xEst = inpaintFrame_janssenInterpolation(problemData,param) +% +% +% Inputs: +% - problemData.x - observed signal to be inpainted +% - problemData.Imiss - Indices of clean samples +% - param.p - Order of the autoregressive model used in +% for linear prediction +% +% Outputs: +% - y: estimated frame +% +% References: +% +% ------------------- +% +% Audio Inpainting toolbox +% Date: June 28, 2011 +% By Valentin Emiya, Amir Adler, Maria Jafari +% This code is distributed under the terms of the GNU Public License version 3 (http://www.gnu.org/licenses/gpl.txt). + +s = problemData.x; +N = length(s); +Im = find(problemData.IMiss); +IObs = find(~problemData.IMiss); +M = length(Im); +Im = sort(Im); Im = Im(:); % Im: indexes of missing samples +s(Im) = 0; + +if nargin<2 || ~isfield(param,'p') + p = min(3*M+2,round(N/3)); +else + p = param.p; +end +if nargin<2 || ~isfield(param,'GR') + param.GR = false; +end +if nargin<2 || ~isfield(param,'NIt') + NIt = 100; +else + NIt = param.NIt; +end + + +IAA = abs(Im*ones(1,N)-ones(M,1)*(1:N)); +IAA1 = IAA<=p; +AA = zeros(size(IAA)); + +if param.GR + figure; + hold on +end +for k=1:NIt + + % Re-estimation of LPC + aEst = lpc(s,p).'; + + % Re-estimation of the missing samples + b = aEst.'*hankel(aEst.',[aEst(end),zeros(1,p)]); + AA(IAA1) = b(IAA(IAA1)+1); +% xEst = -inv(AA(:,Im))*AA(:,IObs)*s(IObs); % use Chol to invert matrix + [R flagErr] = chol(AA(:,Im)); + if flagErr + % xEst = - AA(:,Im)\(AA(:,IObs)*s(IObs)); + xEst = -inv(AA(:,Im))*AA(:,IObs)*s(IObs); + else + xEst = -R\(R'\(AA(:,IObs)*s(IObs))); + end + s(Im) = xEst; + if param.GR + e = filter(aEst,1,s); + plot(k,10*log10(mean(e(p+1:end).^2)),'o') + end +end + +y = s; + +return