ai.onnx.STFT / build /webgpu /test.json
Xenova's picture
Xenova HF Staff
sync 2e7068faf55e
a0c8d5e verified
Raw
History Blame
35.5 kB
{
"op": "ai.onnx.STFT",
"fixtureArrays": {
"onnx_backend_arange128_cos_window16_input_window": [1, 0.961939766, 0.853553391, 0.691341716, 0.5, 0.308658284, 0.146446609, 0.038060234, 0, 0.038060234, 0.146446609, 0.308658284, 0.5, 0.691341716, 0.853553391, 0.961939766],
"ort_complex_input_batched_twosided_frame_length_input_signal": [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 99, 0, 99, 0, 99, 0, 99, 0, 99, 0, 99, 0, 99, 0, 99, 0]
},
"cases": [
{
"name": "dispatch_cliff_rank3_over_8m_elements",
"attrs": { "onesided": 1 },
"inputs": {
"signal": { "dtype": "float32", "shape": [1, 2200000, 1] },
"window": { "dtype": "float32", "shape": [6], "data": { "kind": "constant", "value": 1.0 } }
},
"outputs": { "output": { "dtype": "float32", "shape": [1, 2199995, 4, 2], "tolerance": 0.001 } },
"args": { "frameStep": 1 }
},
{
"name": "many_frames_fft_twiddle_table_win64",
"provenance": {
"notes": "Exercises the shared twiddle-table FFT selected for thousands of independent transforms without making correctness coverage depend on the much larger dispatch-cliff benchmark allocation."
},
"inputs": {
"signal": { "dtype": "float32", "shape": [1, 4159, 1] },
"window": { "dtype": "float32", "shape": [64] }
},
"outputs": { "output": { "dtype": "float32", "shape": [1, 4096, 33, 2], "tolerance": 0.0001 } },
"args": { "frameStep": 1 }
},
{
"name": "many_frames_fft_twiddle_table_win64_twosided",
"provenance": {
"notes": "Twosided sibling of the twiddle-table selector above. The packed real-FFT kernel that otherwise wins at this transform count requires onesided != 0, so a full-spectrum output is what leaves the shared twiddle-table FFT as the selected route."
},
"attrs": { "onesided": 0 },
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 4159, 1],
"data": { "kind": "fillFloat32", "sinStep": 0.017, "cosStep": 0.029, "scale": 1.0 }
},
"window": {
"dtype": "float32",
"shape": [64],
"data": { "kind": "fillFloat32", "sinStep": 0.007, "cosStep": 0.013, "scale": 0.5, "offset": 0.5 }
}
},
"outputs": {
"output": { "dtype": "float32", "shape": [1, 4096, 64, 2], "tolerance": 0.001, "relTolerance": 0.0001 }
},
"args": { "frameStep": 1 }
},
{
"name": "many_frames_packed_rfft_win512_radix4",
"provenance": {
"notes": "Selector and correctness lock for the packed real N=512 path. The 4097 transforms cross the twiddle-table threshold and leave one partial four-transform workgroup on capable devices."
},
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 4608, 1],
"data": { "kind": "fillFloat32", "sinStep": 0.017, "cosStep": 0.029, "scale": 1.0 }
},
"window": {
"dtype": "float32",
"shape": [512],
"data": { "kind": "fillFloat32", "sinStep": 0.007, "cosStep": 0.013, "scale": 0.5, "offset": 0.5 }
}
},
"outputs": {
"output": { "dtype": "float32", "shape": [1, 4097, 257, 2], "tolerance": 0.01, "relTolerance": 0.0001 }
},
"args": { "frameStep": 1 }
},
{
"name": "real_window_onesided",
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 6, 1],
"data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] }
},
"window": { "dtype": "float32", "shape": [4], "data": { "kind": "values", "values": [0.5, 1.0, 1.0, 0.5] } }
},
"outputs": { "output": { "dtype": "float32", "shape": [1, 2, 3, 2], "tolerance": 0.00002 } },
"args": { "frameStep": 2 }
},
{
"name": "real_subnormal_impulse_window_onesided_gpu_gap",
"skipGpu": {
"category": "permanent",
"reason": "Portable WGSL floating-point semantics do not guarantee preservation of the subnormal values required by this fixture. Backend evidence: Metal FTZ: subnormal 1e-40 impulse flushes to zero on GPU, every one-sided bin reads 0 instead of the subnormal value (tolerance 0)."
},
"provenance": {
"source": "onnxruntime/test/providers/cpu/signal/signal_ops_test.cc",
"test": "SignalOpsTest.STFTFloat",
"notes": "Focused amplitude edge: a one-frame rectangular STFT of a subnormal impulse should preserve that value in every real one-sided bin."
},
"attrs": { "onesided": 1 },
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 4, 1],
"data": { "kind": "values", "values": [1e-40, 0.0, 0.0, 0.0] }
},
"window": { "dtype": "float32", "shape": [4], "data": { "kind": "values", "values": [1.0, 1.0, 1.0, 1.0] } }
},
"outputs": { "output": { "dtype": "float32", "shape": [1, 1, 3, 2], "tolerance": 0 } },
"args": { "frameStep": 1 }
},
{
"name": "complex_twosided",
"attrs": { "onesided": 0 },
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 4, 2],
"data": { "kind": "values", "values": [1.0, 0.0, 2.0, 1.0, 3.0, -1.0, 4.0, 0.0] }
},
"window": { "dtype": "float32", "shape": [2], "data": { "kind": "values", "values": [1.0, 0.5] } }
},
"outputs": { "output": { "dtype": "float32", "shape": [1, 2, 2, 2], "tolerance": 0.00002 } },
"args": { "frameStep": 2 }
},
{
"name": "real_three_frames_window",
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 5, 1],
"data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0] }
},
"window": { "dtype": "float32", "shape": [3], "data": { "kind": "values", "values": [0.25, 1.0, 0.25] } }
},
"outputs": { "output": { "dtype": "float32", "shape": [1, 3, 2, 2], "tolerance": 0.00002 } },
"args": { "frameStep": 1 }
},
{
"name": "ort_scalar_frame_step_windowed",
"provenance": {
"source": "onnxruntime/test/providers/cpu/signal/signal_ops_test.cc",
"test": "SignalOpsTest.STFTFloat",
"notes": "Compact scalar-frame-step projection of ORT's windowed STFT test."
},
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 6, 1],
"data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] }
},
"window": { "dtype": "float32", "shape": [4], "data": { "kind": "values", "values": [1.0, 1.0, 1.0, 1.0] } }
},
"outputs": { "output": { "dtype": "float32", "shape": [1, 2, 3, 2], "tolerance": 0.00002 } },
"args": { "frameStep": 2 }
},
{
"name": "real_twosided_window",
"attrs": { "onesided": 0 },
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 6, 1],
"data": { "kind": "values", "values": [0.0, 1.0, 0.0, -1.0, 0.0, 1.0] }
},
"window": { "dtype": "float32", "shape": [4], "data": { "kind": "values", "values": [1.0, 0.5, 0.5, 1.0] } }
},
"outputs": { "output": { "dtype": "float32", "shape": [1, 2, 4, 2], "tolerance": 0.00002 } },
"args": { "frameStep": 2 }
},
{
"name": "batch2_onesided_stride2_window3",
"inputs": {
"signal": {
"dtype": "float32",
"shape": [2, 5, 1],
"data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, -1.0, 0.0, 1.0, 0.0, -1.0] }
},
"window": { "dtype": "float32", "shape": [3], "data": { "kind": "values", "values": [0.5, 1.0, 0.25] } }
},
"outputs": { "output": { "dtype": "float32", "shape": [2, 2, 2, 2], "tolerance": 0.00002 } },
"args": { "frameStep": 2 }
},
{
"name": "single_frame_full_length_onesided",
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 4, 1],
"data": { "kind": "values", "values": [1.0, 0.0, -1.0, 0.0] }
},
"window": { "dtype": "float32", "shape": [4], "data": { "kind": "constant", "value": 1.0 } }
},
"outputs": { "output": { "dtype": "float32", "shape": [1, 1, 3, 2], "tolerance": 0.00002 } },
"args": { "frameStep": 4 }
},
{
"name": "ort_constant_64_window16",
"provenance": {
"source": "onnxruntime/test/providers/cpu/signal/signal_ops_test.cc",
"test": "SignalOpsTest.STFTFloat"
},
"inputs": {
"signal": { "dtype": "float32", "shape": [1, 64, 1], "data": { "kind": "constant", "value": 1.0 } },
"window": { "dtype": "float32", "shape": [16], "data": { "kind": "constant", "value": 1.0 } }
},
"outputs": {
"output": {
"dtype": "float32",
"shape": [1, 7, 9, 2],
"tolerance": 0.00002,
"data": {
"kind": "values",
"values": [16.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 16.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 16.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 16.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 16.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 16.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 16.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
}
}
},
"args": { "frameStep": 8 }
},
{
"name": "onnx_backend_arange128_cos_window16",
"provenance": { "source": "cmake/external/onnx/onnx/backend/test/data/node/test_stft_with_window" },
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 128, 1],
"data": { "kind": "linspace", "start": 0.0, "end": 127.0 }
},
"window": {
"dtype": "float32",
"shape": [16],
"data": {
"kind": "values",
"values": { "$ref": "#/fixtureArrays/onnx_backend_arange128_cos_window16_input_window" }
}
}
},
"outputs": { "output": { "dtype": "float32", "shape": [1, 15, 9, 2], "tolerance": 0.00025 } },
"args": { "frameStep": 8 }
},
{
"name": "real_batch2_twosided_stride2",
"attrs": { "onesided": 0 },
"inputs": {
"signal": {
"dtype": "float32",
"shape": [2, 5, 1],
"data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, -1.0, 0.0, 1.0, 0.0, -1.0] }
},
"window": { "dtype": "float32", "shape": [3], "data": { "kind": "values", "values": [1.0, 0.5, 0.25] } }
},
"outputs": { "output": { "dtype": "float32", "shape": [2, 2, 3, 2], "tolerance": 0.00002 } },
"args": { "frameStep": 2 }
},
{
"name": "onnx_backend_stft_rectangular_window",
"provenance": {
"source": "cmake/external/onnx/onnx/backend/test/data/node/test_stft",
"notes": "Official rectangular-window fixture: window is omitted and frame_length supplies the DFT size."
},
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 128, 1],
"data": {
"kind": "values",
"values": [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0, 26.0, 27.0, 28.0, 29.0, 30.0, 31.0, 32.0, 33.0, 34.0, 35.0, 36.0, 37.0, 38.0, 39.0, 40.0, 41.0, 42.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0, 50.0, 51.0, 52.0, 53.0, 54.0, 55.0, 56.0, 57.0, 58.0, 59.0, 60.0, 61.0, 62.0, 63.0, 64.0, 65.0, 66.0, 67.0, 68.0, 69.0, 70.0, 71.0, 72.0, 73.0, 74.0, 75.0, 76.0, 77.0, 78.0, 79.0, 80.0, 81.0, 82.0, 83.0, 84.0, 85.0, 86.0, 87.0, 88.0, 89.0, 90.0, 91.0, 92.0, 93.0, 94.0, 95.0, 96.0, 97.0, 98.0, 99.0, 100.0, 101.0, 102.0, 103.0, 104.0, 105.0, 106.0, 107.0, 108.0, 109.0, 110.0, 111.0, 112.0, 113.0, 114.0, 115.0, 116.0, 117.0, 118.0, 119.0, 120.0, 121.0, 122.0, 123.0, 124.0, 125.0, 126.0, 127.0]
}
}
},
"outputs": { "output": { "dtype": "float32", "shape": [1, 15, 9, 2], "tolerance": 0.00025 } },
"args": { "frameStep": 8, "frameLength": 16 }
},
{
"name": "ort_constant_64_window16_twosided",
"provenance": {
"source": "onnxruntime/test/providers/cpu/signal/signal_ops_test.cc",
"test": "SignalOpsTest.STFTFloat",
"notes": "Two-sided projection of ORT's constant-window STFT setup; validates the full spectrum instead of the default one-sided bins."
},
"attrs": { "onesided": 0 },
"inputs": {
"signal": { "dtype": "float32", "shape": [1, 64, 1], "data": { "kind": "constant", "value": 1.0 } },
"window": { "dtype": "float32", "shape": [16], "data": { "kind": "constant", "value": 1.0 } }
},
"outputs": { "output": { "dtype": "float32", "shape": [1, 7, 16, 2], "tolerance": 0.00025 } },
"args": { "frameStep": 8 }
},
{
"name": "ort_frame_length_without_window",
"provenance": {
"source": "onnxruntime/test/providers/cpu/signal/signal_ops_test.cc",
"test": "SignalOpsTest.STFTFloat",
"notes": "Covers the ONNX optional-input form where frame_length is provided and the window input is omitted."
},
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 6, 1],
"data": { "kind": "values", "values": [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] }
}
},
"outputs": {
"output": {
"dtype": "float32",
"shape": [1, 2, 3, 2],
"tolerance": 0.00002,
"data": { "kind": "values", "values": [10.0, 0.0, -2.0, 2.0, -2.0, 0.0, 18.0, 0.0, -2.0, 2.0, -2.0, 0.0] }
}
},
"args": { "frameStep": 2, "frameLength": 4 }
},
{
"name": "ort_complex_input_batched_twosided_frame_length",
"provenance": {
"source": "onnxruntime/test/providers/cpu/signal/signal_ops_test.cc",
"test": "SignalOpsTest.STFTFloatComplexInputBatched",
"notes": "Compact optional-window projection of ORT's batched complex-input STFT regression."
},
"attrs": { "onesided": 0 },
"inputs": {
"signal": {
"dtype": "float32",
"shape": [2, 8, 2],
"data": {
"kind": "values",
"values": { "$ref": "#/fixtureArrays/ort_complex_input_batched_twosided_frame_length_input_signal" }
}
}
},
"outputs": {
"output": {
"dtype": "float32",
"shape": [2, 3, 4, 2],
"tolerance": 0.00002,
"data": {
"kind": "values",
"values": [4.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 396.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 396.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 396.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
}
}
},
"args": { "frameStep": 2, "frameLength": 4 }
},
{
"name": "fft_window256_signal1024_batch2_onesided",
"inputs": {
"signal": {
"dtype": "float32",
"shape": [2, 1024, 1],
"data": { "kind": "fillFloat32", "sinStep": 0.017, "cosStep": 0.029, "scale": 1.0 }
},
"window": {
"dtype": "float32",
"shape": [256],
"data": { "kind": "fillFloat32", "sinStep": 0.013, "cosStep": 0.011, "scale": 0.5, "offset": 0.5 }
}
},
"outputs": {
"output": { "dtype": "float32", "shape": [2, 4, 129, 2], "tolerance": 0.001, "relTolerance": 0.0001 }
},
"args": { "frameStep": 256 }
},
{
"name": "fft_window512_complex_twosided_step256",
"attrs": { "onesided": 0 },
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 2048, 2],
"data": { "kind": "fillFloat32", "sinStep": 0.019, "cosStep": 0.023, "scale": 1.0 }
},
"window": {
"dtype": "float32",
"shape": [512],
"data": { "kind": "fillFloat32", "sinStep": 0.009, "cosStep": 0.007, "scale": 0.5, "offset": 0.5 }
}
},
"outputs": {
"output": { "dtype": "float32", "shape": [1, 7, 512, 2], "tolerance": 0.01, "relTolerance": 0.0001 }
},
"args": { "frameStep": 256 }
},
{
"name": "ort_complex_batched_no_window_frame_length",
"provenance": {
"source": "onnxruntime/test/providers/cpu/signal/signal_ops_test.cc",
"test": "SignalOpsTest.STFTFloatComplexInputBatched",
"notes": "ORT's optional-window path uses frame_length as the rectangular-window length. This case locks the optimized no-window FFT route for batched complex input."
},
"attrs": { "onesided": 0 },
"inputs": {
"signal": {
"dtype": "float32",
"shape": [2, 8, 2],
"data": {
"kind": "values",
"values": { "$ref": "#/fixtureArrays/ort_complex_input_batched_twosided_frame_length_input_signal" }
}
}
},
"outputs": { "output": { "dtype": "float32", "shape": [2, 3, 4, 2], "tolerance": 0.00005 } },
"args": { "frameStep": 2, "frameLength": 4 }
},
{
"name": "ort_complex_batched_frame_offsets_twosided",
"provenance": {
"source": "onnxruntime/test/providers/cpu/signal/signal_ops_test.cc",
"test": "SignalOpsTest.STFTFloatComplexInputBatched",
"notes": "Compact projection of ORT's batched complex-input frame-offset regression."
},
"attrs": { "onesided": 0 },
"inputs": {
"signal": {
"dtype": "float32",
"shape": [2, 8, 2],
"data": {
"kind": "values",
"values": { "$ref": "#/fixtureArrays/ort_complex_input_batched_twosided_frame_length_input_signal" }
}
},
"window": { "dtype": "float32", "shape": [4], "data": { "kind": "constant", "value": 1.0 } }
},
"outputs": { "output": { "dtype": "float32", "shape": [2, 3, 4, 2], "tolerance": 0.00005 } },
"args": { "frameStep": 2 }
},
{
"name": "fft_window512_real_twosided_step256",
"provenance": {
"notes": "Real/full-spectrum coverage for the power-of-two FFT path; complements complex/twosided N=512 and real/onesided N=1024 fixtures."
},
"attrs": { "onesided": 0 },
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 1024, 1],
"data": { "kind": "fillFloat32", "sinStep": 0.017, "cosStep": 0.031, "scale": 1.0 }
},
"window": {
"dtype": "float32",
"shape": [512],
"data": { "kind": "fillFloat32", "sinStep": 0.007, "cosStep": 0.013, "scale": 0.5, "offset": 0.5 }
}
},
"outputs": {
"output": { "dtype": "float32", "shape": [1, 3, 512, 2], "tolerance": 0.01, "relTolerance": 0.0001 }
},
"args": { "frameStep": 256 }
},
{
"name": "fft_window1024_onesided_step512",
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 4096, 1],
"data": { "kind": "fillFloat32", "sinStep": 0.011, "cosStep": 0.027, "scale": 1.0 }
},
"window": {
"dtype": "float32",
"shape": [1024],
"data": { "kind": "fillFloat32", "sinStep": 0.005, "cosStep": 0.003, "scale": 0.5, "offset": 0.5 }
}
},
"outputs": {
"output": { "dtype": "float32", "shape": [1, 7, 513, 2], "tolerance": 0.004, "relTolerance": 0.0001 }
},
"args": { "frameStep": 512 }
},
{
"name": "fft_window4096_radix2_dit_onesided",
"provenance": {
"notes": "Locks the capability-selected 4096-point radix-2 DIT routes: workgroup-resident on devices with 32 KiB of shared storage, and globally staged/storage-backed on lower-limit devices."
},
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 4096, 1],
"data": { "kind": "fillFloat32", "sinStep": 0.011, "cosStep": 0.027, "scale": 1.0 }
},
"window": {
"dtype": "float32",
"shape": [4096],
"data": { "kind": "fillFloat32", "sinStep": 0.005, "cosStep": 0.003, "scale": 0.5, "offset": 0.5 }
}
},
"outputs": {
"output": { "dtype": "float32", "shape": [1, 1, 2049, 2], "tolerance": 0.04, "relTolerance": 0.0002 }
},
"args": { "frameStep": 4096 }
},
{
"name": "fft_window2048_radix2_dit_onesided_min_storage",
"provenance": {
"notes": "The in-place radix-2 rung is selected inside a BAND — rank3WindowInplaceFftFits wants window*16 > maxComputeWorkgroupStorageSize (the two-buffer form does not fit) and window*8 <= it (the in-place one does) — so the band moves with the device and no single window covers every tier. window 4096 is the band at 32768 (the adapter here); 2048 is the band at the 16384 WebGPU guaranteed minimum, which is what the min-limits tier reports. Without this sibling the rung is rendered on every low-storage tier and executed on none of them. Deliberately no requires.limits: outside its band the case is still valid, it just selects the staged rung."
},
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 2048, 1],
"data": { "kind": "fillFloat32", "sinStep": 0.011, "cosStep": 0.027, "scale": 1.0 }
},
"window": {
"dtype": "float32",
"shape": [2048],
"data": { "kind": "fillFloat32", "sinStep": 0.005, "cosStep": 0.003, "scale": 0.5, "offset": 0.5 }
}
},
"outputs": {
"output": { "dtype": "float32", "shape": [1, 1, 1025, 2], "tolerance": 0.04, "relTolerance": 0.0002 }
},
"args": { "frameStep": 2048 }
},
{
"name": "fft_window4096_radix2_dit_complex_twosided",
"provenance": {
"notes": "Exercises the complex load and full-spectrum store arms shared by the capability-selected 4096-point DIT routes."
},
"attrs": { "onesided": 0 },
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 4096, 2],
"data": { "kind": "fillFloat32", "sinStep": 0.011, "cosStep": 0.027, "scale": 0.2 }
},
"window": {
"dtype": "float32",
"shape": [4096],
"data": { "kind": "fillFloat32", "sinStep": 0.005, "cosStep": 0.003, "scale": 0.5, "offset": 0.5 }
}
},
"outputs": {
"output": { "dtype": "float32", "shape": [1, 1, 4096, 2], "tolerance": 0.05, "relTolerance": 0.0003 }
},
"args": { "frameStep": 4096 }
},
{
"name": "empty_zero_dim",
"attrs": { "onesided": 1 },
"inputs": {
"signal": { "dtype": "float32", "shape": [0, 6, 1], "data": { "kind": "values", "values": [] } },
"window": { "dtype": "float32", "shape": [4], "data": { "kind": "values", "values": [0.5, 1.0, 1.0, 0.5] } }
},
"outputs": { "output": { "dtype": "float32", "shape": [0, 2, 3, 2], "tolerance": 0 } },
"args": { "frameStep": 2 }
},
{
"name": "mixed_stockham_n400_real_onesided_tail25",
"provenance": {
"notes": "Real onesided 400-point mixed-radix path: 16-point shared Stockham transforms over 25 residue classes, followed by the direct radix-25 tail."
},
"attrs": { "onesided": 1 },
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 880, 1],
"data": { "kind": "fillFloat32", "sinStep": 0.021, "cosStep": 0.013, "scale": 1.0 }
},
"window": {
"dtype": "float32",
"shape": [400],
"data": { "kind": "fillFloat32", "sinStep": 0.0079, "cosStep": 0.0079, "scale": 0.5 }
}
},
"outputs": { "output": { "dtype": "float32", "shape": [1, 4, 201, 2], "tolerance": 0.01, "relTolerance": 0.001 } },
"args": { "frameStep": 160 }
},
{
"name": "mixed_stockham_n288_real_onesided_tail9",
"provenance": {
"notes": "Generic mixed-radix recurrence with a 32-point shared Stockham factor and radix-9 tail."
},
"attrs": { "onesided": 1 },
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 432, 1],
"data": { "kind": "fillFloat32", "sinStep": 0.023, "cosStep": 0.017, "scale": 0.7 }
},
"window": {
"dtype": "float32",
"shape": [288],
"data": { "kind": "fillFloat32", "sinStep": 0.011, "cosStep": 0.007, "scale": 0.5, "offset": 0.5 }
}
},
"outputs": { "output": { "dtype": "float32", "shape": [1, 2, 145, 2], "tolerance": 0.02, "relTolerance": 0.001 } },
"args": { "frameStep": 144 }
},
{
"name": "mixed_stockham_n400_complex_twosided",
"provenance": { "notes": "Complex/full-spectrum branch of the 16x25 mixed-radix decomposition." },
"attrs": { "onesided": 0 },
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 400, 2],
"data": { "kind": "fillFloat32", "sinStep": 0.017, "cosStep": 0.031, "scale": 0.3 }
},
"window": {
"dtype": "float32",
"shape": [400],
"data": { "kind": "fillFloat32", "sinStep": 0.0079, "cosStep": 0.0079, "scale": 0.5 }
}
},
"outputs": { "output": { "dtype": "float32", "shape": [1, 1, 400, 2], "tolerance": 0.02, "relTolerance": 0.001 } },
"args": { "frameStep": 400 }
},
{
"name": "mixed_stockham_n480_real_twosided_tail15",
"provenance": {
"notes": "Real full-spectrum 480-point mixed-radix path: 32-point shared Stockham transforms over 15 residue classes, followed by the direct radix-15 tail."
},
"attrs": { "onesided": 0 },
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 960, 1],
"data": { "kind": "fillFloat32", "sinStep": 0.017, "cosStep": 0.029, "scale": 1.0 }
},
"window": {
"dtype": "float32",
"shape": [480],
"data": { "kind": "fillFloat32", "sinStep": 0.0065, "cosStep": 0.0065, "scale": 0.5 }
}
},
"outputs": { "output": { "dtype": "float32", "shape": [1, 3, 480, 2], "tolerance": 0.02, "relTolerance": 0.001 } },
"args": { "frameStep": 240 }
},
{
"name": "mixed_stockham_n496_real_onesided_tail31",
"provenance": {
"notes": "Generic mixed-radix recurrence at the supported tail bound: a 16-point shared Stockham factor and radix-31 tail."
},
"attrs": { "onesided": 1 },
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 744, 1],
"data": { "kind": "fillFloat32", "sinStep": 0.019, "cosStep": 0.031, "scale": 0.6 }
},
"window": {
"dtype": "float32",
"shape": [496],
"data": { "kind": "fillFloat32", "sinStep": 0.009, "cosStep": 0.005, "scale": 0.5, "offset": 0.5 }
}
},
"outputs": { "output": { "dtype": "float32", "shape": [1, 2, 249, 2], "tolerance": 0.02, "relTolerance": 0.001 } },
"args": { "frameStep": 248 }
},
{
"name": "mixed_stockham_n132_real_onesided_tail33",
"provenance": {
"notes": "First tail past the unanchored bound: a 4-point shared Stockham factor and radix-33 tail, so the tail walk re-anchors exactly once."
},
"attrs": { "onesided": 1 },
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 198, 1],
"data": { "kind": "fillFloat32", "sinStep": 0.019, "cosStep": 0.031, "scale": 0.6 }
},
"window": {
"dtype": "float32",
"shape": [132],
"data": { "kind": "fillFloat32", "sinStep": 0.031, "cosStep": 0.017, "scale": 0.5, "offset": 0.5 }
}
},
"outputs": { "output": { "dtype": "float32", "shape": [1, 2, 67, 2], "tolerance": 0.02, "relTolerance": 0.001 } },
"args": { "frameStep": 66 }
},
{
"name": "window_and_frame_length_copresent_fft",
"inputs": {
"signal": { "dtype": "float32", "shape": [1, 64, 1], "data": { "kind": "constant", "value": 1.0 } },
"window": {
"dtype": "float32",
"shape": [16],
"data": {
"kind": "values",
"values": { "$ref": "#/fixtureArrays/onnx_backend_arange128_cos_window16_input_window" }
}
}
},
"outputs": { "output": { "dtype": "float32", "shape": [1, 7, 9, 2], "tolerance": 0.0002 } },
"args": { "frameStep": 8, "frameLength": 16 }
},
{
"name": "mixed_stockham_n1000_real_twosided_tail125",
"provenance": {
"notes": "Window length 1000 factors as 8 x 125 and exercises the shared Stockham mixed-radix route after the tail-bound transition. Odd lengths 513 and 777 retain independent tiled-real coverage."
},
"attrs": { "onesided": 0 },
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 2000, 1],
"data": { "kind": "fillFloat32", "sinStep": 0.0091, "cosStep": 0.0071, "scale": 1.0 }
},
"window": {
"dtype": "float32",
"shape": [1000],
"data": { "kind": "fillFloat32", "sinStep": 0.0031, "cosStep": 0.0031, "scale": 0.5 }
}
},
"outputs": {
"output": { "dtype": "float32", "shape": [1, 2, 1000, 2], "tolerance": 0.05, "relTolerance": 0.002 }
},
"args": { "frameStep": 1000 }
},
{
"name": "fft_pow2_win8_drops_partial_last_frame",
"attrs": { "onesided": 1 },
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 12, 1],
"data": { "kind": "values", "values": [1.0, -2.0, 3.0, -4.0, 5.0, -6.0, 7.0, -8.0, 9.0, -10.0, 11.0, -12.0] }
},
"window": {
"dtype": "float32",
"shape": [8],
"data": { "kind": "values", "values": [1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3] }
}
},
"outputs": {
"output": { "dtype": "float32", "shape": [1, 1, 5, 2], "tolerance": 0.0002, "relTolerance": 0.0001 }
},
"args": { "frameStep": 8 },
"provenance": {
"notes": "The final four samples cannot fill an eight-sample frame, so ONNX floor framing emits only the complete frame at offset zero."
}
},
{
"name": "fft_pow2_win4_complex_twosided_drops_partial_last_frame",
"attrs": { "onesided": 0 },
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 6, 2],
"data": { "kind": "values", "values": [1.0, 0.5, 2.0, -0.5, 3.0, 1.0, -4.0, 0.0, 5.0, -2.0, 6.0, 0.25] }
},
"window": { "dtype": "float32", "shape": [4], "data": { "kind": "values", "values": [1.0, 0.75, 0.5, 0.25] } }
},
"outputs": {
"output": { "dtype": "float32", "shape": [1, 1, 4, 2], "tolerance": 0.0002, "relTolerance": 0.0001 }
},
"args": { "frameStep": 4 },
"provenance": {
"notes": "The frame at offset four would extend past the six-sample signal, so ONNX floor framing emits only the complete frame at offset zero."
}
},
{
"name": "fft_pow2_win16_window_with_interior_zeros",
"attrs": { "onesided": 1 },
"inputs": {
"signal": { "dtype": "float32", "shape": [1, 32, 1], "data": { "kind": "linspace", "start": 0.0, "end": 31.0 } },
"window": {
"dtype": "float32",
"shape": [16],
"data": {
"kind": "values",
"values": [0.0, 0.25, 0.5, 0.75, 1.0, 0.75, 0.5, 0.0, 0.0, 0.5, 0.75, 1.0, 0.75, 0.5, 0.25, 0.0]
}
}
},
"outputs": {
"output": { "dtype": "float32", "shape": [1, 3, 9, 2], "tolerance": 0.0002, "relTolerance": 0.0001 }
},
"args": { "frameStep": 8 }
},
{
"name": "dispatch_fold_fft_batch2_frames32800_win4_onesided",
"inputs": {
"signal": {
"dtype": "float32",
"shape": [2, 32803, 1],
"data": { "kind": "fillFloat32", "sinStep": 0.017, "cosStep": 0.029, "scale": 1.0 }
},
"window": { "dtype": "float32", "shape": [4], "data": { "kind": "values", "values": [0.5, 1.0, 1.0, 0.5] } }
},
"outputs": {
"output": { "dtype": "float32", "shape": [2, 32800, 3, 2], "tolerance": 0.001, "relTolerance": 0.0001 }
},
"args": { "frameStep": 1 }
},
{
"name": "rank3_window_win513_nonpow2_onesided_compact",
"provenance": {
"notes": "Compact selector and correctness lock for the first non-power-of-two window above 512. Three frames exercise frame addressing; 257 bins exercise the partial second 256-frequency block."
},
"attrs": { "onesided": 1 },
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 1025, 1],
"data": { "kind": "fillFloat32", "sinStep": 0.0091, "cosStep": 0.0071, "scale": 1.0 }
},
"window": {
"dtype": "float32",
"shape": [513],
"data": { "kind": "fillFloat32", "sinStep": 0.0061, "cosStep": 0.0061, "scale": 0.5 }
}
},
"outputs": { "output": { "dtype": "float32", "shape": [1, 3, 257, 2], "tolerance": 0.02, "relTolerance": 0.001 } },
"args": { "frameStep": 256 }
},
{
"name": "rank3_window_win777_tiled_real_generic",
"provenance": { "notes": "Non-513 correctness lock for the storage-bounded tiled real STFT path." },
"attrs": { "onesided": 1 },
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 777, 1],
"data": { "kind": "fillFloat32", "sinStep": 0.0067, "cosStep": 0.0091, "scale": 0.5 }
},
"window": {
"dtype": "float32",
"shape": [777],
"data": { "kind": "fillFloat32", "sinStep": 0.0041, "cosStep": 0.0051, "scale": 0.5 }
}
},
"outputs": { "output": { "dtype": "float32", "shape": [1, 1, 389, 2], "tolerance": 0.04, "relTolerance": 0.002 } },
"args": { "frameStep": 777 }
},
{
"name": "rank3_window_fft8192_storage_generic",
"provenance": {
"notes": "Non-4096 correctness lock for the geometry-derived large radix-2 FFT; device storage capacity selects the single-dispatch or globally staged implementation."
},
"attrs": { "onesided": 1 },
"inputs": {
"signal": {
"dtype": "float32",
"shape": [1, 8192, 1],
"data": { "kind": "fillFloat32", "sinStep": 0.0045, "cosStep": 0.0085, "scale": 0.25 }
},
"window": {
"dtype": "float32",
"shape": [8192],
"data": { "kind": "fillFloat32", "sinStep": 0.0025, "cosStep": 0.0015, "scale": 0.5, "offset": 0.5 }
}
},
"outputs": {
"output": { "dtype": "float32", "shape": [1, 1, 4097, 2], "tolerance": 0.08, "relTolerance": 0.0005 }
},
"args": { "frameStep": 8192 }
}
]
}