SOFA specifications
Specifications
- SOFA 1.0 is reflected by the AES69-2015 standard. It mostly corresponds to SOFA 0.6, which specs can be downloaded here. A document with SOFA 1.0 specs is under preparation.
Older specs:
- Version 0.5: Download specifications
- Version 0.4: Discussion on the specifications (closed)
- Version 0.3: Download specifications
- Version 0.2: Specifications
- Version 0.1: Specifications as presented at the AES Convention 2013 in Rom
Coordinate system
Data Types
FIR (SOFA 1.0)
For storing impulse responses.
Note: Delay is mandatory (set to 0 if not used).
| Name | Default | Flags | Dimensions | Type | Comment |
|---|---|---|---|---|---|
| GLOBAL:DataType | FIR | rm | attribute | ||
| Data.IR | 0 | m | mRn | double | Impulse responses |
| Data.SamplingRate | 48000 | m | I | double | Sampling rate of the samples in Data.IR |
| Data.SamplingRate:Units | hertz | m | attribute | Unit of the sampling rate | |
| Data.Delay | 0 | m | IR, MR | double | Additional delay of each IR (always in samples, i.e. units of N) |
TF (SOFA 1.0)
Useful to describe a transfer function by a sparse number of frequencies. The guys from BEM simulations like it.
Note: the dimensional variable N is mandatory, it must be of dimension N, and must provide the frequency values.
| Name | Default | Flags | Dimensions | Type | Comment |
|---|---|---|---|---|---|
| GLOBAL:DataType | TF | rm | attribute | ||
| Data.Real | 0 | m | mRn | double | The real part of the complex spectrum |
| Data.Imag | 0 | m | MRN | double | The imaginary part of the complex spectrum |
| N | 0 | m | N | double | Frequency values |
| N_LongName | frequency | attribute | |||
| N_Units | hertz | m | attribute | Unit of the values given in N |
FIRE (proposed)
FIRE is based on FIR and is intended for storing impulse responses which depend on the emitter (E).
Note: Delay is mandatory (set to 0 if not used).
| Name | Default | Flags | Dimensions | Type | Comment |
|---|---|---|---|---|---|
| GLOBAL:DataType | FIRE | rm | attribute | ||
| Data.IR | 0 | m | mREn | double | Impulse responses |
| Data.SamplingRate | 48000 | m | I | double | Sampling rate of the samples in Data.IR |
| Data.SamplingRate:Units | hertz | m | attribute | Unit of the sampling rate | |
| Data.Delay | 0 | m | IRE, MRE | double | Additional delay of each IR (always in samples, i.e. units of N) |
SOS (proposed)
This DataType stores a filter as a broadband delay and an arbitrary number of second order sections (SOSs).
The transfer function H(z) of a filter can be described as:
H(z) = B1(z) / A1(z) . B2(z) / A2(z) . ... . Bp(z) / Ap(z)
where p is the number of second order sections, A(z) is denominator representing the poles of a filter, and B(z) is nominator representing the zeros of a filter. Then, each SOS can be described as:
Bi(z) = bi,0 + bi,1 z^(-1) + bi,2 z^(-2)
Ai(z) = ai,0 + ai,1 z^(-1) + ai,2 z^(-2)
Note that usually, Ai(z) is normalized such that ai,0 = 1.
Thus, in the DataType SOS, a filter is represented by three mandatory variables:
- Data.SamplingRate: sampling rate used to describe the filter.
- Data.Delay: broadband delay (in samples resulting from SamplingRate). Note: Use Delay of zero when not used.used).
- Data.SOS: list of coefficients of all SOSs. Data.SOS has the size of [ M R N ] with N being the total number of coefficients. N is an integer multiple of 6 and corresponds to 6p. Data.SOS: [ B1(z) A1(z) B2(z) A2(z) .... Bp(z) Ap(z) ] == [ b1,0 b1,1 b1,2 a1,0 a1,1 a1,2 b2,0 b2,1 b2,2 a2,0 a2,1 a2,2 .... bp,0 bp,1 bp,2 ap,0 ap,1 ap,2 ]
| Name | Default | Flags | Dimensions | Type | Comment |
|---|---|---|---|---|---|
| Data.SOS | [1 1] | m | mRn | double | Coefficients of the SOSs |
| Data.SamplingRate | 48000 | m | I | double | Sampling rate of the samples in Data.SOS |
| Data.SamplingRate:Units | hertz | m | attribute | Unit of the sampling rate | |
| Data.Delay | [0 0] | m | MR | double | Monaural delay in samples |
