- 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 frequency domain transform
F/D/T transforms the time domain array data into spectral frequency domain data using the Fast Fourier Transform (FFT). As a default setting the full length impulse responses are tranformed with a Blocksize `NNFT=2^(nextpow2(lengthofimpulseresponses))`. The blocksize can be rised by using FFToversize which is a multiplier of NFFT (Default = 2). A limited time section can be picked out by defining `firstSample` and `lastSample`. The length of this section is `(lastSample-firstSample)`. This way unnecessary data can be removed or a running window can be realized to obtain time slices and resolve the temporal information within the captured sound field.
To save processing power and calculation time the SOFiA chain works on the half-sided FFT spectrum only (NFFT/2+1). Therefore F/D/T produces half-sided spectrum output signals (fftData). Later the makeIR function automatically reconstructs the double-sided spectrum to compute impulse responses.
ARGUMENTS
Input
Name |
Type |
Purpose |
Default |
timeData |
struct |
Time domain data from sofia_readVSAdata() or sofia_mergeArrayData() |
- |
FFToversize |
int |
Rises the FFT Blocksize |
2 |
firstSample |
int |
Start sample in time domain data |
1 |
lastSample |
int |
End sample in time domain data |
length of timeData.ImpulseResponses |
The structs contain the following fields:
Field |
Type |
Purpose |
.impulseResponses |
float mtx |
Impulse Response Data N:Channels, M:Samples |
.FS |
int |
Sampling Frequency |
.downSample |
int |
Downsampling Factor (from Input) |
.averageAirTemp |
float |
Average air temperature |
.irOverlay |
float vector |
Overlay of all impulse responses (PLOT) |
Output
Name |
Type |
Purpose |
fftData |
complex float mtx |
Frequency domain data for S/T/C |
kr |
float vec |
kr Values (k: waver number, r: radius) |
f |
float vec |
Absolute frequency scale |
FILE(S):
File |
Type |
OS/Matlab |
sofia_fdt.m |
Help header, Fuction |
All OS |
HEADER
/*
[ffftData, kr, f] = sofia_fdtVSA(timeData, FFToversize,...
firstSample, lastSample)
------------------------------------------------------------------------------------
|
fftData |
Frequency domain data ready for the Spatial Fourier Transform (SOFiA S/T/C Core)! To save processing power the SOFiA chain always works on the half-sided FFT spectrum only (NFFT/2+1) |
kr
|
kr-Values of the delivered data (required e.g. for the modal radial filters SOFiA M/F)
|
f
|
Absolute frequency scale. Not really required but good for control purposes or scaling a spectrum plot.
|
------------------------------------------------------------------------------------ |
timeData |
Struct with minimum fields
* . impulseResponses [Channel X Samples] |
FFTOversize
|
FFToversize rises the FFT Blocksize. [default = 2]
A FFT of the blocksize (FFToversize*NFFT) is applied
to the time domain data; where NFFT is determinded
as the next power of two of the signalSize which is
signalSize = (lastSample-firstSample).
The function will pick a window of
(lastSample-firstSample) for the FFT:
|
firstSample lastSample
|
First time domain sample to be included.
Last time domain sample to be included.
If firstSample and lastSample are not defined
the full IR will be transformed:
[default: firstSample = 1;
lastSample = size(timeData.impulseResponses, 2);]
|
Call this function with a running window (firstSample->lastSample+td)
increasing td to obtain time slices. This way you resolve the
temporal information within the captured sound field
|
*/ |
|
|