Mercurial > hg > audio-degradation-toolbox
view AudioDegradationToolbox/degradationUnit_applyHighpassFilter.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 |
line wrap: on
line source
function [f_audio_out,timepositions_afterDegr] = degradationUnit_applyHighpassFilter(f_audio, samplingFreq, timepositions_beforeDegr, parameter) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Name: degradation_applyHighpassFilter % Date: 2013-04 % Programmer: Matthias Mauch % % Description: % - applies a highpass filter to the audio % % Input: % f_audio - audio signal \in [-1,1]^{NxC} with C being the number of % channels % timepositions_beforeDegr - some degradations delay the input signal. If % some points in time are given via this % parameter, timepositions_afterDegr will % return the corresponding positions in the % output. Set to [] if unavailable. Set f_audio % and samplingFreq to [] to compute only % timepositions_afterDegr. % % Input (optional): parameter % .stopFrequency = 200 - stop band edge frequency in Hz % .passFrequency = - pass band edge frequency in Hz, % default is 2 x [stop band edge frequency] % % Output: % f_audio_out - audio output signal % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Audio Degradation Toolbox % % Centre for Digital Music, Queen Mary University of London. % This file copyright 2013 Sebastian Ewert, Matthias Mauch and QMUL. % % This program is free software; you can redistribute it and/or % modify it under the terms of the GNU General Public License as % published by the Free Software Foundation; either version 2 of the % License, or (at your option) any later version. See the file % COPYING included with this distribution for more information. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Check parameters %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% if nargin<4 parameter=[]; end if nargin<3 timepositions_beforeDegr=[]; end if nargin<2 error('Please specify input data'); end if isfield(parameter,'stopFrequency')==0 parameter.stopFrequency = 200; end if isfield(parameter,'passFrequency')==0 parameter.passFrequency = 2 * parameter.stopFrequency; end if parameter.stopFrequency > parameter.passFrequency error('Please choose a pass frequency greater than the stop frequency.'); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Main program %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% f_audio_out = []; if ~isempty(f_audio) omega_stop = parameter.stopFrequency / samplingFreq * 2 * pi; % stopband omega omega_pass = parameter.passFrequency / samplingFreq * 2 * pi; % passband omega transition_width = abs(omega_stop-omega_pass); lobe_width = 3.32; filter_order = ceil(lobe_width*pi/transition_width); % filter order via transition bandwidth (see lecture) filter_length = 2*filter_order + 1; n = 0:(filter_length-1); omega_cutoff = (omega_stop+omega_pass)/2; % cutoff frequency is mean of pass and stopband edges alpha = (filter_length-1)/2; m = n - alpha; % symmetricised indices hd = -omega_cutoff/pi * sinc(omega_cutoff/pi*m); hd(alpha+1) = hd(alpha+1) + 1; window = hamming(filter_length)'; h = hd .* window; f_audio_out = fftfilt(h, [f_audio; zeros([filter_order, size(f_audio,2)])]); f_audio_out = f_audio_out((filter_order + 1):end, :); f_audio_out(f_audio_out < -1) = -1; f_audio_out(f_audio_out > 1) = 1; f_audio_out = f_audio_out * 0.999; end % This degradation has no delay. timepositions_afterDegr = timepositions_beforeDegr; end