We have been measuring the performance of our system with your ASRC and are finding a few discrepancies. First of all, the User Guide explains that "to leave headroom for down stream signal processing the ASRC output signal is attenuated by 2x". Our tests have shown that we are not getting 2x but closer to 4.5x attenuation out of the ASRC. This wouldn't be a big issue (as we just have a 4.5x multiplier after the ASRC) but we are seeing our noise floor being raised higher than expected (around 10 dB). IF we use a higher quality version of the ASRC (100 dB instead of 80 dB version) then we can see we get around 5 dB back but still not great (and even going higher to 120 dB and 140 dB versions there is no difference). However, we cannot use the higher quality version due to CPU processing constraints. Here are the parameters we are using:
dspc_asrc_48000_to_48000_8m_080db, ASRC_PHASELEN_28, Q31, block size = 48
After inputting a sine wave and writing it using dspc_asrc_write_input_Q31, we read dspc_asrc_read_output_linear_Q31 and find the output 4.5x (~13 dB) lower.
Have you seen this before? Please check our parameters and let us know if there is anything else we can try to get to the bottom of this.
Thank you,
-Sal
8:58pm
Hi Sal,
There is a discrepancy in the documentation for the target you are running on. In your package, there is in fact an expected 13 dB attenuation from the linear ASRC implementation, and a 19 dB attenuation from the cubic implementation. 1 dB of this is included in the filter coefficients themselves, while the rest of the attenuation is due to the nature of fixed point arithmetic in the algorithms.
While the attenuations you are seeing look correct, I wouldn't expect there to be a significant change in your noise floor. I will look into this tomorrow and let you know what I find.
-Axel