fabim escreveu: For example - Lets say you have a tone (or white/pink noise) and you measure 100dB* on your "real" meter. And, let's say you get a reading of 500** from the Arduino's ADC. You now know that your meter should display 100dB, when the ADC reads 500. If you now boost the volume to get a ADC reading of 1000, you can calculate the relative dB level... 20log(1000/500) = 6dB. So, your SPL reading is 106dB (6dB more than your reference). A reading of 250 will convert to -6dB, or 94dB SPL.
eh pq a correlacao entre pressao de audio e volts nao eh direta. para pressao de audio a referencia eh 20upa e eu nem sei direito o que eh um pascal, mas definitivamente nao eh nada relacionado com eletricidade... jah o que vc mede no ADC, eh eletricidade. deve ter uma relacao no circuito, mas provavelmente vc nao tem isso. nao importa, visto que vc tem sinais de referencia para calibrar a correlacao entre pressao e volts.
segundo o exemplo do cara:
valor 1000 = dobro da amplitude digital, logo vc calcula que eh 100dB+6dB: 106dB
valor 500 = 100dB (sua referencia, isso dah uma amplitude digital de valor 500 no ADC).
valor 250 = metade da amplitude digital, logo vc calcula que eh 100dB-6dB: 94dB
provavelmente ele usou esses exemplos pq eh os que se faz de cabeca usando a regra de 6dB/bit. vamos pensar como eh feito o negocio: tem um microfone, uma serie de circuitos analogicos que amplificam o audio e transportam ele ateh um ADC. o ADC provavelmente usa 3.3V para o fim da escala lah em cima. daih os caras criam um ambiente de calibragem: geram 100dB, digamos e medem um valor. no caso, o valor 500. o que eh esse 500? nao importa! na calibragem o circuito entrou com valor de 100dB e gerou esse 500. eh a referencia. se o circuito analogico for suficientemente linear e sem distorcoes, passos de 6dB devem corresponder a passos de 1bit, ou seja, N+6dB = Nbits<<1 e N-6dB = Nbits>>1. e para valores discretos intermediarios? tem que fazer uma continha usando log:
valor 1000 => log2(1000) = 9.965 bits = 9.965-8.965 = 1 bit de diferenca para a referencia, logo 100dB+(6dB*1) = 106dB.
valor 500 => log2(500) = 8.965 bits = 100dB (referencia)
valor 250 => log2(250) = 7.965 bits = 7.965-8.965 = -1 bit de diferenca para a referencia, logo, 100dB+(6dB*-1) = 95dB
disso podemos generalizar:
valor x => log2(x) = ybits => refbits-ybits = zbits, onde 100dB+(6dB*zbits) = resultado
supondo que a referencia de 100dB dah valor 500. generalizando mais ainda seria:
valor xadc => log2(xadc) => ybits => refbits-ybits = zbits => refdb + (6db * zbits) = resultado
assim, digamos que vc pega um valor 1275 no ADC e a referencia eh 500 para 100dB, temos:
valor 1275 => log2(1275) = 10.31 bits => 10.31-8.965 = 1.35 bits, assim 100dB+(6dB*1.35 bits) = 108.1dB.