Goal
Learn to change the sample rate and keep aliasing and spectral images under control.
Prerequisites: Parts 03–04.
Future lessons
- Decimation: filter before you keep every M-th sample.
- Interpolation: zero insertion, the spectral images that it causes, and a filter to remove them.
- Sample rate conversion by L/M, multiple stages, and polyphase implementation.
- CIC filter: integrators and comb stages, droop in the passband, gain and bit growth. We refine the integer model in Part 14.
Lab plan
- Compare the change from 96 → 12 kS/s with and without a filter when there is strong out-of-band interference.
- Show the spectral images after zero insertion and the result of filtering.
- Compare the direct and polyphase implementations with scipy.signal.upfirdn/resample_poly; count the operations.
- Measure the passband ripple of a CIC.
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
- For each stage, I state the sample rate, the useful band and the filter requirements.
- I can explain why a polyphase implementation saves computation, and the limits of a CIC.
Result for the main project
A sample rate plan and blocks to convert between the rates.