annotate AudioDegradationToolbox/degradationUnit_applyClippingAlternative.m @ 11:2d0ed50c547f version 0.11

Removed tag version 0.11
author matthiasm
date Wed, 21 Aug 2013 19:18:43 +0100
parents 9d682f5e3927
children
rev   line source
matthiasm@0 1 function [f_audio_out,timepositions_afterDegr] = degradationUnit_applyClippingAlternative(f_audio, samplingFreq, timepositions_beforeDegr, parameter)
matthiasm@0 2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
matthiasm@0 3 % Name: degradation_applyClippingAlternative
matthiasm@0 4 % Date: 2013-04
matthiasm@0 5 % Programmer: Sebastian Ewert
matthiasm@0 6 %
matthiasm@0 7 % Description:
matthiasm@0 8 % - applies clipping by over-normalising
matthiasm@0 9 %
matthiasm@0 10 % Input:
matthiasm@0 11 % f_audio - audio signal \in [-1,1]^{NxC} with C being the number of
matthiasm@0 12 % channels
matthiasm@0 13 % timepositions_beforeDegr - some degradations delay the input signal. If
matthiasm@0 14 % some points in time are given via this
matthiasm@0 15 % parameter, timepositions_afterDegr will
matthiasm@0 16 % return the corresponding positions in the
matthiasm@0 17 % output. Set to [] if unavailable. Set f_audio
matthiasm@0 18 % and samplingFreq to [] to compute only
matthiasm@0 19 % timepositions_afterDegr.
matthiasm@0 20 %
matthiasm@0 21 % Input (optional): parameter
matthiasm@0 22 % .clipAPercentageOfSamples = 1 - if set to zero a fixed number of
matthiasm@0 23 % samples will be clipped
matthiasm@0 24 % .parameter.percentOfSamples = 1 - used only if clipAPercentageOfSamples
matthiasm@0 25 % is 1
matthiasm@0 26 % .parameter.numSamplesClipped = 1 - used only if clipAPercentageOfSamples
matthiasm@0 27 % is 0
matthiasm@0 28 % timepositions_beforeDegr - some degradations delay the input signal. If
matthiasm@0 29 % some points in time are given via this
matthiasm@0 30 % parameter, timepositions_afterDegr will
matthiasm@0 31 % return the corresponding positions in the
matthiasm@0 32 % output
matthiasm@0 33 %
matthiasm@0 34 % Output:
matthiasm@0 35 % f_audio_out - audio output signal
matthiasm@0 36 %
matthiasm@0 37 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
matthiasm@0 38
matthiasm@0 39 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
matthiasm@0 40 % Audio Degradation Toolbox
matthiasm@0 41 %
matthiasm@0 42 % Centre for Digital Music, Queen Mary University of London.
matthiasm@0 43 % This file copyright 2013 Sebastian Ewert, Matthias Mauch and QMUL.
matthiasm@0 44 %
matthiasm@0 45 % This program is free software; you can redistribute it and/or
matthiasm@0 46 % modify it under the terms of the GNU General Public License as
matthiasm@0 47 % published by the Free Software Foundation; either version 2 of the
matthiasm@0 48 % License, or (at your option) any later version. See the file
matthiasm@0 49 % COPYING included with this distribution for more information.
matthiasm@0 50 %
matthiasm@0 51 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
matthiasm@0 52
matthiasm@0 53 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
matthiasm@0 54 % Check parameters
matthiasm@0 55 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
matthiasm@0 56 if nargin<4
matthiasm@0 57 parameter=[];
matthiasm@0 58 end
matthiasm@0 59 if nargin<3
matthiasm@0 60 timepositions_beforeDegr=[];
matthiasm@0 61 end
matthiasm@0 62 if nargin<2
matthiasm@0 63 error('Please specify input data');
matthiasm@0 64 end
matthiasm@0 65
matthiasm@0 66 if isfield(parameter,'clipAPercentageOfSamples')==0
matthiasm@0 67 parameter.clipAPercentageOfSamples = 1;
matthiasm@0 68 end
matthiasm@0 69 if isfield(parameter,'percentOfSamples')==0
matthiasm@0 70 parameter.percentOfSamples = 1;
matthiasm@0 71 end
matthiasm@0 72 if isfield(parameter,'numSamplesClipped')==0
matthiasm@0 73 parameter.numSamplesClipped = 10000;
matthiasm@0 74 end
matthiasm@0 75
matthiasm@0 76 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
matthiasm@0 77 % Main program
matthiasm@0 78 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
matthiasm@0 79
matthiasm@0 80 f_audio_out = [];
matthiasm@0 81 if ~isempty(f_audio)
matthiasm@0 82 sortedValues = sort(abs(f_audio(:)));
matthiasm@0 83 numSamples = length(sortedValues);
matthiasm@0 84 if parameter.clipAPercentageOfSamples
matthiasm@0 85 idxStartSample = round( (1-parameter.percentOfSamples/100) * numSamples);
matthiasm@0 86 divisor = min(sortedValues(idxStartSample:numSamples));
matthiasm@0 87 else
matthiasm@0 88 if parameter.numSamplesClipped > numSamples
matthiasm@0 89 numSamplesClipped = numSamples;
matthiasm@0 90 else
matthiasm@0 91 numSamplesClipped = parameter.numSamplesClipped;
matthiasm@0 92 end
matthiasm@0 93 divisor = min(sortedValues(numSamples-numSamplesClipped+1:numSamples));
matthiasm@0 94 end
matthiasm@0 95 clear sortedValues
matthiasm@0 96
matthiasm@0 97 divisor = max(divisor,eps);
matthiasm@0 98 f_audio_out = f_audio / divisor;
matthiasm@0 99
matthiasm@0 100 f_audio_out(f_audio_out < -1) = -1;
matthiasm@0 101 f_audio_out(f_audio_out > 1) = 1;
matthiasm@0 102 f_audio_out = f_audio_out * 0.999;
matthiasm@0 103
matthiasm@0 104 end
matthiasm@0 105
matthiasm@0 106 % This degradation does not impose a delay
matthiasm@0 107 timepositions_afterDegr = timepositions_beforeDegr;
matthiasm@0 108
matthiasm@0 109 end