Thanks for the continued great work taking a look at these fundamental details (that heretofore had seemingly been overlooked due likely to their being “small” details within the huge Asterisk&app-rpt codebase). A few notes on your notes:
- A first important point is that even if a repeater system or radio has only a narrow audio bandwidth such as 3–3.5 KHz, it is much better to sample at at least 4x that frequency. Almost all pro audio equipment nowadays runs at 96KHz sample rates, which gives theoretical frequency response to 48KHz – which though twice as far up as anyone can actually hear is done so that sharp low-pass filters and the corresponding signal degradation and phase nonlinearities that those typically introduce do not impact audible frequencies or transient detail. Thus 16K codecs will definitely sound better than 8K even on standard 5KHz deviation FM systems. This kind of difference is not always immediately apparent but on some signals and with extended listening it definitely can make a noticeable improvement. Also, a 16K sample rate does not always equate to twice the actual network bandwidth if a codec is used that does some level of data compression. For example a jpg or png file at half the number of pixels may be only 40% smaller, which might then equate to only a 30% difference in network bandwidth with packet overhead.
- It would be nice to quantify how much difference the current filtering in ASL3 actually makes. This could be done by running an audio test file from one node to another (ie. 48K in → 8K IAX → 48K out) with a series of tones spaced ~1/12th octave from 20-20K Hz and then look at the distortion resulting for each tone. Ideally there should be no more than 0.1% total distortion, which corresponds to a 60dB audio SNR. It would be fairly easy to automate this sort of test in C++ / python.
- Re. scalability, yes there should definitely be no need to individually resample/filter every outgoing audio stream. With that properly optimized I would imagine & should have no trouble at all with 1K connections on a decent cloud VM.