Goal
Go from a full array to consecutive blocks and keep the processing state.
Prerequisites: Parts 04–06, 09, 13–14.
Future lessons
- Sample-by-sample and block processing; the state of FIR/IIR filters, NCOs, sample rate converters and loops.
- Ring buffers, FIFO queues, timestamps, latency and throughput.
- Block boundaries, reset, gaps, buffer underrun and overrun; pausing the source when the receiver is overloaded (backpressure).
- Operations per sample, memory use and data rate; what Python can and cannot do.
Lab plan
- Split the input into blocks of different sizes and compare with processing of the full array; take the delay and the filter tail into account.
- Check that the NCO phase and the filter states are kept at the boundaries.
- Measure the processing time and the latency; audio connection is optional.
We do the experiments in Python with NumPy, SciPy and Matplotlib. We keep the parameters, units and plots. The base models use float64 and complex128; we add bit-depth limits in separate experiments.
Completion criteria
- I get the same result for different block sizes within the selected precision.
- I can tell the difference between average speed and a guarantee to finish before a deadline; a fast Python run does not prove hard real time.
Result for the main project
Streaming block interfaces and a working Python chain.