------------------
* More reasonable handling of FFT normalizations in `arithmetic operations <https://pyfar.readthedocs.io/en/latest/concepts/pyfar.arithmetic_operations.html>`_. This is a major change and might break backwards compatibility in some cases (although this is unlikely to happen, PR #253, 245, 235).
* The documentation now contains `concepts <https://pyfar.readthedocs.io/en/latest/concepts.html>`_ behind pyfar in a separate section. This makes the concepts easier to find and understand and the documentation of the classes and functions cleaner (PR #251, 243).
* `pyfar.dsp`
* Added `convolve` for convolution of signals in the time and frequency domain (PR 232)
* Added `deconvolve` for frequency domain deconvolution with the optional regularization (PR 212)
* functions in the `filter` module have more verbose names, e.g., 'butterworth' instead of 'butter'. Functions with old names will be deprecated in pyfar 0.5.0 (PR 248).
* `time_window` can now return the window to make it easier to inspect windows and apply windows multiple times (PR 247)
* the dB parameters in `spectrogram` obsolete. They were thus removed and can be controlled in the plot function `pyfar.plot.spectrogram` instead (PR 258, 256).
* `pyfar.io`
* `pyfar.io.read` and `pyfar.io.write` can now handle Python built in data types (PR 205)
* added `read_audio` and `write_audio` to support more types of audio files (based on the `soundfile` package). The old functions `read_wav` and `write_wav` will be deprecated in pyfar 0.5.0 (PR 234)
* `read_sofa` can now also load SOFA files of DataType 'TransferFunction' (e.g. GeneralTF) and uses the `sofar <https://sofar.readthedocs.io>`_ package (PR #254, 240).
* `pyfar.plot`
* Plots of the magnitude spectrum now use ``10`` as the new default `log_prefix` for calculating the level in dB for plotting Signals with the FFT normalizations ``'psd'`` and ``'power'`` (PR 260)
* Improved handling of colorbar in `pyfar.plot.spectrogram`. A speparate axis for the colorbar can be passed to the function. The function can return the axis of the colorbar. (PR 216)
* `custom_subplot` now returns axis handles (PR 237)
* Frequency plots allow to show negative frequencies (PR 233)
* Filter classes (`pyfar.FilterFIR`, `pyfar.FilterIIR`, `pyfar.FilterSOS`)
* Rename the property `shape` to `n_channels`. pyfar Filter objects do not support multi-dimensional layouts (PR 102)
* Filter states can now be saved to allow block-wise processing (PR 102)
* The `coefficients` can now be set. This allows to mimic time variant systems in block-wise processing (PR 252)
* Improved documentation (PR 252)
* Audio classes (`pyfar.Signal`, `pyfar.TimeData`, `pyfar.FrequencyData`)
* Make arithmetic operations available as `pyfar.add`, `pyfar.subtract`, etc. (PR 230)
* Remove fft normalizations from FrequencyData (PR 225)
* `pyfar.Coordinates` and `pyfar.Orientations`
* Renamed methods `pyfar.Coordinates.get_nearest_*` to `pyfar.Coordinates.find_nearest_*`. Old methods will be deprecated in pyfar 0.5.0 (PR 209)
* The plots generated by `Coordinates.show` and `Orientations.show` now use the pyfar plot style (PR 169)
* `pyfar.signals`
* renamed `pyfar.signals.linear_sweep` to `pyfar.signals.linear_sweep_time` and `pyfar.signals.exponential_sweep` to `pyfar.signals.exponential_sweep_time`. Old functions will be deprecated in pyfar 0.5.0 (PR 201)
* CI: Only test wheels to save time during testing (PR 236)
* Enhanced contributing guidelines (PR 239)