Document toolboxDocument toolbox

(8.D.2.5) AllpassDelay

Overview

High order allpass structure with integer time delays

Discussion

The allpass_delay_module.m and allpass_delay16_module.m implement the digital system shown below:

The overall transfer response is an allpass filter:

The filter has a constant magnitude response of 1.0 and a non-zero phase response.  The filter has a DC gain of 1.0.

The arguments to the module instantiation function are:

M=allpass_delay_module(NAME, MAXDELAY, OUTPUTSTATE)

MAXDELAY specifies the size of the delay buffer.  At run-time, you can vary the delay in the range 0 to MAXDELAY as well as the coefficient

.  If the delay is equal to 0, then the algorithm processes the audio data as a bypass.  The third argument OUTPUTSTATE is a Boolean which specifies whether the module has an optional 2nd output pin.  The 2nd output pin gets the output of the delay buffer as shown above. 

The module allpass_delay16_module.m has exactly the same functionality except that the data stored in the delay line is quantized to fract16 values in order to save memory.  The input data to the delay line must be in the range [-1 +1) or else it will be clipped.  The output data from the delay line is converted back to floating-point values for further processing.  The allpass_delay16_module.m takes roughly half the memory as compared with the allpass_delay_module.m though with a loss of precision.

Type Definition

typedef struct _ModuleAllpassDelay {    ModuleInstanceDescriptor instance;            // Common Audio Weaver module instance structure    INT32 maxDelay;                               // Maximum delay that can be realized, in samples. The size of the delay buffer (maxDelay+1)*numChannels    INT32 currentDelay;                           // Current delay    FLOAT32 coef;                                 // Feedback/-feedforward coefficient for the allpass delay.    INT32 stateIndex;                             // Index of the oldest state variable in the array of state variables    FLOAT32* state;                               // State variable array } ModuleAllpassDelayClass;

Variables

Properties

Name

Type

Usage

isHidden

Default value

Range

Units

maxDelay

int

const

0

100

1:100000

samples

currentDelay

int

parameter

0

0

0:1:100

samples

coef

float

parameter

0

0.5

-1:1

 

stateIndex

int

state

1

0

Unrestricted

 

state

float*

state

1

[1 x 101]

Unrestricted

 

Pins

Input Pins

Name: in

Description: audio input

Data type: float

Channel range: Unrestricted

Block size range: Unrestricted

Sample rate range: Unrestricted

Complex support: Real

Output Pins

Name: out

Description: audio output

Data type: float

Name: state

Description: audio output

Data type: float

MATLAB Usage

File Name: allpass_delay_module.m

M=allpass_delay_module(NAME, MAXDELAY, OUTPUTSTATE) Delay based allpass (1st order), using integer length delay. Arguments: NAME - name of the module. MAXDELAY - Maximum delay, in samples. OUTPUTSTATE - optional Boolean argument that specifies whether the module has a second output pin which gets the direct output of the state buffer. By default, OUTPUTSTATE = 0.

Â