# HG changeset patch # User Ivan Damnjanovic lnx # Date 1311692519 -3600 # Node ID 30872eb3d1606b89f8d071cfdb7cddb874fab8fd # Parent 19e0af5709140e163faaf9d8cf4b83a664be1edc# Parent fec205ec6ef699ecd2acfa2ef3ab92cb73ed13cc Merge from branch "ivand_dev" diff -r 19e0af570914 -r 30872eb3d160 .hgtags --- a/.hgtags Tue Jul 26 15:14:15 2011 +0100 +++ b/.hgtags Tue Jul 26 16:01:59 2011 +0100 @@ -2,3 +2,4 @@ 7750624e0c73c856ab7cfbae6160711e965135b7 version0.5 9ff69e8e049f936804d0e5876cd4d367be9f3c4a backup 14032011 b14e1f6ee4bea90a8a894a52c1114a72aa818071 ver_1.1 +19e0af5709140e163faaf9d8cf4b83a664be1edc release_1.5 diff -r 19e0af570914 -r 30872eb3d160 toolboxes/AudioInpaintingToolbox/Experiments/DeclippingExperiment/declipOneSoundExperiment.m~ --- a/toolboxes/AudioInpaintingToolbox/Experiments/DeclippingExperiment/declipOneSoundExperiment.m~ Tue Jul 26 15:14:15 2011 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,123 +0,0 @@ -function declipOneSoundExperiment(expParam) -% A simple experiment to declip a signal. -% -% Usage: declipOneSoundExperiment(expParam) -% -% -% Inputs: -% - expParam is an optional structure where the user can define -% the experiment parameters. -% - expParam.clippingLevel: clipping level between 0 and 1. -% - expParam.filename: file to be tested. -% - expParam.destDir: path to store the results. -% - expParam.solver: solver with its parameters -% - expParam.destDir: path to store the results. -% -% -% ------------------- -% -% 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). - -if ~isdeployed - close all - addpath('../../Problems/'); - addpath('../../Solvers/'); - addpath('../../Utils/'); - addpath('../../Utils/dictionaries/'); - addpath('../../Utils/evaluation/'); -% addpath('../../Utils/TCPIP_SocketCom/'); -% javaaddpath('../../Utils/TCPIP_SocketCom'); - dbstop if error -end - -%% Set parameters -if nargin<1 - expParam = []; -end -if ~isfield(expParam,'filename') - expParam.filename = 'male01_8kHz.wav'; -end -if ~isfield(expParam,'clippingLevel') - expParam.clippingLevel = 0.6; -end - -% Solver -if ~isfield(expParam,'solver') - warning('AITB:N','Frame length=256 is used to have faster computations. Recommended frame length is 512 at 8kHz.'); - warning('AITB:overlap','Overlap factor=2 is used to have faster computations. Recommended value: 4.'); - - expParam.solver.name = 'OMP-G'; - expParam.solver.function = @inpaintSignal_IndependentProcessingOfFrames; - expParam.solver.param.N = 512; % frame length - expParam.solver.param.N = 256; % frame length - expParam.solver.param.inpaintFrame = @inpaintFrame_OMP_Gabor; % solver function - expParam.solver.param.OMPerr = 0.001; - expParam.solver.param.sparsityDegree = expParam.solver.param.N/4; - expParam.solver.param.D_fun = @Gabor_Dictionary; % Dictionary (function handle) - expParam.solver.param.OLA_frameOverlapFactor = 4; - expParam.solver.param.OLA_frameOverlapFactor = 2; - expParam.solver.param.redundancyFactor = 2; % Dictionary redundancy - expParam.solver.param.wd = @wRect; % Weighting window for dictionary atoms - expParam.solver.param.wa = @wRect; % Analysis window - expParam.solver.param.OLA_ws = @wSine; % Synthesis window - expParam.solver.param.SKIP_CLEAN_FRAMES = true; % do not process frames where there is no missing samples - expParam.solver.param.MULTITHREAD_FRAME_PROCESSING = false; % not implemented yet -end -if ~isfield(expParam,'destDir'), - expParam.destDir = '../../tmp/declipOneSound/'; -end -if ~exist(expParam.destDir,'dir') - mkdir(expParam.destDir) -end - -%% Read test signal -[x fs] = wavread(expParam.filename); - -%% Generate the problem -[problemData, solutionData] = generateDeclippingProblem(x,expParam.clippingLevel); - -%% Declip with solver -fprintf('\nDeclipping\n') -% [xEst1 xEst2] = inpaintSignal_IndependentProcessingOfFrames(problemData,param); -solverParam = expParam.solver.param; -[xEst1 xEst2] = expParam.solver.function(problemData,solverParam); - -%% Compute and display SNR performance -L = length(xEst1); -N = expParam.solver.param.N; -[SNRAll, SNRmiss] = SNRInpaintingPerformance(... - solutionData.xClean(N:L-N),problemData.x(N:L-N),... - xEst2(N:L-N),problemData.IMiss(N:L-N)); -fprintf('SNR on missing samples:\n'); -fprintf('Clipped: %g dB\n',SNRmiss(1)); -fprintf('Estimate: %g dB\n',SNRmiss(2)); - - -% Plot results -xClipped = problemData.x; -xClean = solutionData.xClean; -figure -hold on -plot(xClipped,'r') -plot(xClean) -plot(xEst2,'--g') -plot([1;length(xClipped)],[1;1]*[-1,1]*max(abs(xClipped)),':r') -legend('Clipped','True solution','Estimate') - -% Normalized and save sounds -normX = 1.1*max(abs([xEst1(:);xEst2(:);xClean(:)])); -L = min([length(xEst2),length(xEst1),length(xClean),length(xEst1),length(xClipped)]); -xEst1 = xEst1(1:L)/normX; -xEst2 = xEst2(1:L)/normX; -xClipped = xClipped(1:L)/normX; -xClean = xClean(1:L)/normX; -wavwrite(xEst1,fs,[expParam.destDir 'xEst1.wav']); -wavwrite(xEst2,fs,[expParam.destDir 'xEst2.wav']); -wavwrite(xClipped,fs,[expParam.destDir 'xClipped.wav']); -wavwrite(xClean,fs,[expParam.destDir 'xClean.wav']); - - -return