SimpleFreeFieldSOS: Difference between revisions
Jump to navigation
Jump to search
Content deleted Content added
| (15 intermediate revisions by 3 users not shown) | |||
| Line 1: | Line 1: | ||
SimpleFreeFieldSOS : Simple Free Field Second Order Sections |
|||
== Data types == |
|||
==Description== |
|||
For storing second-order sections filters. |
|||
This SOFA convention set is similar to [[SimpleFreeFieldHRIR]]. The only difference is the DataType, which is [http://www.sofaconventions.org/mediawiki/index.php/SOFA_specifications#SOS_.28proposed.29 SOS], not FIR. SimpleFreeFieldSOS was requested to cover the needs coming from fast HRTF rendering, where an HRTF is represented as a broadband delay and small number of second-order sections (SOSs). |
|||
It is recommended to use [[SimpleFreeFieldHRSOS]] instead, which is defined in AES69-2020 (SOFA 2.0). |
|||
== Version 1.0 == |
|||
This version follows the conventions SimpleFreeFieldHRIR (version 1.0) standardized in AES69-2015. |
|||
Note: |
|||
* In contrast to SimpleFreeFieldHRIR 1.0, SimpleFreeFieldSOS 1.0 has not been included in the standard. But it can be considered as stable. |
|||
* SimpleFreeFieldSOS does not impose any restriction on the filter coefficients contained in Data.SOS. Especially it is the user responsibility to check whether the filters are stable or not. |
|||
* We encourage to provide information in 'History' about the creation of SOSs and estimation of delay from the underlying filters. |
|||
* We further encourage to use 'Parents' can be used to link the SimpleFreeFieldSOS file with the file containing the original filters. |
|||
Note: Delay is mandatory (set to 0 if not used). |
|||
{| border="1" |
{| border="1" |
||
!Name |
!Name |
||
!Default |
!Default |
||
![[SOFA_conventions#AnchorFlags|Flags]] |
|||
!Flags |
|||
!Dimensions |
![[SOFA_conventions#AnchorDimensions|Dimensions]] |
||
!Type |
!Type |
||
!Comment |
!Comment |
||
|- |
|- |
||
| |
|GLOBAL:Conventions||<nowiki>SOFA</nowiki>||rm||||attribute|| |
||
|- |
|- |
||
| |
|GLOBAL:Version||<nowiki>1.0</nowiki>||rm||||attribute|| |
||
|- |
|- |
||
| |
|GLOBAL:SOFAConventions||<nowiki>SimpleFreeFieldSOS</nowiki>||rm||||attribute||This convention set follows SimpleFreeFieldHRIR but the data is stored as second-order section (SOS) coefficients. |
||
|- |
|- |
||
| |
|GLOBAL:SOFAConventionsVersion||<nowiki>1.0</nowiki>||rm||||attribute|| |
||
|- |
|||
|GLOBAL:APIName||<nowiki></nowiki>||rm||||attribute|| |
|||
|- |
|||
|GLOBAL:APIVersion||<nowiki></nowiki>||rm||||attribute|| |
|||
|- |
|||
|GLOBAL:ApplicationName||<nowiki></nowiki>||||||attribute|| |
|||
|- |
|||
|GLOBAL:ApplicationVersion||<nowiki></nowiki>||||||attribute|| |
|||
|- |
|||
|GLOBAL:AuthorContact||<nowiki></nowiki>||m||||attribute|| |
|||
|- |
|||
|GLOBAL:Comment||<nowiki></nowiki>||||||attribute|| |
|||
|- |
|||
|GLOBAL:DataType||<nowiki>SOS</nowiki>||rm||||attribute||Filters described as second-order section (SOS) coefficients |
|||
|- |
|||
|GLOBAL:History||<nowiki></nowiki>||||||attribute|| |
|||
|- |
|||
|GLOBAL:License||<nowiki>No license provided, ask the author for permission</nowiki>||m||||attribute|| |
|||
|- |
|||
|GLOBAL:Organization||<nowiki></nowiki>||m||||attribute|| |
|||
|- |
|||
|GLOBAL:References||<nowiki></nowiki>||||||attribute|| |
|||
|- |
|||
|GLOBAL:RoomType||<nowiki>free field</nowiki>||m||||attribute|| |
|||
|- |
|||
|GLOBAL:Origin||<nowiki></nowiki>||||||attribute|| |
|||
|- |
|||
|GLOBAL:DateCreated||<nowiki></nowiki>||m||||attribute|| |
|||
|- |
|||
|GLOBAL:DateModified||<nowiki></nowiki>||m||||attribute|| |
|||
|- |
|||
|GLOBAL:Title||<nowiki></nowiki>||m||||attribute|| |
|||
|- |
|||
|ListenerPosition||<nowiki>[0 0 0] </nowiki>||m||IC, MC||double|| |
|||
|- |
|||
|ListenerPosition:Type||<nowiki>cartesian</nowiki>||m||||attribute|| |
|||
|- |
|||
|ListenerPosition:Units||<nowiki>metre</nowiki>||m||||attribute|| |
|||
|- |
|||
|ReceiverPosition||<nowiki>[0 0.09 0; 0 -0.09 0]</nowiki>||m||rCI, rCM||double|| |
|||
|- |
|||
|ReceiverPosition:Type||<nowiki>cartesian</nowiki>||m||||attribute|| |
|||
|- |
|||
|ReceiverPosition:Units||<nowiki>metre</nowiki>||m||||attribute|| |
|||
|- |
|||
|SourcePosition||<nowiki>[0 0 1]</nowiki>||m||IC, MC||double||Source position is assumed to vary for different directions/positions around the listener |
|||
|- |
|||
|SourcePosition:Type||<nowiki>spherical</nowiki>||m||||attribute|| |
|||
|- |
|||
|SourcePosition:Units||<nowiki>degree, degree, metre</nowiki>||m||||attribute|| |
|||
|- |
|||
|EmitterPosition||<nowiki>[0 0 0]</nowiki>||m||eCI, eCM||double|| |
|||
|- |
|||
|EmitterPosition:Type||<nowiki>cartesian</nowiki>||m||||attribute|| |
|||
|- |
|||
|EmitterPosition:Units||<nowiki>metre</nowiki>||m||||attribute|| |
|||
|- |
|||
|GLOBAL:DatabaseName||<nowiki></nowiki>||m||||attribute||name of the database to which these data belong |
|||
|- |
|||
|GLOBAL:ListenerShortName||<nowiki></nowiki>||m||||attribute||ID of the subject from the database |
|||
|- |
|||
|ListenerUp||<nowiki>[0 0 1]</nowiki>||m||IC, MC||double|| |
|||
|- |
|||
|ListenerView||<nowiki>[1 0 0]</nowiki>||m||IC, MC||double|| |
|||
|- |
|||
|ListenerView:Type||<nowiki>cartesian</nowiki>||m||||attribute|| |
|||
|- |
|||
|ListenerView:Units||<nowiki>metre</nowiki>||m||||attribute|| |
|||
|- |
|||
|Data.SOS||<nowiki>permute([0 0 0 1 0 0; 0 0 0 1 0 0], [3 1 2]);</nowiki>||m||mRn||double||Filter coefficients as SOS coefficients. |
|||
|- |
|||
|Data.SamplingRate||<nowiki>48000</nowiki>||m||I||double||Sampling rate of the coefficients in Data.SOS and the delay in Data.Delay |
|||
|- |
|||
|Data.SamplingRate:Units||<nowiki>hertz</nowiki>||m||||attribute|| |
|||
|- |
|||
|Data.Delay||<nowiki>[0 0]</nowiki>||m||IR, MR||double||Broadband delay (in samples resulting from SamplingRate) |
|||
|} |
|} |
||
==Description== |
|||
This convention is essentially the same as SimpleFreeFieldHRIR except that it is adapted to a parametric model of HRIR. |
|||
This parametric model consists of replacing HRIR (as FIR) with a monaural delay and second order sections filters. |
|||
==Background== |
|||
Being a causal and stable filter, an HRIR can be decomposed into a minimum phase part component and an all-pass component. |
|||
The phase of each HRIR is thus decomposed into the minimum phase and the phase of the all-pass component i.e. the excess phase. |
|||
The minimum phase is related to the magnitude spectrum through the Hilbert transform. |
|||
The excess phase of HRIR is usually linear (up to approx 8 - 10 kHz). |
|||
A simplified model of HRTF can thus be built where the all-pass component is replaced by a pure delay. This pure delay is referred to as monaural delay. |
|||
Each HRTF is thus fully described by its magnitude spectrum and the monaural delay. |
|||
Several perceptual studies (e.g. Wightman 1992) have shown the validity of such simplified model (given the fact that the phase information of the higher frequencies -- that is neglected by the model -- is not used by the auditory system to estimate the directions of arrival). |
|||
Finally the minimum phase part of HRTF can be modeled as an IIR filter. Many modeling techniques have been proposed. Anyway the resulting IIR digital filter needs to be represented as a cascade of first order or second order sections for numerical stability reasons. |
|||
==Proposal for SimpleFreeFieldSOS == |
|||
For the sake of simplicity, we consider that all the cascaded filters are second order filters (i.e. no first order filter). (anyway a first order filter can be represented with a second order filter). |
|||
The SOS is represented as follows: |
|||
H(z) = B1(z) / A1(z) . B2(z) / A2(z) . ... . Bp(z) / Ap(z) |
|||
where p is the number of second order sections. |
|||
Each second order section is represented by 6 filter taps: |
|||
Bi(z) = bi0 + bi1 z^(-1) + bi2 z^(-2) |
|||
Ai(z) = ai0 + ai1 z^(-1) + ai2 z^(-2) |
|||
(even though the denominator is usually normalized such that ai0 = 1). |
|||
For each filter H(z), the filter taps are arranged as follows: |
|||
[ B1(z) A1(z) B2(z) A2(z) .... Bp(z) Ap(z) ] == [ b10 b11 b12 a10 a11 a12 b20 b21 b22 a20 a21 a22 .... bp0 bp1 bp2 ap0 ap1 ap2 ] |
|||
SimpleFreeFieldSOS convention : everything similar to SimpleFreeFieldHRIR except the following: |
|||
DataType is 'SOS' (standing for 'second order sections'). |
|||
Data.SOS of size [ M R N ] contains the filter coefficients. N being the total number of coefficients, it is always a multiple of 6. |
|||
(N = 6 * p). |
|||
The SimpleFreeFieldSOS does not impose any restriction on the filter coefficients contained in Data.SOS. Especially it is the user responsibility to check whether the filters are stable or not. |
|||
Data.Delay is [M R] and contains the monaural delay (expressed in samples). |
|||
We encourage to use the 'History' attribute to store informations relative to the modelization process (algorithm(s) used to derive the IIR model, method used to estimate the monaural delays, etc.) |
|||
Latest revision as of 10:20, 5 October 2021
Description
This SOFA convention set is similar to SimpleFreeFieldHRIR. The only difference is the DataType, which is SOS, not FIR. SimpleFreeFieldSOS was requested to cover the needs coming from fast HRTF rendering, where an HRTF is represented as a broadband delay and small number of second-order sections (SOSs).
It is recommended to use SimpleFreeFieldHRSOS instead, which is defined in AES69-2020 (SOFA 2.0).
Version 1.0
This version follows the conventions SimpleFreeFieldHRIR (version 1.0) standardized in AES69-2015.
Note:
- In contrast to SimpleFreeFieldHRIR 1.0, SimpleFreeFieldSOS 1.0 has not been included in the standard. But it can be considered as stable.
- SimpleFreeFieldSOS does not impose any restriction on the filter coefficients contained in Data.SOS. Especially it is the user responsibility to check whether the filters are stable or not.
- We encourage to provide information in 'History' about the creation of SOSs and estimation of delay from the underlying filters.
- We further encourage to use 'Parents' can be used to link the SimpleFreeFieldSOS file with the file containing the original filters.
| Name | Default | Flags | Dimensions | Type | Comment |
|---|---|---|---|---|---|
| GLOBAL:Conventions | SOFA | rm | attribute | ||
| GLOBAL:Version | 1.0 | rm | attribute | ||
| GLOBAL:SOFAConventions | SimpleFreeFieldSOS | rm | attribute | This convention set follows SimpleFreeFieldHRIR but the data is stored as second-order section (SOS) coefficients. | |
| GLOBAL:SOFAConventionsVersion | 1.0 | rm | attribute | ||
| GLOBAL:APIName | rm | attribute | |||
| GLOBAL:APIVersion | rm | attribute | |||
| GLOBAL:ApplicationName | attribute | ||||
| GLOBAL:ApplicationVersion | attribute | ||||
| GLOBAL:AuthorContact | m | attribute | |||
| GLOBAL:Comment | attribute | ||||
| GLOBAL:DataType | SOS | rm | attribute | Filters described as second-order section (SOS) coefficients | |
| GLOBAL:History | attribute | ||||
| GLOBAL:License | No license provided, ask the author for permission | m | attribute | ||
| GLOBAL:Organization | m | attribute | |||
| GLOBAL:References | attribute | ||||
| GLOBAL:RoomType | free field | m | attribute | ||
| GLOBAL:Origin | attribute | ||||
| GLOBAL:DateCreated | m | attribute | |||
| GLOBAL:DateModified | m | attribute | |||
| GLOBAL:Title | m | attribute | |||
| ListenerPosition | [0 0 0] | m | IC, MC | double | |
| ListenerPosition:Type | cartesian | m | attribute | ||
| ListenerPosition:Units | metre | m | attribute | ||
| ReceiverPosition | [0 0.09 0; 0 -0.09 0] | m | rCI, rCM | double | |
| ReceiverPosition:Type | cartesian | m | attribute | ||
| ReceiverPosition:Units | metre | m | attribute | ||
| SourcePosition | [0 0 1] | m | IC, MC | double | Source position is assumed to vary for different directions/positions around the listener |
| SourcePosition:Type | spherical | m | attribute | ||
| SourcePosition:Units | degree, degree, metre | m | attribute | ||
| EmitterPosition | [0 0 0] | m | eCI, eCM | double | |
| EmitterPosition:Type | cartesian | m | attribute | ||
| EmitterPosition:Units | metre | m | attribute | ||
| GLOBAL:DatabaseName | m | attribute | name of the database to which these data belong | ||
| GLOBAL:ListenerShortName | m | attribute | ID of the subject from the database | ||
| ListenerUp | [0 0 1] | m | IC, MC | double | |
| ListenerView | [1 0 0] | m | IC, MC | double | |
| ListenerView:Type | cartesian | m | attribute | ||
| ListenerView:Units | metre | m | attribute | ||
| Data.SOS | permute([0 0 0 1 0 0; 0 0 0 1 0 0], [3 1 2]); | m | mRn | double | Filter coefficients as SOS coefficients. |
| Data.SamplingRate | 48000 | m | I | double | Sampling rate of the coefficients in Data.SOS and the delay in Data.Delay |
| Data.SamplingRate:Units | hertz | m | attribute | ||
| Data.Delay | [0 0] | m | IR, MR | double | Broadband delay (in samples resulting from SamplingRate) |