!FIR - FIR filter, direct form !IIR - IIR filter, cascade of biquad sections !ALL - All-pole filter, direct formSubsequent records contain filter coefficients. Comment records ('!' in the first position of the record) can be interspersed amongst the data. Data records are free form, with data values separated by white space (blanks, tabs and newlines). Commas can also be used to separate data values, but only within records, i.e. a comma should not appear at the end of a record.
FIR filters are specified by the direct-form coefficients h[i],
N-1 -i H(z) = SUM h[i] z . i=0
IIR filters are implemented as the cascade of biquadratic filter sections, where each section has a z-transform,
h(i,0)*z^2 + h(i,1)*z + h(i,2) H(i,z) = ------------------------------ . z^2 + h(i,3)*z + h(i,4)
All-pole filters are specified by direct-form feedback coefficients,
1 N-1 -i H(z) = ---- , where C(z) = SUM h[i] z . C(z) i=0
For FIR filters, a sample rate change can be affected with interpolation and subsampling. For IIR and all-pole filters, the output can be subsampled. Let Ir and Nsub be the interpolation and subsampling factors, respectively. Conceptually, the rate change is accomplished as follows.
The initial filter alignment and the number of output samples can be specified with options. The filter alignment specifies the position of the filter relative to the input data for calculating the first output sample. For FIR filters, this alignment is relative to the increased rate input sequence. Specifically, let the number of samples in the input file be Nin. The input can be considered to be an array x(0),...,x(Nin-1). The increased rate sequence is xi(.), with xi(k*Ir)=x(k). The first output sample is calculated with the beginning of the impulse response of the filter aligned with xi(idoffs). The array xi(.) can be considered to be of length Nin*Ir; the first non-zero sample is xi(0)=x(0), the last non-zero sample is xi((Nin-1)*Ir). Conceptually, the impulse impulse response is moved in steps of Nsub to create the output samples.
The intent is that the output samples are the subset of the values the would be obtained if the infinite length sequence formed by padding out the input data on either end with zeros were to be filtered. To this end, the filter calculations need warm-up points, particularly for the case that the initial filter alignment is not at the beginning of the input data. For FIR filters, this is taken into account by reading previous input values into the filter memory. For IIR and all-pole filters, previous outputs are also needed as warm-up points. If the initial alignment is near the beginning of the data, the IIR filter is run from the beginning of the data to generate the warm-up points. For larger alignment offsets, the IIR filter is backed up for a maximum of 1000 samples to provide the warm-up points.
If the initial filter alignment is not explicitly specified, it is chosen to be zero, except for symmetric or anti-symmetric FIR filters. In those cases the default alignment is Ncof/2-1 for even length filters and (Ncof-1)/2 for odd length filters. If the number of output samples is not explicitly set, it is chosen to be Ir*Nin/Nsub. For the case of Ir=1 and Nsub=1, this results in the same number of output samples as input samples. If the initial filter alignment, offs, is explicitly specified, the number of output samples is chosen to be (Ir*Nin-offs)/Nsub. This value can be overridden by explicitly setting the number of output samples.
".au" - AU audio file ".wav" - WAVE file ".aif" - AIFF sound file ".afc" - AIFF-C sound file ".raw" - Headerless file (native byte order) ".txt" - Headerless file (text data)
"AU" or "au" - AU audio file "WAVE" or "wave" - WAVE file "WAVE-NOEX" or "wave-noex" - WAVE file (no extensible data) "AIFF-C" "aiff-c" - AIFF-C sound file "AIFF" or "aiff" - AIFF sound file "noheader" or "noheader_native" - Headerless file (native byte order) "noheader_swap" - Headerless file (byte swapped) "noheader_big-endian" - Headerless file (big-endian byte order) "noheader_little-endian" - Headerless file (little-endian byte order)
"mu-law8" - 8-bit mu-law data "A-law8" - 8-bit A-law data "unsigned8" - offset-binary 8-bit integer data "integer8" - two's-complement 8-bit integer data "integer16" - two's-complement 16-bit integer data "integer24" - two's-complement 24-bit integer data "integer32" - two's-complement 32-bit integer data "float32" - 32-bit floating-point data "float64" - 64-bit floating-point data "text" - text dataThe data formats available depend on the output file type. AU audio files:
mu-law, A-law, 8/16/24/32-bit integer, 32/64-bit floatWAVE files:
mu-law, A-law, offset-binary 8-bit integer, 16/24/32-bit integer, 32/64-bit floatAIFF-C sound files:
mu-law, A-law, 8/16/24/32-bit integer, 32/64-bit floatAIFF sound files:
8/16/24/32-bit integerHeaderless files:
all data formats
"FL" - Front Left "FR" - Front Right "FC" - Front Center "LF" - Low Frequency "BL" - Back Left "BR" - Back Right "FLC" - Front Left of Center "FRC" - Front Right of Center "BC" - Back Center "SL" - Side Left "SR" - Side Right "TC" - Top Center "TFL" - Top Front Left "TFC" - Top Front Center "TFR" - Top Front Right "TBL" - Top Back Lefty "TBC" - Top Back Center "TBR" - Top Back Right "-" - none
By default, the output file contains a standard audio file information string.
Standard Audio File Information: date: 2001-01-25 19:19:39 UTC date program: FiltAudio program nameThis information can be changed with the header information string which is specified as one of the command line options. Structured information records should adhere to the above format with a named field terminated by a colon, followed by numeric data or text. Comments can follow as unstructured information.
Record delimiter: Newline character or the two character escape sequence "\" + "n". Line delimiter: Within records, lines are delimiteded by a carriage control character, the two character escape sequence "\" + "r", or the two character sequence "\" + newline.If the information string starts with a record delimiter, the header information string is appended to the standard header information. If not, the user supplied header information string appears alone.
"auto" - determine the input file type from the file header "AU" or "au" - AU audio file "WAVE" or "wave" - WAVE file "AIFF" or "aiff" - AIFF or AIFF-C sound file "noheader" - headerless (non-standard or no header) audio file "SPHERE" - NIST SPHERE audio file "ESPS" - ESPS sampled data feature file "IRCAM" - IRCAM soundfile "SPPACK" - SPPACK file "INRS" - INRS-Telecom audio file "SPW" - Comdisco SPW Signal file "CSL" or "NSP" - CSL NSP file "text" - Text audio file
"Format, Start, Sfreq, Swapb, Nchan, ScaleF"
"undefined" - Headerless files will be rejected "mu-law8" - 8-bit mu-law data "A-law8" - 8-bit A-law data "unsigned8" - offset-binary 8-bit integer data "integer8" - two's-complement 8-bit integer data "integer16" - two's-complement 16-bit integer data "integer24" - two's-complement 24-bit integer data "integer32" - two's-complement 32-bit integer data "float32" - 32-bit floating-point data "float64" - 64-bit floating-point data "text" - text data
"native" - no byte swapping "little-endian" - file data is in little-endian byte order "big-endian" - file data is in big-endian byte order "swap" - swap the data bytes as the data is read
"default" - Scale factor chosen appropriate to the type of data. The scaling factors shown below are applied to the data in the file. 8-bit mu-law: 1/32768 8-bit A-law: 1/32768 8-bit integer: 128/32768 16-bit integer: 1/32768 24-bit integer: 1/(256*32768) 32-bit integer: 1/(65536*32768) float data: 1 "<number or ratio>" - Specify the scale factor to be applied to the data from the file.
"undefined, 0, 8000., native, 1, default"