A ubiquitous tool for signal processing is the Fourier transform. Although I find it perfectly adequate, a 25 MHz RISC5 would no longer be considered high performance. For similarly constrainted microcontrollers, the Goertzel algorithm is a common substitute for Fourier analysis. It can't divide the whole spectrum into bins, but it can answer the predicate “is there energy at this frequency?”
I ported the above C code to Oberon-07. Note however that I used floating point. An improvement might use fixed point, but I don't think I'll take this any further.