annotate AudioDegradationToolbox/degradationUnit_applyAliasing.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_applyAliasing(f_audio, samplingFreq, timepositions_beforeDegr, parameter)
matthiasm@0 2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
matthiasm@0 3 % Name: degradation_applyAliasing
matthiasm@0 4 % Version: 1
matthiasm@0 5 % Date: 2013-01-23
matthiasm@0 6 % Programmer: Matthias Mauch
matthiasm@0 7 %
matthiasm@0 8 % Description:
matthiasm@0 9 % - downsamples without filtering, then upsamples again using S&H
matthiasm@0 10 %
matthiasm@0 11 % Input:
matthiasm@0 12 % f_audio - audio signal \in [-1,1]^{NxC} with C being the number of
matthiasm@0 13 % channels
matthiasm@0 14 % samplingFreq - sampling frequency of f_audio
matthiasm@0 15 % timepositions_beforeDegr - some degradations delay the input signal. If
matthiasm@0 16 % some points in time are given via this
matthiasm@0 17 % parameter, timepositions_afterDegr will
matthiasm@0 18 % return the corresponding positions in the
matthiasm@0 19 % output. Set to [] if unavailable. Set f_audio
matthiasm@0 20 % and samplingFreq to [] to compute only
matthiasm@0 21 % timepositions_afterDegr.
matthiasm@0 22 %
matthiasm@0 23 % Input (optional): parameter
matthiasm@0 24 % .dsFrequency = 8000 - destination sampling frequency
matthiasm@0 25 % .normalizeOutputAudio = 1 - peak normalize output audio
matthiasm@0 26 %
matthiasm@0 27 % Output:
matthiasm@0 28 % f_audio - audio output signal
matthiasm@0 29 %
matthiasm@0 30 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
matthiasm@0 31
matthiasm@0 32 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
matthiasm@0 33 % Audio Degradation Toolbox
matthiasm@0 34 %
matthiasm@0 35 % Centre for Digital Music, Queen Mary University of London.
matthiasm@0 36 % This file copyright 2013 Sebastian Ewert, Matthias Mauch and QMUL.
matthiasm@0 37 %
matthiasm@0 38 % This program is free software; you can redistribute it and/or
matthiasm@0 39 % modify it under the terms of the GNU General Public License as
matthiasm@0 40 % published by the Free Software Foundation; either version 2 of the
matthiasm@0 41 % License, or (at your option) any later version. See the file
matthiasm@0 42 % COPYING included with this distribution for more information.
matthiasm@0 43 %
matthiasm@0 44 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
matthiasm@0 45
matthiasm@0 46 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
matthiasm@0 47 % Check parameters
matthiasm@0 48 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
matthiasm@0 49 if nargin<4
matthiasm@0 50 parameter=[];
matthiasm@0 51 end
matthiasm@0 52 if nargin<3
matthiasm@0 53 timepositions_beforeDegr=[];
matthiasm@0 54 end
matthiasm@0 55 if nargin<2
matthiasm@0 56 error('Please specify input data');
matthiasm@0 57 end
matthiasm@0 58
matthiasm@0 59 if isfield(parameter,'dsFrequency')==0
matthiasm@0 60 parameter.dsFrequency = 8000;
matthiasm@0 61 end
matthiasm@0 62 if isfield(parameter,'normalizeOutputAudio')==0
matthiasm@0 63 parameter.normalizeOutputAudio = 1;
matthiasm@0 64 end
matthiasm@0 65
matthiasm@0 66 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
matthiasm@0 67 % Main program
matthiasm@0 68 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
matthiasm@0 69
matthiasm@0 70 f_audio_out = [];
matthiasm@0 71 if ~isempty(f_audio)
matthiasm@0 72
matthiasm@0 73 % We cannot employ resample as it always imposes a lowpass pass filter to
matthiasm@0 74 % counter aliasing
matthiasm@0 75
matthiasm@0 76 nSample = size(f_audio, 1);
matthiasm@0 77 nSampleNew = round(nSample / samplingFreq * parameter.dsFrequency);
matthiasm@0 78
matthiasm@0 79 tOld = (0:(nSample-1))/samplingFreq;
matthiasm@0 80 tNew = (0:(nSampleNew-1))/parameter.dsFrequency;
matthiasm@0 81
matthiasm@0 82 temp = interp1(tOld, f_audio, tNew, 'nearest');
matthiasm@0 83 f_audio_out = resample(temp, samplingFreq, parameter.dsFrequency);
matthiasm@0 84
matthiasm@0 85 if parameter.normalizeOutputAudio
matthiasm@0 86 f_audio_out = adthelper_normalizeAudio(f_audio_out, samplingFreq);
matthiasm@0 87 end
matthiasm@0 88 end
matthiasm@0 89
matthiasm@0 90 % This degradation does not impose a delay
matthiasm@0 91 timepositions_afterDegr = timepositions_beforeDegr;
matthiasm@0 92
matthiasm@0 93 end