Jawed
1000+ Head-Fier
- Joined
- Dec 7, 2014
- Posts
- 1,143
- Likes
- 597
"Direct convolution" still has an accuracy problem. With computers, the order in which you do multiplies and adds affects the accuracy of the overall result.Convolution filter is another matter because it can correct even more room acoustics problems for me so I always hear an even bigger improvement in frequency response. But the more I listen, the more I notice how the transient response is less accurate when you engage any convolution filter. I suspect the problem is that some convolution filter introduce a minimal phase filtering which alters transient accuracy. But I suspect all convolutions are done via FTT convolution not direct convolution so I wonder if the FTT conversions (even at 64-bit) introduces slight low level errors that are audible. My theory is further supported by a software program that is supposed to mimic M-Scaler where originally it upscales at 64-bit using FFT but recently released the ability to do it at 128 or 192 bits and users report improvements, likely because they get more accurate convolution.
With direct convolution this can be seen when computing from the taps in the same order as when the data arrives. Half of the tap coefficients are in ascending order of size, e.g. the first few coefficients might be (I'm ignoring positive/negative coefficients, by the way):
0.0000000000011234
0.0000000000012345
0.0000000000013456
then the coefficients rise to their highest values:
0.4567
0.5678
then after that, the coefficients fall:
0.4567
0.3456
down to the final coefficients::
0.0000000000013456
0.0000000000012345
0.0000000000011234
So by the time you get to use these coefficients their results are so small that they do not correctly affect the final result of the convolution. This all depends on the precision of the accumulator.
There are two solutions:
- massively increase the precision used by every multiply and add (e.g. 128 bits)
- re-order the convolution to work with the smallest (absolute value) coefficients first, then proceed to the largest