- Update
README.mdwith release tags - Update or add function header link to license after renaming
masterintomainbranch - Update
ambisonic-encodingsubmodule to latest version - Update eMagLS functions to remove comment that diffuseness constraint used to cause slight magnitude deviations at low frequencies (this was fixed by setting the DC bin)
- Update function header documentation and year
- Add
resources/Acappella_Eigenmike_Raw_32ch_short.wavagain to not download a large ZIP file when executing the example for the first time - Update
testEMagLs.mto remove theapplyDiffusenessConstparameter
(therefore the default value "false" of the rendering filter functions will be used) - Update functions to use the default value "false" for the
applyDiffusenessConstparameter - Update
testEMagLs.mto remove theshFunctionandshDefinitionparameters
(therefore the default values "@getSH" and "real" of the rendering filter functions will be used) - Fix
getEMagLs2Filters.mto parse the number of optional function parameters correctly - Fix
getCH.mto add missing functionch_stackOrder()(was accidentally removed before) - Update
getRadialFilter.mto set the Nyquist bin for even-length filters after calculation - Update eMagLS functions with error message when applying the diffuseness constraint with "complex" SH conventions (this is not implemented yet)
- Update
testEMagLs.mto not perform validation of the rendering filters against the reference by default - Update eMagLS functions documentation when manually setting the DC bin after calculation
- Update eMagLS functions to manually set the DC bin after calculation
(therefore the reference for the rendering filters are updated for verification) - Update
testEMagLs.mto download the MIRO class if it is not available for loading the default HRIR data set - Update
testEMagLs.mdocumentation - Fix missing
Spherical-Harmonic-Transformgit submodule - Update header documentation in filter functions
- Add
CHANGELOG.mdwith changelog moved fromREADME.md - Update
README.mdwith references to the EMA publication - Add
ambisonic-encodingas git submodule (required forget_sound_field_sh_coeffs_from_ema_t()ingetEMagLsFiltersEMAinSH.m) - Update header documentation of all functions
- Remove outdated functions that were used only in preliminary implementations of EMA rendering filters
- Update
applyRadialFilter.mto perform causalization and fading analogous to other filtering functions - Resolve merge conflicts to main branch
- Update
getMagLsFilters.mto improve computation speed by matricizing all operations for both ears
(something similar should also be implemented for the other functions in the future)
(this causes the resulting rendering filters with diffuseness constraint to be different at high frequencies in a non-meaningful way)
(therefore the reference for the rendering filters with diffuseness constraint are updated for verification) - Remove outdated functions with preliminary implementations of EMA rendering filters
- Update eMagLS functions with comment that diffuseness constraint causes slight magnitude deviations at low frequencies
- Fix EMA functions to implement the diffuseness constraint
- Update SMA functions to improve syntax for diffuseness constraint (the resulting filters are identical)
- Add reference rendering filters with diffuseness constraint for verification
- Update
testEMagLs.mto yield reference names including the status of the diffuseness constraint
(rename the respective reference rendering filter files) - Fix
getEMagLs2Filters.mwhen applying the diffuseness constraint
- Update functions to use a transition frequency of at least 1 kHz (this makes a difference only for SH order 1)
- Update
getEMagLsFiltersEMAinSH.mto improve computation speed by performing all sound field rotations in one operation - Fix
getEMagLsFiltersEMAinSH.mvertical rotation direction (it was inverted before) - Update
getSMAIRMatrix.mto work for higher requested array orders than estimated simulation order - Update functions to improve computation speed by pre-allocating complex matrices when needed
- Update
getEMagLsFiltersEMAinSH.mto use existing EMA function from the Ambisonic Encoding toolbox - Update
getMagLsSphericalHeadFilter.mandgetMagLsArrayDiffuseFilter.mto remove amplitude normalization and yield no magnitude changes at low frequencies
- Add
getEMagLsFiltersEMAinSH.mto provide the implementation of EMA rendering filters in spherical harmonics - Update functions to calculate the HRIR group delay in a simpler way without meaningful changes in the result
(this causes the resulting MagLS, eMagLS and eMagLS2 rendering filters to be different in a non-meaningful way at very high frequencies)
(therefore the reference for MagLS, eMagLS and eMagLS2 rendering filters are updated for verification) - Add functions
getMagLsSphericalHeadFilter.mandgetMagLsArrayDiffuseFilter.mto provide direction-independent array equalization filters that can be useful in combination with MagLS - Update
getEMagLsFiltersEMAinCH.m,getEMagLsFiltersEMAinCHtoSH.mandgetEMagLsFiltersEMAinEHtoSH.mto improve computation speed
(extract feasible matrix multiplications to be pre-computed before the loop) - Update
getEMagLsFiltersEMAinCHtoSH.mandgetEMagLsFiltersEMAinEHtoSH.mto extract helper functions
(add the respectivech_fromShIds.mandeh_fromShIds.mfunctions) - Fix
getEMagLsFiltersEMAinEHtoSH.mto reflect switch from "soundfieldsynthesis" scripts to updated "Ambisonic Encoding" toolbox - Fix functions to calculate the filters at the specified oversampled length
(now the oversampling actually uses double the specified length up to a maximum of 2048 samples)
(this causes all the resulting rendering filters to be different at high frequencies in a non-meaningful way)
(therefore the reference for all the rendering filters are updated for verification)
- Add
getEMagLsFiltersEMAinCH.mandgetEMagLsFiltersEMAinCHtoSH.mwith different preliminary implementations of EMA rendering filters - Rename
getEMagLsFiltersEMA.minto ``getEMagLsFiltersEMAinEHtoSH.m` to reflect its function - Fix
getEMagLsFiltersEMA.mparsing of default CH basis function handle - Update
getEMagLsFiltersEMA.mSVD regularization parameter to yield more sensible rendering filters that
(better behaviour in time domain at the cost of small deviations in magnitude response) - Update
getEMagLsFiltersEMA.mto temporarily use only horizontal HRIRs for magnitude optimization
(spherical HRIR data will be SH sub-sampled to a horizontal grid) - Update functions to simplify syntax of singular value decomposition
- Update functions to extract generation of time domain window for resulting rendering filters
(add the respectivegetFadeWindow.mfunction)
- Update
getEMagLsFiltersEMA.mto remove unused array grid zenith coordinates
(add non-functioning example call totestEMagLs.m) - Add
getEMagLsFiltersEMA.mto generate eMagLS rendering filters for equatorial microphone arrays (EMA)
(add the respectivegetCH.mandch_stackOrder.mfunctions)
(this is does not have an example configuration intestEMagLs.myet)
(the rendering filters for "complex" SH basis types do not function as intended yet)
(the implementation of the diffuseness constraint has not been verified yet) - Add reference rendering filters for "complex" SH convention for verification
- Update
getMagLsFilters.m,getEMagLsFilters.mandgetEMagLs2Filters.mto use delays with subsample precision and restore original inter-aural group delay difference after magnitude least-squares optimization
(add the respectiveapplySubsampleDelay.mfunction)
(this causes the resulting MagLS, eMagLS and eMagLS2 rendering filters to be different in a non-meaningful way at very high frequencies)
(therefore the reference for MagLS, eMagLS and eMagLS2 rendering filters are updated for verification)
- Update
getSMAIRMatrix.mto determine the simulation order based on the configuration aliasing frequency
(this causes the resulting eMagLS and eMagLS2 rendering filters to be different in a non-meaningful way at very high frequencies)
(therefore the reference for eMagLS and eMagLS2 rendering filters are updated for verification) - Update
getMagLsFilters.m,getEMagLsFilters.mandgetEMagLs2Filters.mto use a transition frequency of 500 Hz times SH order instead of always 2000 Hz
(changes the signature ofgetEMagLs2Filters.mto require the desired SH order)
(yields no changes for the example Eigenmike configuration) - Update
testEMagLs.mto export binaural renderings as WAV with 64bit resolution - Update functions to work for "complex" SH conventions by computing double-sided spectra
(required ingetMagLsFilters.mandgetEMagLsFilters.mbut not ingetEMagLs2Filters.m) - Update
testEMagLs.mto alternatively evaluate spectral difference in verification of rendering filters against provided reference - Update functions to compute 0 Hz bin not separately
(this causes the resulting eMagLS and eMagLS2 rendering filters to be different)
(therefore the reference for eMagLS and eMagLS2 rendering filters are updated for verification) - Update
testEMagLs.mto verify the SH convention "wikipedia" against the "real" reference
- Update
binauralDecode.mto warn when rendering discards imaginary signal parts (may occur for "complex" SH basis functions) - Update
testEMagLs.mto use a different SH basis implementation more easily - Update
getRadialFilter.mandgetSMAIRMatrix.mto usesphModalCoeffs()from Array-Response-Simulator
(therefore also remove own implementations of spherical hankel and bessel functions)
(this causes the resulting eMagLS and eMagLS2 rendering filters to be slightly different at 0 Hz and the Nyquist bin)
(therefore the reference for eMagLS and eMagLS2 rendering filters are updated for verification) - Update
getSMAIRMatrix.mto streamline conjugate and transpose operations - Update
getEMagLs2Filters.mto streamline conjugate and transpose operations (results in neglectable maximum normalized absolute difference of 1e-14) - Update
getEMagLsFilters.mto streamline conjugate and transpose operations (results in neglectable maximum normalized absolute difference of 1e-15) - Update
getLsFilters.mto streamline conjugate and transpose operations (results in neglectable maximum normalized absolute difference of 1e-16) - Update
getMagLsFilters.mto streamline conjugate and transpose operations (results in neglectable maximum normalized absolute difference of 1e-15) - Update
testEMagLs.mto accept tolerance when verifying rendering filters against the provided reference - Update functions to use
ifft()without the forced symmetric parameter (fix to yield "real" or "complex" filters depending on the basis type) - Update
getEMagLsFilters.mandgetEMagLs2Filters.mto slightly improve computation time
- Update functions to support "complex" SH conventions
- Update
testEMagLs.mto be verbose about audio playback of rendering results - Update
README.mdwith information on initializing git submodules
- Update
testEMagLs.mto add used SH basis type in exported file names (update file names of respective reference results) - Update
testEMagLs.mto export audio rendering results as an option - Fix functions to use case-insensitive string comparisons for parameters
- Update functions to provide SH basis implementation function as an optional parameter (see
testEMagLs.mfor a usage example) - Update functions to provide utilized constants at the top
- Update functions to provide SH basis type (according to basis implementation) as an optional parameter
- Update
testEMagLs.mto add verification of rendering filters against the provided reference - Update
testEMagLs.mto add global configuration variables - Update
testEMagLs.mto export reference results for LS, MagLS, eMagLS and eMagLS2 filters (also add the respective reference results) - Update
testEMagLs.mto provide configuration of the MagLS diffuseness constraint - Update
testEMagLs.mto be more verbose (reintroduce length limitation of the rendered SMA recording) - Remove default SMA recording dataset (update
testEMagLs.mto download data on demand) - Remove default HRIR dataset (update
testEMagLs.mt to download data on demand) - Fix all function endings and formatting
- Initial code release