# Version History¶

- 2.5.0 (18. March 2019)
- Add voronoi interpolation for impulse responses
- Fix phase offset of Linkwitz-Riley Allpass Filters
- Add modal window to monochromatic NFC-HOA driving functions
- Update equation links to https://sfs.rtfd.io/en/3.2/

- 2.4.3 (26. October 2018)
- fix bug where in LWFS-SBL, where inverse Allpass was inverted

- 2.4.2 (14. March 2018)
- extend signal_from_spectrum and spectrum_from_signal to N-dim matrices
- remove obsolete *_localwfs functions
- add optional logarithmic spacing for linear secondary sources

- 2.4.1 (28. September 2017)
- add monochromatic implementation of LWFS using spatial bandwidth-limitation
- add monochromatic circular expansion functions for ps and pw
- add function for conversion from circular to plane wave expansion
- add freq_response_* and time_response_* for all LWFS methods
- add optional message arg to progress_bar()
- fix missing conf.N in freq_response_nfchoa()
- fix auralize_ir() for local files

- 2.4.0 (22. August 2017)
- improve references in SFS_config()
- update structure of configuration for LWFS methods
- fix off-center dummy head positions for HRTFs
- add elevation to head orientation for binaural synthesis
- fix sphbesselh_zeros() for high orders
- fix symmetric ifft for Octave
- add inverse Legendre transform
- fix integral weights for spherical secondary sources
- add 3D ps and pw driving functions for NFC-HOA
- add ‘reference_circle’ as new default for focused sources in 2.5D
- add max-rE and tukey modal weighting windows
- add time-domain implementation of LWFS using spatial bandwidth-limitation
- add circular expansion functions
- fix incorporation of tapering weights for LWFS
- remove x0 from interpolate_ir() call
- fix interpolate_ir() for special cases
- switch handling of time from samples to seconds
- add freq_response_line_source()
- add freq_response_point_source()
- add time_response_line_source()

- 2.3.0 (04. March 2017)
- default 2D WFS focused source is now a line sink
- improve point selection and interpolation of impulse responses
- speed up Parks-McClellan resampling method
- change default value of conf.usebandpass to false
- rename conf.wfs.t0 to conf.t0
- rename and improve easyffft() to spectrum_from_signal()
- rename and improve easyifft() to signal_from_spectrum()
- correct amplitude values of WFS and NFC-HOA in time domain
- fix default 2.5D WFS driving function in time domain
- add time_response_point_source()
- update amplitude and position of dirac in dummy_irs()
- fix missing secondary source selection in ssr_brs_wfs()
- add amplitude terms to WFS FIR pre-filter
- fix Gauss-Legendre quadrature weights
- add delay_offset as return value to NFC-HOA and ir funtions
- fix handling of delay_offset in WFS time domain driving functions

- 2.2.1 (22. August 2016)
- fix delayoffset for FIR fractional delay filter
- add findconvexcone()
- simplify convolution()
- add linear interpolation working in the frequency domain
- fix pm option for delayline()

- 2.2.0 (7. July 2016)
- fix impulse response interpolation for three points
- add the ability to apply modal weighting window to NFC-HOA in time domain
- change license to MIT
- update delayline() config settings
- add Lagrange and Thiran filters to delayline()
- replace wavread and warwrite by audioread and savewav
- convolution() excepts now two matrices as input
- allow headphone compensation filter to be a one- or two-channel wav file
- add new online doc at http://matlab.sfstoolbox.org/
- fix greens_function_mono() for plane wave and 3D
- replace conf.ir.useoriglength by conf.ir.hrirpredelay
- update default WFS driving functions
- add links to equations in online theory at https://sfs.rtfd.io/

- 2.1.0 (10. March 2016)
- make conf struct mandatory
- add new start message
- fix handling of 0 in least squares fractional delays
- fix NFC-HOA order for even loudspeaker numbers to N/2-1
- add conf.wfs.hpreFIRorder as new config option (was hard coded to 128 before)
- speed up secondary source selection for WFS
- rename chromajs colormap to yellowred
- fix tapering_window() for non-continuous secondary sources
- remove cubehelix colormap as it is part of Octave
- add conf.wfs.t0 option which is useful, if you have more than one virtual source
- virtual line sources are now available for monochromatic WFS and NFC-HOA
- allow arbritrary orders for time-domain NFC-HOA simulations

- 2.0.0 (26. October 2015)
- add support for SOFA
- add SOFA convention SimpleFreeFieldHRIR
- add SOFA convention MultiSpeakerBRIR
- calculate integration weights (x0(:,7)) of secondary sources based on their distances to their neighbours
- add rounded-box as new loudspeaker array geometry
- fix bugs in local sound field synthesis time domain implementation
- speedup local sound field synthesis processing by fewer calls to delayline()
- add heuristic to find a good local wave field synthesis pre-filter
- loudspeaker geometry can now be read from a SOFA file
- now custom grids can be used during sound field simulations
- add 3D plot routine
- change plot_sound_field(P,x,y,z) to plot_sound_field(P,X,Y,Z)
- normalization of sound field now only happens in plot_sound_field(); this comes with the new config option conf.plot.normalisation
- remove interaural_level_difference() and interaural_time_difference()
- change default config setting conf.ir.usehcomp to false
- lots of small bug fixes

- 1.2.0 (2. June 2015)
- add PDF documentation “Theory of Sound Field Synthesis”
- fix remaining usegnuplot config entry
- change default dB color map to chromajs
- add missing hgls2 functionality (fractional delays)
- add cubehelix and chromajs color maps
- remove noise() function, use the one from the LTFAT Toolbox instead

- 1.1.0 (2. April 2015)
- fix amplitude bug in get_ir() and ir_generic()
- remove direct gnuplot plotting
- add support for local Wave Field Synthesis
- the length of the dirac impulse response is now an option for dummy_irs()
- fix iseven(), isodd() for very large numbers
- correct the sign for Wave Field Synthesis driving functions

- 1.0.1 (4 August 2014)
- rms() works now also with row vectors in order to be compatible with the Auditory Modeling Toolbox
- fixed handling of number of secondary sources for a box shaped array
- fixed a bug in ir_auralize() regarding the contentfile configuration
- corrected NFC-HOA driving functions for off-center arrays

- 1.0.0 (27 March 2014)
- added references for all driving functions
- streamlined nested conf settings; e.g. now it is no longer neccessary to set conf.ir.hcompfile if conf.usehcomp == false
- added WFS driving functions from Völk et al. and Verheijen et al.
- removed secondary_source_number() and xy_grid, because they are no longer needed
- enabled pre-equalization filter of WFS as default in SFS_config_example()
- fixed sound_field_mono_sdm_kx()
- Green’s function for line sources returns now real values
- correct y-direction of plane waves for 3D NFC-HOA
- updated the test functions in the validation folder
- several small fixes

- 1.0.0-beta2 (5 December 2013)
- rms() now works for arbitrary arrays
- speedup of delayline() and HRTF extrapolation
- delayline() now works with more than one channel
- fixed a critical bug in wfs_preequalization()
- fixed missing conf values in several functions
- fixed README
- changed location of sfs-data for automatic download, because github does not allow this
- several minor fixes

- 1.0.0-beta (26 August 2013)
- bandpass() can now handle arbritrary frequency limits
- sphbesselh_zeros() comes now with precomputed zeros for an order up to 1000
- renamed wave_field_* functions to sound_field_*
- the order for NFC-HOA can now be set manually via conf.nfchoa.order
- several performance improvements
- added missing driving functions for WFS and NFC-HOA
- added convolution() which is faster than conv and can handle multidimensional signals
- changed default plotting style of loudspeakers to conf.plot.realloudspeaker=false
- hann_window() now uses (2*n+1) instead of (2*n) to generate the window
- replaced the input parameter L by conf.secondary_sources.size
- the aliasing frequency is now calculated by the mean distance between the given secondary sources
- added nearest neighbour search and 3D interpolation to get_ir()
- moved the tapering window into x0(:,7), added new function secondary_source_tapering to achieve this
- added a seventh column to x0 which includes integrational weights
- added extra directory for SSR renderer functions
- added 3D HRTF extrapolation
- changed array configuration to use number of secondary sources instead of distance between them
- changed SFS_config to use substructs like conf.secondary_sources.*
- added the possibility to calculate the wave field for a arbritrary positioned plane in 3D
- added 3D WFS functions
- make the Toolbox work in 3D, which brakes backwards compability!
- now all monochromatic functions have a time_domain counterpart
- reordered the argouts for the wave field functions; now P is always the first argout
- automatically plotting of the wave fields if no argouts are wanted
- changed direction of focused source from the conf.xref vector directly into xs. For a focused source xs is now [1x6]

- 0.2.5 (12 July 2013)
- fixed a bug causing the wrong loudspeaker position in the output of generic_wfs()

- 0.2.4 (4 June 2013)
- added a documentation to the github README
- reworked the plotting, now simple saving to png is possible
- added a narginchk function for older Matlab versions
- replaced conf.frame with t in the imp functions
- lots of small bugs were fixed

- 0.2.3 (9 April 2013)
- summed up line, point, … sources to green_function for mono and imp
- introduced global wave_field functions for mono and imp
- fixed binaural simulations for NFC-HOA
- removed compatibility for octave versions <3.6
- fixed a critical bug for the HRTF farfield extrapolation, due to the new secondary source selection behavior

- 0.2.2 (27 November 2012)
- added functions to calculate the sound pressure for monochromatic WFS at a single point in analogy to the point_source function
- changed the behavior of secondary_source_selection to returning a new x0 vector
- added compatibility for octave 3.6
- first fix of secondary source selection for focused sources (now they point always in the direction of the reference point)

- 0.2.1 (15 June 2012)
added NFC-HOA 2.5D monochromatic

added NFC-HOA 2.5D binaural simulations

added SDM 2.5D monochromatic

make NFC-HOA work under Octave

fixed direction of plane waves and point sources for NFC-HOA time domain simulations

changed syntax for wave_field_* and driving_* functions:

- xs,f,src => xs,src,f
- xs,L,src => xs,src,L
- xs,L,f,src => xs,src,f,L

- 0.2.0 (25 April 2012)
- first public release (under the GPLv3+ license)