Home > voicebox > distchar.m

# distchar

## PURPOSE

DISTCHAR calculates the cosh spectral distance between AR coefficients D=(AR1,AR2,MODE)

## SYNOPSIS

function d=distchar(ar1,ar2,mode)

## DESCRIPTION

```DISTCHAR calculates the cosh spectral distance between AR coefficients D=(AR1,AR2,MODE)

Inputs: AR1,AR2     AR coefficient sets to be compared. Each row contains a set of coefficients.
AR1 and AR2 must have the same number of columns.

MODE        Character string selecting the following options:
'x'  Calculate the full distance matrix from every row of AR1 to every row of AR2
'd'  Calculate only the distance between corresponding rows of AR1 and AR2
The default is 'd' if AR1 and AR2 have the same number of rows otherwise 'x'.

Output: D           If MODE='d' then D is a column vector with the same number of rows as the shorter of AR1 and AR2.
If MODE='x' then D is a matrix with the same number of rows as AR1 and the same number of columns as AR2'.

The COSH spectral distance is the average over +ve and -ve frequency of

cosh(log(p1/p2))-1   =   (p1-p2)^2/(2p1*p2)   =   (p1/p2 + p2/p1)/2 - 1

Where p1 and p2 are the power spectra corresponding to the AR coefficient sets AR1 and AR2.
The COSH distance is a symmetrical version of the Itakura-Saito distance: distchar(x,y)=(distisar(x,y)+distisar(y,x))/2```

## CROSS-REFERENCE INFORMATION

This function calls:
• lpcar2ra LPCAR2RA Convert ar filter to inverse filter autocorrelation coefs. RA=(AR)
• lpcar2rr LPCAR2RR Convert autoregressive coefficients to autocorrelation coefficients RR=(AR,P)
This function is called by:

## SOURCE CODE

```0001 function d=distchar(ar1,ar2,mode)
0002 %DISTCHAR calculates the cosh spectral distance between AR coefficients D=(AR1,AR2,MODE)
0003 %
0004 % Inputs: AR1,AR2     AR coefficient sets to be compared. Each row contains a set of coefficients.
0005 %                     AR1 and AR2 must have the same number of columns.
0006 %
0007 %         MODE        Character string selecting the following options:
0008 %                         'x'  Calculate the full distance matrix from every row of AR1 to every row of AR2
0009 %                         'd'  Calculate only the distance between corresponding rows of AR1 and AR2
0010 %                              The default is 'd' if AR1 and AR2 have the same number of rows otherwise 'x'.
0011 %
0012 % Output: D           If MODE='d' then D is a column vector with the same number of rows as the shorter of AR1 and AR2.
0013 %                     If MODE='x' then D is a matrix with the same number of rows as AR1 and the same number of columns as AR2'.
0014 %
0015 % The COSH spectral distance is the average over +ve and -ve frequency of
0016 %
0017 %                     cosh(log(p1/p2))-1   =   (p1-p2)^2/(2p1*p2)   =   (p1/p2 + p2/p1)/2 - 1
0018 %
0019 % Where p1 and p2 are the power spectra corresponding to the AR coefficient sets AR1 and AR2.
0020 % The COSH distance is a symmetrical version of the Itakura-Saito distance: distchar(x,y)=(distisar(x,y)+distisar(y,x))/2
0021
0022 % Since the power spectrum is the fourier transform of the autocorrelation, we can calculate
0023 % the average value of p1/p2 by taking the 0'th order term of the convolution of the autocorrelation
0024 % functions associated with p1 and 1/p2. Since 1/p2 corresponds to an FIR filter, this convolution is
0025 % a finite sum even though the autocorrelation function of p1 is infinite in extent.
0026
0027 % The Cosh distance can also be calculated directly from the power spectra; providing np is large
0028 % enough, the values of d0 and d1 in the following will be very similar:
0029 %
0030 %         np=255; d0=distchar(ar1,ar2); d1=distchpf(lpcar2pf(ar1,np),lpcar2pf(ar2,np))
0031 %
0032
0033 % Ref: A.H.Gray Jr and J.D.Markel, "Distance measures for speech processing", IEEE ASSP-24(5): 380-391, Oct 1976
0034 %      L. Rabiner abd B-H Juang, "Fundamentals of Speech Recognition", Section 4.5, Prentice-Hall 1993, ISBN 0-13-015157-2
0035
0036
0037 %      Copyright (C) Mike Brookes 1997
0038 %      Version: \$Id: distchar.m 713 2011-10-16 14:45:43Z dmb \$
0039 %
0040 %   VOICEBOX is a MATLAB toolbox for speech processing.
0042 %
0043 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0044 %   This program is free software; you can redistribute it and/or modify
0046 %   the Free Software Foundation; either version 2 of the License, or
0047 %   (at your option) any later version.
0048 %
0049 %   This program is distributed in the hope that it will be useful,
0050 %   but WITHOUT ANY WARRANTY; without even the implied warranty of
0051 %   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0052 %   GNU General Public License for more details.
0053 %
0054 %   You can obtain a copy of the GNU General Public License from
0055 %   http://www.gnu.org/copyleft/gpl.html or by writing to
0056 %   Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139, USA.
0057 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0058
0059 [nf1,p1]=size(ar1);
0060 nf2=size(ar2,1);
0061 p2=p1+1;
0062 m1=zeros(nf1,2*p1);
0063 m2=zeros(nf2,2*p1);
0064 m1(:,1:p1)=lpcar2rr(ar1);
0065 m1(:,p2:end)=lpcar2ra(ar1);
0066 m1(:,1)=m1(:,1)*0.5;
0067 m1(:,p2)=m1(:,p1+1)*0.5;
0068 m2(:,p2:end)=lpcar2rr(ar2);
0069 m2(:,1:p1)=lpcar2ra(ar2);
0070
0071 if nargin<3 | isempty(mode) mode='0'; end
0072 if any(mode=='d') | (mode~='x' & nf1==nf2)
0073    nx=min(nf1,nf2);
0074    d=sum(m1(1:nx,:).*m2(1:nx,:),2)-1;
0075 else
0076    d=m1*m2'-1;
0077 end```

Generated on Mon 06-Aug-2018 14:48:32 by m2html © 2003