This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TLV320AIC3204: How to get rid of hissing when gain / volume is loud

Part Number: TLV320AIC3204

Tool/software:

Hi,

I have my configuration pretty much under control but still have a few things I'd like to double-check with you experts.

I have a PDM microphone connected to DIN and the data is routed to HPL. I configured my CODEC to 48kHz 16bit and it's nice and clear.

The microphone I am using is a Knowles V2S200D vibration microphone and when I set P0_R61 to 9, the audio is quite great and if I set it to 13, it's super loud and even better because it lets me get what appears to be different frequency ranges, however, when I pronounce words with 's' like "test" or "snow", the 's' sound is hissing and I can't figure-out if there are any settings I can tweak to get rid of this.

The goal with this is to maximize the output level to the loudest I can without clipping.

Using P0_R65 or P1_R16, the clipping and hissing is still there but it's just less loud.

I guess I'm missing an amplification section for the DAC or whatever.

Below is a P0 and P1 output. I have a 3.072MHz PWM going into MCLK which goes into the PLL. This returns a 86.016MHz CODEC_CLKIN, 12.288MHz ADC_CLK, 6.144MHZ ADC_MOD_CLK and 48KHz ADC_FS.

I am trying to make this microphone as sensitive as possible without clipping or distorting.

Any pointers is appreciated.

Thanks!

Ben

- PAGE 0 -
Register 000: 000 (0x00 --> 0000 0000)
Register 001: 000 (0x00 --> 0000 0000)
Register 002: 096 (0x60 --> 0110 0000)
Register 003: 000 (0x00 --> 0000 0000)
Register 004: 003 (0x03 --> 0000 0011)
Register 005: 148 (0x94 --> 1001 0100)
Register 006: 007 (0x07 --> 0000 0111)
Register 007: 000 (0x00 --> 0000 0000)
Register 008: 000 (0x00 --> 0000 0000)
Register 009: 000 (0x00 --> 0000 0000)
Register 010: 000 (0x00 --> 0000 0000)
Register 011: 135 (0x87 --> 1000 0111)
Register 012: 130 (0x82 --> 1000 0010)
Register 013: 000 (0x00 --> 0000 0000)
Register 014: 128 (0x80 --> 1000 0000)
Register 015: 002 (0x02 --> 0000 0010)
Register 016: 000 (0x00 --> 0000 0000)
Register 017: 008 (0x08 --> 0000 1000)
Register 018: 135 (0x87 --> 1000 0111)
Register 019: 130 (0x82 --> 1000 0010)
Register 020: 128 (0x80 --> 1000 0000)
Register 021: 001 (0x01 --> 0000 0001)
Register 022: 000 (0x00 --> 0000 0000)
Register 023: 004 (0x04 --> 0000 0100)
Register 024: 000 (0x00 --> 0000 0000)
Register 025: 000 (0x00 --> 0000 0000)
Register 026: 001 (0x01 --> 0000 0001)
Register 027: 132 (0x84 --> 1000 0100)
Register 028: 000 (0x00 --> 0000 0000)
Register 029: 016 (0x10 --> 0001 0000)
Register 030: 001 (0x01 --> 0000 0001)
Register 031: 000 (0x00 --> 0000 0000)
Register 032: 000 (0x00 --> 0000 0000)
Register 033: 000 (0x00 --> 0000 0000)
Register 034: 000 (0x00 --> 0000 0000)
Register 035: 000 (0x00 --> 0000 0000)
Register 036: 072 (0x48 --> 0100 1000)
Register 037: 230 (0xE6 --> 1110 0110)
Register 038: 016 (0x10 --> 0001 0000)
Register 039: 000 (0x00 --> 0000 0000)
Register 040: 000 (0x00 --> 0000 0000)
Register 041: 000 (0x00 --> 0000 0000)
Register 042: 174 (0xAE --> 1010 1110)
Register 043: 000 (0x00 --> 0000 0000)
Register 044: 136 (0x88 --> 1000 1000)
Register 045: 000 (0x00 --> 0000 0000)
Register 046: 000 (0x00 --> 0000 0000)
Register 047: 000 (0x00 --> 0000 0000)
Register 048: 000 (0x00 --> 0000 0000)
Register 049: 000 (0x00 --> 0000 0000)
Register 050: 000 (0x00 --> 0000 0000)
Register 051: 000 (0x00 --> 0000 0000)
Register 052: 000 (0x00 --> 0000 0000)
Register 053: 002 (0x02 --> 0000 0010)
Register 054: 003 (0x03 --> 0000 0011)
Register 055: 014 (0x0E --> 0000 1110)
Register 056: 002 (0x02 --> 0000 0010)
Register 057: 000 (0x00 --> 0000 0000)
Register 058: 000 (0x00 --> 0000 0000)
Register 059: 000 (0x00 --> 0000 0000)
Register 060: 008 (0x08 --> 0000 1000)
Register 061: 015 (0x0F --> 0000 1111)
Register 062: 000 (0x00 --> 0000 0000)
Register 063: 144 (0x90 --> 1001 0000)
Register 064: 000 (0x00 --> 0000 0000)
Register 065: 246 (0xF6 --> 1111 0110)
Register 066: 000 (0x00 --> 0000 0000)
Register 067: 000 (0x00 --> 0000 0000)
Register 068: 000 (0x00 --> 0000 0000)
Register 069: 056 (0x38 --> 0011 1000)
Register 070: 000 (0x00 --> 0000 0000)
Register 071: 000 (0x00 --> 0000 0000)
Register 072: 000 (0x00 --> 0000 0000)
Register 073: 000 (0x00 --> 0000 0000)
Register 074: 000 (0x00 --> 0000 0000)
Register 075: 238 (0xEE --> 1110 1110)
Register 076: 016 (0x10 --> 0001 0000)
Register 077: 216 (0xD8 --> 1101 1000)
Register 078: 126 (0x7E --> 0111 1110)
Register 079: 227 (0xE3 --> 1110 0011)
Register 080: 000 (0x00 --> 0000 0000)
Register 081: 170 (0xAA --> 1010 1010)
Register 082: 008 (0x08 --> 0000 1000)
Register 083: 018 (0x12 --> 0001 0010)
Register 084: 000 (0x00 --> 0000 0000)
Register 085: 000 (0x00 --> 0000 0000)
Register 086: 176 (0xB0 --> 1011 0000)
Register 087: 192 (0xC0 --> 1100 0000)
Register 088: 040 (0x28 --> 0010 1000)
Register 089: 016 (0x10 --> 0001 0000)
Register 090: 016 (0x10 --> 0001 0000)
Register 091: 001 (0x01 --> 0000 0001)
Register 092: 001 (0x01 --> 0000 0001)
Register 093: 000 (0x00 --> 0000 0000)
Register 094: 000 (0x00 --> 0000 0000)
Register 095: 000 (0x00 --> 0000 0000)
Register 096: 127 (0x7F --> 0111 1111)
All remaining register on P0 are 0.

- PAGE 1 -
Register 000: 001 (0x01 --> 0000 0001)
Register 001: 000 (0x00 --> 0000 0000)
Register 002: 000 (0x00 --> 0000 0000)
Register 003: 000 (0x00 --> 0000 0000)
Register 004: 000 (0x00 --> 0000 0000)
Register 005: 000 (0x00 --> 0000 0000)
Register 006: 000 (0x00 --> 0000 0000)
Register 007: 000 (0x00 --> 0000 0000)
Register 008: 000 (0x00 --> 0000 0000)
Register 009: 060 (0x3C --> 0011 1100)
Register 010: 000 (0x00 --> 0000 0000)
Register 011: 000 (0x00 --> 0000 0000)
Register 012: 008 (0x08 --> 0000 1000)
Register 013: 008 (0x08 --> 0000 1000)
Register 014: 000 (0x00 --> 0000 0000)
Register 015: 000 (0x00 --> 0000 0000)
Register 016: 059 (0x3B --> 0011 1011)
Register 017: 058 (0x3A --> 0011 1010)
Register 018: 064 (0x40 --> 0100 0000)
Register 019: 064 (0x40 --> 0100 0000)
Register 020: 001 (0x01 --> 0000 0001)
Register 021: 000 (0x00 --> 0000 0000)
Register 022: 000 (0x00 --> 0000 0000)
Register 023: 000 (0x00 --> 0000 0000)
Register 024: 000 (0x00 --> 0000 0000)
Register 025: 000 (0x00 --> 0000 0000)
Register 026: 000 (0x00 --> 0000 0000)
Register 027: 000 (0x00 --> 0000 0000)
Register 028: 000 (0x00 --> 0000 0000)
Register 029: 000 (0x00 --> 0000 0000)
Register 030: 000 (0x00 --> 0000 0000)
Register 031: 000 (0x00 --> 0000 0000)
Register 032: 000 (0x00 --> 0000 0000)
Register 033: 000 (0x00 --> 0000 0000)
Register 034: 000 (0x00 --> 0000 0000)
Register 035: 000 (0x00 --> 0000 0000)
Register 036: 000 (0x00 --> 0000 0000)
Register 037: 000 (0x00 --> 0000 0000)
Register 038: 000 (0x00 --> 0000 0000)
Register 039: 000 (0x00 --> 0000 0000)
Register 040: 000 (0x00 --> 0000 0000)
Register 041: 000 (0x00 --> 0000 0000)
Register 042: 000 (0x00 --> 0000 0000)
Register 043: 000 (0x00 --> 0000 0000)
Register 044: 000 (0x00 --> 0000 0000)
Register 045: 000 (0x00 --> 0000 0000)
Register 046: 000 (0x00 --> 0000 0000)
Register 047: 000 (0x00 --> 0000 0000)
Register 048: 000 (0x00 --> 0000 0000)
Register 049: 000 (0x00 --> 0000 0000)
Register 050: 000 (0x00 --> 0000 0000)
Register 051: 104 (0x68 --> 0110 1000)
Register 052: 064 (0x40 --> 0100 0000)
Register 053: 000 (0x00 --> 0000 0000)
Register 054: 064 (0x40 --> 0100 0000)
Register 055: 000 (0x00 --> 0000 0000)
Register 056: 000 (0x00 --> 0000 0000)
Register 057: 000 (0x00 --> 0000 0000)
Register 058: 000 (0x00 --> 0000 0000)
Register 059: 094 (0x5E --> 0101 1110)
Register 060: 094 (0x5E --> 0101 1110)
Register 061: 000 (0x00 --> 0000 0000)
Register 062: 000 (0x00 --> 0000 0000)
Register 063: 192 (0xC0 --> 1100 0000)
All remaining registers on P1 are 0.

  • Hi Ben,

    What you're describing is a common issue with microphone signals at high volumes. Such a common problem that it has it's own invention to take care of it. https://en.wikipedia.org/wiki/De-essing

    S sounds have a lot of energy in the mid-highs and can be annoying to listen to. This is just a physics problem and really has nothing to do with the codec or the microphone. The best you can do with the codec is put a high q biquad filter in the sibilance band (3k to 10k or so) to try to mitigate the effect.

    On a more equipped host processor you could use a dynamic EQ or compressor, meaning the filter or compressor only kicks in once the energy in a particular band (sibilance) reaches a pre-determined value.

    Best regards,
    Jeff McPherson

  • Ok, that makes sense.

    I notice quite a good difference in the audio when I change P0_R61 depending on how P0_R65 and P1_R16 are set:

    If I set P0_R65 and P1_R16 to 0 dB and set P0_R61 to 0x01, then the audio is low but clear. While at 0dB, if I change P0_R61 to 0x07 or 0x09 or 0x0D, there doesn't appear to be any difference.

    However, as soon as I change P0_R65 and/or P1_R16, then there's a clear difference and it's much louder with P0_R61 set to either 0x07, 0x09 or 0x0D.

    It seems that 0x07, 0x09, 0x0D and 0x0F sets filters. I like the tone of 0x0D and 0x0F for voice but it's so loud that it clips.

    I will do more tests today and will try that other tool you provided me last week to create filters.

    Benoit