- Download
- Welcome to SOFiA
- Who is behind SOFiA
- Feature overview
- System overview
- Function reference
- readVSAdata
- mergeArrayData
- F/D/T
- gauss
- lebedev
- S/W/G
- S/T/C
- W/G/C
- S/F/E
- M/F
- R/F/I
- P/D/C
- I/T/C
- makeMTX
- makeIR
- visual3D
- Coordinate System
- Application Examples
- Example 1
- Example 2
- Example 3
- Example 4
- Example 5
- Example 6
- Example 7
- Example 8
- Array Datasets
- VariSphear system
- Groups and Mailinglists
- Contact and Support
- How to Reference
|
SOFiA Spatial Transform Core
SOFiA S/T/C is a Spatial Fourier Transform (SFT) core optimized for sound field analysis.
ARGUMENTS
Input
Name |
Type |
Purpose |
Default |
N |
int |
Maximum transform order |
- |
fftData |
complex float mtx |
Frequency domain data e.g. from F/D/T |
- |
grid |
float mtx |
AZ1 EL1 W1 AZ2 EL2 W2 ... AZM ELM WM for M Positions. Refer to Coordinate System |
- |
Output
Name |
Type |
Purpose |
Pnm |
complex float mtx |
Spatial Fourier coefficients |
Definitions
Where Y[n, m] describes the Spherical Harmonics of order n
and modus m. Beta are the grid weights and p the complex sound pressures
FILE(S):
File |
Type |
OS/Matlab |
sofia_stc.m |
Help header |
All OS |
sofia_stc.mexmaci64 |
MEX core |
OS-X Intel |
sofia_stc.mexw32 |
MEX core |
Windows, Matlab32 |
sofia_stc.mexw64 |
MEX core |
Windows, Matlab64 |
sofia_stc.cpp |
C/C++ source |
All OS |
Warnings
If the S/F/T core crashes it might be necessary to typecast fftData to double before calling the extermal:
fftData = cast(fftData, 'double');
Performance
The SOFiA transform corres S/T/C and I/T/C offer a high computation speed and a stable and precise transform at the same time.
Two performance examples of the S/T/C core. The left plot shows the runtime for transform on different FFT blocksizes for a rising number of sensors M at a maximum order N = floor(sqrt(M/2)-1). The FFT blocksize has a linear influence on the runtime. The right plot shows a comparison to the high performance transform algorithm of the Intel Performance Primitives (IPP). The IPP transform is made for computer graphics rendering and not optimized for sound field analysis. The IPP transform can only run up to N=15 and delivers real-valued coefficients that have to be converted to complex ones. The S/T/C core is not order-limited and runs even faster than the IPP transform for sound field analysis.
HEADER
/*
Pnm = sofia_stc(N, fftData, grid)
------------------------------------------------------------------------------------
|
Pnm
|
Spatial Fourier Coefficients
Columns: nm coeff
Rows: FFT bins |
------------------------------------------------------------------------------------ |
N |
Maximum transform order |
fftData
|
Frequency domain soundfield data, e.g. from sofia_fdt()
Columns: number of spatial sampling positions
Rows: FFT bins (complex sound pressure data)
! WARNING cast fftdata to double if core crashes:
fftData = cast(fftData, 'double');
|
grid |
Sample grid (Positions and Weights)
Columns: s=1...S spatial sampling positions
Rows: [AZ_s EL_s GridWeights_s]
AZ in [0...2pi] and EL [0...pi] in RAD |
*/ |
|
The S/F/T core involves Legendre polynomials/spherical harmonics provided by the peer-reviewed
BOOST C++ Math Library under the
BOOST Software License
|