Home > voicebox > teager.m

# teager

## PURPOSE

TEAGER calculate teager energy waveform Y=(X,D,M)

## SYNOPSIS

function y=teager(x,d,m)

## DESCRIPTION

```TEAGER calculate teager energy waveform Y=(X,D,M)

Inputs:  x         speech signal
d         dimension to apply filter along [default 1st non-singleton]
m         Normally Y has the same length as X and the first
and last output samples are extrapolated. Setting m='x'
supresses this extrapolation and Y will be two
samples shorter than X

Outputs:  Y         output signal: y(n)=abs(x(n))^2 - x(n+1)*conj(x(n-1))

Calculates the Teager energy waveform [1]. The following waveforms give
a constant output (independent of n) where A, B, C are real constants:
(a) x(n) = A*sin(B*n+C)    -->   y(n) = (A*sin(B))^2
(b) x(n) = A*n + B         -->   y(n) = A^2
(c) x(n) = A*exp(j(B*n+C)) -->   y(n) = A^2*(1-exp(2jB))
(d) x(n) = A*exp(B*n+C)    -->   y(n) = 0

Reference:
[1]    J. Kaiser. On a simple algorithm to calculate the ‘energy’ of a signal.
In Proc IEEE Intl Conf Acoustics, Speech and Signal Processing,
pages 381–384, vol.1, Apr. 1990. doi: 10.1109/ICASSP.1990.115702.```

## CROSS-REFERENCE INFORMATION

This function calls:
This function is called by:

## SOURCE CODE

```0001 function y=teager(x,d,m)
0002 %TEAGER calculate teager energy waveform Y=(X,D,M)
0003 %
0004 %  Inputs:  x         speech signal
0005 %           d         dimension to apply filter along [default 1st non-singleton]
0006 %           m         Normally Y has the same length as X and the first
0007 %                     and last output samples are extrapolated. Setting m='x'
0008 %                     supresses this extrapolation and Y will be two
0009 %                     samples shorter than X
0010 %
0011 % Outputs:  Y         output signal: y(n)=abs(x(n))^2 - x(n+1)*conj(x(n-1))
0012 %
0013 % Calculates the Teager energy waveform [1]. The following waveforms give
0014 % a constant output (independent of n) where A, B, C are real constants:
0015 %  (a) x(n) = A*sin(B*n+C)    -->   y(n) = (A*sin(B))^2
0016 %  (b) x(n) = A*n + B         -->   y(n) = A^2
0017 %  (c) x(n) = A*exp(j(B*n+C)) -->   y(n) = A^2*(1-exp(2jB))
0018 %  (d) x(n) = A*exp(B*n+C)    -->   y(n) = 0
0019 %
0020 % Reference:
0021 %  [1]    J. Kaiser. On a simple algorithm to calculate the ‘energy’ of a signal.
0022 %       In Proc IEEE Intl Conf Acoustics, Speech and Signal Processing,
0023 %       pages 381–384, vol.1, Apr. 1990. doi: 10.1109/ICASSP.1990.115702.
0024
0025 %      Copyright (C) Mike Brookes 1997
0026 %      Version: \$Id: teager.m 713 2011-10-16 14:45:43Z dmb \$
0027 %
0028 %   VOICEBOX is a MATLAB toolbox for speech processing.
0030 %
0031 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0032 %   This program is free software; you can redistribute it and/or modify
0034 %   the Free Software Foundation; either version 2 of the License, or
0035 %   (at your option) any later version.
0036 %
0037 %   This program is distributed in the hope that it will be useful,
0038 %   but WITHOUT ANY WARRANTY; without even the implied warranty of
0039 %   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0040 %   GNU General Public License for more details.
0041 %
0042 %   You can obtain a copy of the GNU General Public License from
0043 %   http://www.gnu.org/copyleft/gpl.html or by writing to
0044 %   Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139, USA.
0045 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
0046 e=size(x);
0047 p=prod(e);
0048 if nargin<2             % if no dimension given, find the first non-singleton
0049     d=find(e>1,1);
0050     if ~numel(d)
0051         d=1;
0052     end
0053 end
0054 k=e(d);                 % size of active dimension
0055 q=p/k;                  % size of remainder
0056 if d==1
0057     z=reshape(x,k,q);
0058 else
0059     z=shiftdim(x,d-1);
0060     r=size(z);
0061     z=reshape(z,k,q);
0062 end
0063 if nargin>2 && any(m=='x')
0064     y=z(2:k-1,:).*conj(z(2:k-1,:))-z(3:k,:).*conj(z(1:k-2,:));
0065     k=k-2;              % we have lost two elements
0066 elseif k>=4
0067     y=zeros(k,q);
0068     y(2:k-1,:)=z(2:k-1,:).*conj(z(2:k-1,:))-z(3:k,:).*conj(z(1:k-2,:));
0069     y(1,:)=2*y(2,:)-y(3,:);             % linearly interpolate the end points
0070     y(k,:)=2*y(k-1,:)-y(k-2,:);
0071 elseif k==3
0072     y=repmat(x(2,:).*conj(x(2,:))-x(3,:).*conj(x(1,:)),3,1);
0073 else
0074     y=zeros(k,q);
0075 end
0076 if d==1
0077     e(d)=k;
0078     y=reshape(y,e);
0079 else
0080     r(1)=k;
0081     y=shiftdim(reshape(y,r),length(e)+1-d);
0082 end```

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