Methods & measurements

Measured convolution ladder: 16K to 4M filter taps.

Methods and measurements supporting Do FFTs destroy transients? No.

Every point is an actual measurement. The FFT is twice the filter length: 32K to 8M FFT points. K = 1,024; M = 1,048,576.

Nine filter sizes, three precisions, two signals and two overlap methods give 108 cases. MATLAB uses 53 significant bits; Advanpix uses 113 and 256 significant bits with zero guard digits.

Each size uses the same filter design (DC-normalized Hann-windowed sinc, cutoff 0.13 cycles/sample), stored Q1.31 coefficients, Q1.23 inputs, white-noise seed 741, and the same rule for positioning the transient sequence around block boundaries. The filter and signal lengths grow with the test. Each input spans two hops; all 3 × taps + 1 output samples, including the tail, are checked.

Peak error in bits.

Peak error means the largest absolute sample difference divided by the exact reference signal peak. Equivalent bits lost = p + 20 log10(error ratio) / 6.020599913. These are numerical error ratios, not converter ENOB or a guaranteed worst-case bound.

The summary tables show the larger observed peak error from overlap-add and overlap-save at each size. The full tables below list both methods separately.

White noise.

Filter taps FFT points IEEE64 IEEE128 256-bit mantissa
16K 32K 2.519 2.519 2.256
32K 64K 2.518 2.741 2.255
64K 128K 2.426 2.649 2.163
128K 256K 2.650 2.843 2.235
256K 512K 2.606 2.799 2.606
512K 1M 2.781 2.951 3.103
1M 2M 2.705 2.875 3.027
2M 4M 2.704 3.026 3.026
4M 8M 2.665 3.058 3.125

Transient sequence.

Filter taps FFT points IEEE64 IEEE128 256-bit mantissa
16K 32K 0.594 1.594 0.594
32K 64K 0.594 1.294 0.594
64K 128K 1.594 1.594 1.178
128K 256K 0.594 1.763 -0.247
256K 512K 1.178 1.294 1.594
512K 1M 0.594 2.237 2.594
1M 2M 0.594 1.594 2.178
2M 4M 0.594 1.915 2.294
4M 8M 0.594 1.594 2.348

What the intermediate measurements show.

For 256-bit white-noise convolution, RMS error rises by 3.02 dB with overlap-add and 3.02 dB with overlap-save between 256K and 512K taps. The growth is not described by a single smooth logarithmic curve over this range. This experiment does not isolate the cause: FFT size, stored filter and signal length change together.

The largest observed peak-relative loss anywhere in this ladder is 3.125 bits. Peak errors can stay unchanged or decrease at the next size; they are maxima of particular output sequences, not a monotonic error bound. These results apply to the specified stored filter and signals.

Measured RMS and peak error growth at every doubling, with both overlap methods.

The vertical axes show bits lost from each arithmetic type's own working precision. Equal heights therefore do not mean equal absolute errors. A negative loss means the measured error ratio is below 2^-p for that particular case; floating-point precision is not an absolute error floor, and this does not mean the arithmetic acquired extra working bits. Lines connect measured sizes and do not imply measurements between them.

Full measured values.

RMS/RMS uses error RMS divided by reference RMS. Peak/peak uses maximum absolute error divided by reference peak. Peak/RMS uses maximum absolute error divided by reference RMS. These normalizations must not be interchanged, particularly for a sparse transient sequence.

IEEE64 / 53 significant bits.

Taps Signal Method Peak absolute error Peak/peak dB Peak/RMS dB RMS/RMS dB
16K noise Overlap-add 2.775558e-16 -305.510 -292.639 -306.747
16K noise Overlap-save 3.330669e-16 -303.926 -291.055 -306.835
16K transient Overlap-add 5.551115e-17 -315.518 -280.135 -309.618
16K transient Overlap-save 5.551115e-17 -315.518 -280.135 -309.653
32K noise Overlap-add 3.330669e-16 -303.930 -291.095 -306.148
32K noise Overlap-save 3.330669e-16 -303.930 -291.095 -306.183
32K transient Overlap-add 5.551115e-17 -315.518 -277.125 -308.633
32K transient Overlap-save 5.551115e-17 -315.518 -277.125 -308.342
64K noise Overlap-add 2.844947e-16 -305.852 -292.467 -306.118
64K noise Overlap-save 3.330669e-16 -304.483 -291.098 -306.144
64K transient Overlap-add 4.163336e-17 -318.017 -276.614 -308.975
64K transient Overlap-save 1.110223e-16 -309.498 -268.094 -308.429
128K noise Overlap-add 3.885781e-16 -303.138 -289.780 -305.665
128K noise Overlap-save 3.330669e-16 -304.477 -291.119 -305.673
128K transient Overlap-add 5.551115e-17 -315.518 -271.105 -308.508
128K transient Overlap-save 5.551115e-17 -315.518 -271.105 -308.489
256K noise Overlap-add 3.885781e-16 -303.399 -289.790 -305.466
256K noise Overlap-save 3.885781e-16 -303.399 -289.790 -305.467
256K transient Overlap-add 5.551115e-17 -315.518 -268.095 -308.092
256K transient Overlap-save 8.326673e-17 -311.997 -264.573 -308.068
512K noise Overlap-add 4.440892e-16 -302.346 -288.634 -305.039
512K noise Overlap-save 3.885781e-16 -303.505 -289.794 -305.057
512K transient Overlap-add 5.551115e-17 -315.518 -265.084 -308.140
512K transient Overlap-save 5.551115e-17 -315.518 -265.084 -307.819
1.0M noise Overlap-add 3.920475e-16 -303.890 -289.719 -304.849
1.0M noise Overlap-save 4.440892e-16 -302.808 -288.637 -304.876
1.0M transient Overlap-add 5.551115e-17 -315.518 -262.074 -307.634
1.0M transient Overlap-save 5.551115e-17 -315.518 -262.074 -307.587
2.0M noise Overlap-add 4.440892e-16 -302.809 -288.647 -304.622
2.0M noise Overlap-save 4.440892e-16 -302.809 -288.647 -304.633
2.0M transient Overlap-add 5.551115e-17 -315.518 -259.064 -307.378
2.0M transient Overlap-save 5.551115e-17 -315.518 -259.064 -307.091
4.0M noise Overlap-add 4.440892e-16 -303.044 -288.646 -304.346
4.0M noise Overlap-save 4.440892e-16 -303.044 -288.646 -304.361
4.0M transient Overlap-add 5.551115e-17 -315.518 -256.053 -307.430
4.0M transient Overlap-save 5.551115e-17 -315.518 -256.053 -307.063

Advanpix IEEE128 / 113 significant bits.

Taps Signal Method Peak absolute error Peak/peak dB Peak/RMS dB RMS/RMS dB
16K noise Overlap-add 2.888895e-34 -665.162 -652.291 -666.648
16K noise Overlap-save 2.888895e-34 -665.162 -652.291 -666.655
16K transient Overlap-add 4.814825e-35 -676.754 -641.371 -669.347
16K transient Overlap-save 9.629650e-35 -670.734 -635.351 -669.011
32K noise Overlap-add 2.888895e-34 -665.166 -652.331 -666.076
32K noise Overlap-save 3.370377e-34 -663.827 -650.992 -666.052
32K transient Overlap-add 4.814825e-35 -676.754 -638.361 -669.253
32K transient Overlap-save 7.824090e-35 -672.537 -634.144 -668.636
64K noise Overlap-add 3.370377e-34 -664.380 -650.995 -665.752
64K noise Overlap-save 3.370377e-34 -664.380 -650.995 -665.743
64K transient Overlap-add 4.814825e-35 -676.754 -635.351 -668.737
64K transient Overlap-save 9.629650e-35 -670.734 -629.330 -668.029
128K noise Overlap-add 3.851860e-34 -663.214 -649.856 -665.278
128K noise Overlap-save 3.851860e-34 -663.214 -649.856 -665.293
128K transient Overlap-add 9.629650e-35 -670.734 -626.320 -668.326
128K transient Overlap-save 1.083336e-34 -669.711 -625.297 -667.967
256K noise Overlap-add 3.851860e-34 -663.475 -649.866 -665.197
256K noise Overlap-save 3.851860e-34 -663.475 -649.866 -665.198
256K transient Overlap-add 7.824090e-35 -672.537 -625.113 -668.343
256K transient Overlap-save 7.222237e-35 -673.233 -625.809 -667.920
512K noise Overlap-add 4.333342e-34 -662.559 -648.847 -664.648
512K noise Overlap-save 3.851860e-34 -663.582 -649.870 -664.668
512K transient Overlap-add 7.222237e-35 -673.233 -622.798 -667.947
512K transient Overlap-save 1.504633e-34 -666.857 -616.423 -666.923
1.0M noise Overlap-add 4.333342e-34 -663.021 -648.850 -664.457
1.0M noise Overlap-save 4.092601e-34 -663.517 -649.346 -664.478
1.0M transient Overlap-add 7.222237e-35 -673.233 -619.788 -667.677
1.0M transient Overlap-save 9.629650e-35 -670.734 -617.289 -667.180
2.0M noise Overlap-add 4.814825e-34 -662.107 -647.945 -663.900
2.0M noise Overlap-save 4.814825e-34 -662.107 -647.945 -663.916
2.0M transient Overlap-add 1.083336e-34 -669.711 -613.256 -667.250
2.0M transient Overlap-save 1.203706e-34 -668.796 -612.341 -666.457
4.0M noise Overlap-add 4.814825e-34 -662.342 -647.943 -663.884
4.0M noise Overlap-save 5.055566e-34 -661.918 -647.520 -663.894
4.0M transient Overlap-add 9.629650e-35 -670.734 -611.269 -667.182
4.0M transient Overlap-save 9.629650e-35 -670.734 -611.269 -666.667

Advanpix / 256-bit mantissa.

Taps Signal Method Peak absolute error Peak/peak dB Peak/RMS dB RMS/RMS dB
16K noise Overlap-add 1.916150e-77 -1528.728 -1515.857 -1530.301
16K noise Overlap-save 2.159042e-77 -1527.691 -1514.821 -1530.336
16K transient Overlap-add 4.147564e-78 -1538.050 -1502.667 -1532.810
16K transient Overlap-save 4.318084e-78 -1537.700 -1502.317 -1533.156
32K noise Overlap-add 1.997114e-77 -1528.373 -1515.538 -1529.962
32K noise Overlap-save 2.159042e-77 -1527.696 -1514.860 -1529.999
32K transient Overlap-add 2.159042e-78 -1543.721 -1505.328 -1532.512
32K transient Overlap-save 4.318084e-78 -1537.700 -1499.307 -1532.686
64K noise Overlap-add 2.159042e-77 -1528.249 -1514.863 -1529.542
64K noise Overlap-save 2.159042e-77 -1528.249 -1514.863 -1529.548
64K transient Overlap-add 5.516834e-78 -1535.572 -1494.169 -1532.094
64K transient Overlap-save 6.477126e-78 -1534.178 -1492.775 -1531.844
128K noise Overlap-add 2.159042e-77 -1528.242 -1514.885 -1529.425
128K noise Overlap-save 2.266994e-77 -1527.818 -1514.461 -1529.457
128K transient Overlap-add 2.410927e-78 -1542.762 -1498.349 -1532.079
128K transient Overlap-save 2.159042e-78 -1543.721 -1499.307 -1532.263
256K noise Overlap-add 3.022659e-77 -1525.581 -1511.972 -1527.505
256K noise Overlap-save 3.022659e-77 -1525.581 -1511.972 -1527.526
256K transient Overlap-add 4.318084e-78 -1537.700 -1490.276 -1530.107
256K transient Overlap-save 8.636169e-78 -1531.680 -1484.256 -1529.533
512K noise Overlap-add 4.318084e-77 -1522.589 -1508.877 -1524.486
512K noise Overlap-save 3.886276e-77 -1523.504 -1509.793 -1524.506
512K transient Overlap-add 1.079521e-77 -1529.741 -1479.307 -1527.890
512K transient Overlap-save 1.727234e-77 -1525.659 -1475.225 -1526.343
1.0M noise Overlap-add 4.318084e-77 -1523.051 -1508.880 -1524.510
1.0M noise Overlap-save 4.318084e-77 -1523.051 -1508.880 -1524.522
1.0M transient Overlap-add 1.079521e-77 -1529.741 -1476.297 -1527.892
1.0M transient Overlap-save 1.295425e-77 -1528.158 -1474.713 -1526.793
2.0M noise Overlap-add 4.318084e-77 -1523.053 -1508.890 -1524.212
2.0M noise Overlap-save 4.318084e-77 -1523.053 -1508.890 -1524.213
2.0M transient Overlap-add 9.715690e-78 -1530.657 -1474.202 -1527.736
2.0M transient Overlap-save 1.403377e-77 -1527.463 -1471.008 -1526.616
4.0M noise Overlap-add 4.749893e-77 -1522.460 -1508.061 -1523.996
4.0M noise Overlap-save 4.749893e-77 -1522.460 -1508.061 -1524.002
4.0M transient Overlap-add 1.079521e-77 -1529.741 -1470.276 -1527.295
4.0M transient Overlap-save 1.457353e-77 -1527.135 -1467.670 -1526.537

Reference and validation.

The reference uses exact integer polynomial convolution. Carry-free packing and signed-64-bit uniqueness bounds preserve every coefficient. Selected boundary and random samples are checked with exact integer dot products; the complete transient reference also agrees with a separate sparse direct integer convolution. Filter coefficients generated at 113 and 256 significant bits agree after Q1.31 quantization at every size.

Each output difference is calculated after promoting the computed output and exact integer reference to 665-bit precision. Overlap-add sums remain at the tested precision. Overlap-save checks retained samples and the final tail. Output counts and error metrics are checked for every case.

The test environment is MATLAB R2020b Update 2 and Advanpix 5.1.0.15432, with eight configured Advanpix threads.

See the actual 4M endpoint report for measured endpoint details and reference validation.

The same filter design, stored-value precision and signal construction are used across all nine lengths, allowing the tables to show how the measured error changes with filter size.

← Back to the article

What are you looking for?