Audio PLL resolution (APLL)
Posted: Thu Mar 07, 2019 3:31 pm
Hi
My project consists of recording audio from an external ADC to a wave file stored on an SD Card.
I allow multiple sampling frequencies among 44.1Khz, 48k and 96k.
The external codec is configured in SLAVE mode, so the ESP32 provides MCLK, Bit clock and word clocks.
I use APLL in order to achieve good accuracy, but the result is quite bad :
16Bits 44.1KHz
I2S: APLL: Req RATE: 44100, real rate: 43945.238, BITS: 16, CLKM: 1, BCK_M: 8, MCLK: 11249981.000, SCLK: 1406247.625000, diva: 1, divb: 0
-> Acceptable
16Bits 48KHz
I2S: APLL: Req RATE: 48000, real rate: 47999.961, BITS: 16, CLKM: 1, BCK_M: 8, MCLK: 12287990.000, SCLK: 1535998.750000, diva: 1, divb: 0
-> Ok
16Bits 96KHz
APLL: Req RATE: 96000, real rate: 87890.477, BITS: 16, CLKM: 1, BCK_M: 8, MCLK: 22499962.000, SCLK: 2812495.250000, diva: 1, divb: 0
-> NOT Acceptable
As you can see above, 16Bits 96KHz accuracy is very bad, thus reading the wave file (with header 24 bits 96 K) at normal speed results in a pitch issue.
I'd like to avoid adding a crystal to the external codec and configure it in MASTER mode to save hardware cost.
Any help would be greatly appreciated.
Thanks
My project consists of recording audio from an external ADC to a wave file stored on an SD Card.
I allow multiple sampling frequencies among 44.1Khz, 48k and 96k.
The external codec is configured in SLAVE mode, so the ESP32 provides MCLK, Bit clock and word clocks.
I use APLL in order to achieve good accuracy, but the result is quite bad :
16Bits 44.1KHz
I2S: APLL: Req RATE: 44100, real rate: 43945.238, BITS: 16, CLKM: 1, BCK_M: 8, MCLK: 11249981.000, SCLK: 1406247.625000, diva: 1, divb: 0
-> Acceptable
16Bits 48KHz
I2S: APLL: Req RATE: 48000, real rate: 47999.961, BITS: 16, CLKM: 1, BCK_M: 8, MCLK: 12287990.000, SCLK: 1535998.750000, diva: 1, divb: 0
-> Ok
16Bits 96KHz
APLL: Req RATE: 96000, real rate: 87890.477, BITS: 16, CLKM: 1, BCK_M: 8, MCLK: 22499962.000, SCLK: 2812495.250000, diva: 1, divb: 0
-> NOT Acceptable
As you can see above, 16Bits 96KHz accuracy is very bad, thus reading the wave file (with header 24 bits 96 K) at normal speed results in a pitch issue.
I'd like to avoid adding a crystal to the external codec and configure it in MASTER mode to save hardware cost.
Any help would be greatly appreciated.
Thanks