Eu tenho um ADC de 14 bits . No entanto, observando a folha de dados (consulte a tabela 2 na página 5), o número efetivo de bits (ENOB) é sempre menor que 12 bits.
Por que meu DAC está reivindicando ser um ADC de 14 bits quando possui apenas precisão de 12 bits? Qual é o sentido de ter dois bits extras se eles não fazem sentido?
Respostas:
Você foi enganado!
14-bit é marketing, e o hardware também fornece isso, então eles dizem que você não tem nada a reclamar. Logo acima de ENOB na ficha técnica, ele fornece os números SINAD (Sinal de ruído e distorção). São 72 dB e 1 bit corresponde a um nível de 6 dB, de modo que 72 dB são de fato 12 bits. Os 2 bits mais baixos são ruídos.
É possível recuperar dados que são mais baixos que o nível mínimo de ruído, mas precisam de uma correlação muito boa, o que significa que deve ser muito previsível.
fonte
Suponha que se deseje medir uma tensão constante com a maior precisão possível, usando um ADC que retorne um valor de 8 bits para cada medição. Suponha ainda que ADC seja especificado para que um código de N seja nominalmente retornado para tensões entre (N-0,5) / 100 e (N + 0,5) / 100 volts (portanto, por exemplo, um código de 47 representaria nominalmente algo entre 0,465 e 0,475 volts). O que alguém gostaria de ter na saída ADC se alimentado com uma tensão de estado estacionário de precisamente 0,47183 volts?
Se o ADC sempre emitir o valor que representa o intervalo acima definido no qual a entrada cai (47 neste caso), não importa quantas leituras forem feitas, o valor parecerá ser 47. Resolvendo algo mais refinado do que seria impossível.
Suponha, em vez disso, que o ADC tenha sido construído de forma que um valor aleatório de "pontilhamento" distribuído linearmente de -0,5 a +0,5 seja adicionado a cada leitura antes de convertê-lo em um número inteiro? Nesse cenário, uma voltagem de 47.183 volts retornaria uma leitura de 48, aproximadamente 18,3% das vezes, e um valor de 47 nos outros 81,7% das vezes. Se alguém calculou a média de 10.000 leituras, espera-se que seja aproximadamente 47.183. Por causa da aleatoriedade, pode ser um pouco maior ou menor, mas deve estar bem próximo. Observe que, se se faz leituras suficientes, pode-se atingir um nível arbitrário de precisão esperada, embora cada bit adicional exija mais do que duplicar o número de leituras.
Adicionar precisamente um LSB de pontilhamento linearmente distribuído seria um comportamento muito bom para um ADC. Infelizmente, implementar esse comportamento não é fácil. Se o pontilhamento não for distribuído linearmente, ou se sua magnitude não for precisamente um LSB, a quantidade de precisão real que se poderia obter da média seria severamente limitada, não importa quantas amostras sejam usadas. Se, em vez de adicionar um LSB de aleatoriedade linearmente distribuída, adicionar vários valores de LSB, atingir um determinado nível de precisão exigirá mais leituras do que seria necessário usando a aleatoriedade ideal de um LSB, mas o limite máximo para a precisão que pode ser alcançada fazer um número arbitrário de leituras será muito menos sensível a imperfeições na fonte de pontilhamento.
Observe que, em alguns aplicativos, é melhor usar um ADC que não atrapalhe o resultado. Isso é especialmente verdadeiro nas circunstâncias em que alguém está mais interessado em observar mudanças nos valores de ADC do que nos próprios valores precisos. Se resolver rapidamente a diferença entre uma taxa de aumento de +3 unidade / amostra e +5 unidade / amostra é mais importante do que saber se uma tensão de estado estacionário é precisamente 13,2 ou 13,4 unidades, um ADC sem oscilação pode ser melhor que um hesitando. Por outro lado, o uso de um ADC pontilhado pode ser útil se alguém quiser medir as coisas com mais precisão do que uma única leitura permitiria.
fonte
Lição bônus: você realmente tem 14 bits de precisão , mas apenas 12 bits de precisão .
fonte
Uma advertência adicional ... às vezes você realmente quer aleatoriedade .
Por exemplo:
Em aplicativos criptográficos (segurança / autenticidade), é necessária uma aleatoriedade pura "indiscutível". O uso de LSBs de um conversor (aqueles abaixo do nível de ruído) é uma maneira rápida de gerar números puramente aleatórios.
Quando o hardware ADC está disponível para outros fins (sensores e similares), é uma maneira rápida e fácil de propagar a comunicação segura. Você pode aprimorar o efeito maximizando o ganho no amplificador de entrada, se disponível (muitos MCUs oferecem esse recurso) e flutuando a entrada.
A aleatoriedade da ADC deriva principalmente de dois princípios físicos: ruído de quantização e ruído térmico.
Esses efeitos têm um limite no nível macroscópico. Por exemplo, números suficientemente afastados do limite de bits não precisam ser arredondados e, portanto, não apresentam erro de quantização ou aleatoriedade. O ruído térmico não afeta os bits mais significativos na conversão na maioria dos cenários.
Por extensão, você pode ver que a variação dos parâmetros de conversão (tempo de amostragem, profundidade, taxa, tensão de referência) afetará a alteração na aleatoriedade dos resultados movendo o limiar da aleatoriedade (aumentando-a aumentando ou diminuindo-a diminuindo o limiar) ) Efeito semelhante é alcançado variando os parâmetros ambientais / do sistema (temperatura, fonte de alimentação, etc.).
Dito isto, muitos geradores de números aleatórios de hardware comercial bem-sucedidos confiam nessa técnica porque os efeitos externos apenas reduzem a aleatoriedade - eles nunca a eliminam (fisicamente impossível).
Você pode compensar uma redução na aleatoriedade fazendo mais conversões e acrescentando os resultados. Esse processo de extensão de bits (concatenação de bits baixos de conversões sucessivas) é usado nos Dongles do Núcleo STM32, no FST-01 (incluindo NeuG 1.0), na família de dispositivos Grang da LE Tech e em muitos outros.
Os dispositivos Grang geram bits convertendo em mais de 400 milhões de conversões por segundo (1 bit por conversão). Se você fizer conversões suficientes, poderá garantir alta aleatoriedade mesmo diante das condições ambientais.
fonte