Ruído de quantização para amostragem coerente - ruído de fase?


9

Atualização: veja os pensamentos adicionais na parte inferior desta postagem.


Sob condições gerais de amostragem não restringidas pelo que é descrito abaixo (sinal não correlacionado ao relógio de amostragem), o ruído de quantização é frequentemente estimado como uma distribuição uniforme em um nível de quantização. Quando dois ADCs são combinados com os caminhos I e Q para criar a amostragem de um sinal complexo, o ruído de quantização possui componentes de amplitude e ruído de fase, como simulado abaixo. Como mostrado, esse ruído tem uma distribuição triangular quando os componentes I e Q contribuem igualmente para amplitude e fase, como quando um sinal está em um ângulo de 45 °, e uniforme quando o sinal está no eixo. Isso é esperado, uma vez que o ruído de quantização para cada I e Q não é correlacionado, de modo que as distribuições se envolvam quando ambas contribuem para o resultado da saída.

A pergunta que se coloca é se essa distribuição do ruído de fase muda significativamente para os casos de amostragem coerente (suponha que o próprio relógio de amostragem possua ruído de fase que é muito superior e, portanto, não é um fator)? Especificamente, estou tentando entender se a amostragem coerente reduzirá significativamente o ruído de fase relacionado à quantização. Isso seria diretamente aplicável à geração do sinal de clock, onde a coerência seria facilmente mantida.

Considere sinais reais (um ADC) ou sinais complexos (dois ADCs; um para I e um para Q juntos descrevendo uma única amostra complexa). No caso de sinais reais, a entrada é uma onda senoidal em escala completa e o termo da fase é derivado do sinal analítico; O jitter relacionado a mudanças no cruzamento zero de um tom senoidal seria um exemplo do ruído de fase resultante para um sinal real. No caso de sinais complexos, a entrada é uma escala completa , em que os componentes reais e imaginários seriam ondas senoidais em escala completa.Aejωt

Isso está relacionado a esta questão em que a amostragem coerente é bem descrita, mas o ruído de fase especificamente não foi mencionado:

Amostragem coerente e distribuição do ruído de quantização

Para descrever os componentes de ruído AM e PM induzidos com mais clareza, adicionei o gráfico a seguir abaixo para o caso de quantização complexa mostrando um vetor complexo em tempo contínuo em um dado instante de amostragem e a amostra quantificada associada como um ponto vermelho, assumindo linear distribuição uniforme dos níveis de quantização das porções reais e imaginárias do sinal.

insira a descrição da imagem aqui

Ampliando o local em que a quantização ocorre no gráfico acima para ilustrar o erro de amplitude induzido e o erro de fase:

insira a descrição da imagem aqui

Assim, dado um sinal arbitrário

s(t)=a(t)ejωt=a(t)cos(ωt)+ja(t)sin(ωt)=i(t)+jq(t)

O sinal quantizado é o ponto de distância mais próximo dado por

sk=ik+jqk

Onde e representam a I quantizado e os níveis de Q mapeadas de acordo com:q kikqk

Q{x}=ΔxΔ+12

Onde representa a função floor e representa um nível discreto de quantização.Δ()Δ

ik=Q{i(tk)}qk=Q{q(tk)}

O erro de amplitude éonde é o tempo em que foi amostrado para gerar .t k s ( t ) s k|s(tk)||sk|tks(t)sk

O erro de fase é que * representa o conjugado complexo.arg{s(tk)}arg{sk}=arg{s(tk)(sk)}

A questão para este post é qual é a natureza do componente de fase quando o relógio de amostragem é proporcional ao (um múltiplo inteiro) do sinal de entrada?

Para ajudar, aqui estão algumas distribuições simuladas dos erros de amplitude e fase para o caso complexo de quantização com quantificação de 6 bits em I e Q. Para essas simulações, supõe-se que o sinal real "verdade" seja igualmente provável que esteja em qualquer lugar de uma quantização setor definido como a grade mostrada no diagrama acima. Observe que quando o sinal está ao longo de um dos quadrantes (todos I ou todos Q), a distribuição é uniforme conforme o esperado no único caso ADC com sinais reais. Mas quando o sinal está no ângulo de 45 °, a distribuição é triangular. Isso faz sentido, pois nesses casos o sinal tem contribuições I e Q iguais, sendo cada uma delas distribuições uniformes não correlacionadas; então as duas distribuições convolvem para ser triangulares.

45 graus com quantização

Zoom de 45 graus com quantização

histograma de ângulo

histograma de magnitude

Depois de girar o vetor de sinal para 0 °, os histogramas de magnitude e ângulo são muito mais uniformes conforme o esperado:

Ângulo de 0 graus com quantização

histograma de ângulo a 0 °

histograma de magnitude a 0 °


Atualização: Como ainda precisamos de uma resposta para a pergunta específica (a resposta de Olli abaixo ofereceu um bom esclarecimento sobre as características do ruído que levaram à minha atualização das densidades de ruído triangulares e uniformes, mas as características do ruído de fase sob Se as condições de amostragem coerentes ainda são ilusórias), ofereço os seguintes pensamentos que podem gerar uma resposta real ou um progresso adicional (note que esses são pensamentos possivelmente muito equivocados, mas com o interesse de obter a resposta que ainda não tenho):

Observe que, em condições de amostragem coerentes, a taxa de amostragem é um múltiplo inteiro da frequência de entrada (e fase bloqueada também). Isso significa que sempre haverá um número inteiro de amostras à medida que giramos uma vez através do plano complexo para um sinal e amostragem complexos, ou um número inteiro de amostras de um ciclo de um sinusóide para um sinal e amostragem reais (ADC único).

E, como descrito, estamos assumindo o caso quando o próprio relógio de amostragem é muito superior e, portanto, não é considerado uma contribuição. Portanto, as amostras vão pousar exatamente no mesmo local, sempre.

Considerando o caso do sinal real, se estivéssemos preocupados apenas com as passagens de zero na determinação do ruído de fase, o resultado da amostragem coerente seria apenas uma mudança fixa, mas consistente, no atraso (embora as bordas ascendentes e descendentes possam ter atrasos diferentes quando a coerência é um número inteiro ímpar). Claramente, no complexo caso de amostragem, estamos preocupados com o ruído de fase em todas as amostras, e suspeito que também seria o mesmo para o caso real (minha suspeita é que o atraso de uma amostra a qualquer instante da "verdade" seja o componente de ruído de fase, mas então fico confuso se estiver contando duas vezes o que também é a diferença de amplitude ...) Se tiver tempo, simularei isso, pois toda distorção aparecerá em harmônicos inteiros do sinal de entrada, devido ao padrão de repetição de um ciclo, e o teste de fase versus amplitude seria a fase relativa dos harmônicos versus os fundamentais - o que seria interessante ver por simulação ou cálculo é se essas harmônicas (que para um sinal real teriam todas as contrapartes conjugadas complexas) somadas em quadratura com o fundamental ou em fase e, portanto, demonstrado ser todo ruído de fase, todo ruído de amplitude ou um composto de ambos. (A diferença entre um número par de amostras e ímpar pode afetar isso).

Para o complexo, o gráfico de Olli, que foi feito com um número proporcional de amostras, pode acrescentar mais informações se ele mostrar a localização da amostra em "verdade" associada a cada amostra quantizada mostrada. Novamente, vejo a possibilidade de uma diferença interessante se houver um número ímpar ou par de amostras (o gráfico dele era par e observo a simetria resultante, mas não vejo mais além disso o que pode ser feito para ruído de fase versus amplitude). O que me parece claro, no entanto, é que os componentes de ruído em casos reais e complexos existirão apenas nos harmônicos inteiros da frequência fundamental quando a amostragem for coerente. Portanto, mesmo que o ruído de fase ainda exista como eu suspeito, sua localização em harmônicos inteiros é muito mais propícia a ser eliminada pela filtragem subsequente.

(Nota: isso é aplicável à geração de sinais de relógio de referência de alta pureza espectral.)


2
eu gostaria que você fosse mais matematicamente explícito sobre qual é a questão real.
Robert Bristow-johnson

Deixe-me pensar em como fazer isso; o que estou tentando descrever é que o ruído de quantização pode ser decomposto em componentes de amplitude e fase (AM e PM). Quando quantificamos um tom senoidal arbitrário, não correlacionado ou incomensurável com o relógio de amostragem, o resultado amostrado terá tanto erro de amplitude quanto erro de fase da "verdade" estabelecida pela forma de onda original. Suspeito que o erro de fase seja significativamente reduzido ou eliminado no caso de amostragem coerente ( ) em que é a taxa de amostragem e é a taxa de sinal. f s f s i gfs=Nfsigfsfsig
Dan Boschen 9/04

Eu concordo com rbj. O que você quer dizer com distribuição de fase versus amplitude? Eu acredito em matemática. Um modelo sobre o problema ajudará a resolvê-lo. Além disso, pode ser mais específico, como você decomporia o ruído de quantização em amplitude e fase?
Maximilian Matthé

11
Isso é referente a sinais arbitrários como aludidos no texto ou especificamente sinais sinusoidais, conforme implícitos nas descrições matemáticas? O caso é bastante simplificado se considerarmos apenas sinais sinusoidais, mas isso pode não refletir o comportamento dos sinais do mundo real. No caso proporcional de sinais sinusoidais, o erro de quantização é periódico e se traduz em um erro de fase periódico. Esse tipo de correlação não apareceria em um histograma, mas provavelmente é importante em termos de descrição da "natureza do componente de fase" (com isso você quer dizer o erro de fase, certo?).
lúpulo

11
Também atualizei a pergunta para esclarecer que é para geração de sinal de relógio, caso você queira manter seu último parágrafo sincronizado (você sugeriu que fosse para medição).
Dan Boschen

Respostas:


5

Eu tenho uma dúvida sobre (Edit: isso foi removido mais tarde da pergunta):

A distribuição desses componentes de ruído AM e PM pode ser razoavelmente considerada uniforme, desde que o sinal de entrada não esteja correlacionado com o relógio de amostragem

signal(t)=cos(t)+jsin(t)
quantized_signal(t)=round(Ncos(t))N+j×round(Nsin(t))N

1/NN=5

Traço de sinal e sua quantização
N=5asignal(t)+(1a)quantized_signal(t)a=[15,25,35,45].

O erro na fase devido ao erro de quantização é:

phase_error(t)=atan(Im(quantized_signal(t)),Re(quantized_signal(t)))atan(Im(signal(t)),Re(signal(t)))=atan(round(Nsin(t)),round(Ncos(t)))atan(Nsin(t),Ncos(t))=atan(round(Nsin(t)),round(Ncos(t)))mod(tπ,2π)+π

Subtrair fases agrupadas é arriscado, mas funciona neste caso.

Erro de fase
phase_error(t)N=5

tphase_error(t),phase_error(t)

NN,Nas distribuições dos erros I e Q são uniformes, e os erros de fase e magnitude são números pseudo-aleatórios provenientes de distribuições que dependem da fase do sinal. A dependência da fase existe porque a grade de quantização retangular tem uma orientação.

N,arcsinααα+π/2

[(1/2,1/2),(1/2,1/2),(1/2,1/2),(1/2,1/2)]

A rotação dessas coordenadas ou a projeção equivalente das mesmas nos eixos de erro de fase proporcional e erro de magnitude proporcional fornece a mesma função de densidade de probabilidade linear em partes planas com nós:

[cos(α)2sin(α)2,cos(α)2+sin(α)2,cos(α)2+sin(α)2,cos(α)2sin(α)2]=[2cos(α+π/4),2sin(α+π/4),2cos(α+π/4),2sin(α+π/4)]

Nós do PDF
αα{π,π/2,0,π/2,π}α{3π/4,π/4,π/4,3π/4}N2/22/2arcsin

Em fases intermediárias, o PDF é parecido com o seguinte:

PDF intermediário
α=π/8.

|cos(α)||sin(α)|cos2(α)/12+sin2(α)/12=1/12,α

Pode haver algumas combinações "pseudolucky" da fase inicial e uma razão numérica racional da frequência do sinusóide complexo e da frequência de amostragem que fornecem apenas um pequeno erro para todas as amostras na sequência de repetição. Devido às simetrias dos erros vistos na Fig. 1, no sentido máximo de erro absoluto, essas frequências têm uma vantagem pela qual o número de pontos visitados no círculo é múltiplo de 2, porque a sorte (baixo erro) é necessária em apenas metade dos pontos. Os erros nos demais pontos são duplicados do que são nos primeiros, com inversão de sinal. Pelo menos múltiplos de 6, 4 e 12 têm uma vantagem ainda maior. Não tenho certeza de qual é a regra exata aqui, porque não parece ser uma questão de múltiplo. Isto' s algo sobre as simetrias da grade combinadas com o módulo aritmético. No entanto, os erros pseudo-aleatórios são determinísticos, portanto, uma pesquisa exaustiva revela os melhores arranjos. Encontrar as melhores disposições no sentido de erro absoluto da raiz média quadrada (RMS) é o mais fácil:

Erro absoluto do RMS em acordos de pseudo-sorteDetalhe
N1/6/N,N=2k1,k+1

12

{(0,±112),(±112,0),(±97,±56),(±56,±97)}112.00297611139371

91.5

[0,1,2,3,4,5,6,7,8,9,10,11]2π/121/125/12[0,5,10,3,8,1,6,11,4,9,2,7]2π/12

π/23π/3

Erro absoluto do RMS em arranjos pseudo-afortunados para uma grade retangular não quadrada com coeficiente de escala sqrt (3)
3

Notavelmente, para um oscilador de 8 bits com 30 pontos no círculo, o menor erro absoluto possível do RMS é -51,3 dB na grade quadrada e -62,5 dB na grade retangular não quadrada, onde o erro absoluto RMS mais baixo A sequência pseudolucky tem erro:

Erro na segunda sequência
3

Não tenho experiência prática com sinais de relógio de QI, portanto não tenho certeza do que as coisas importam. Com a geração do sinal de relógio, usando um conversor digital-analógico (DAC), eu suspeitaria que, a menos que sejam usados ​​bons acordos de pseudo-sorte, é melhor ter um piso de ruído branco mais baixo do que um espectro de ruído harmônico com maior picos provenientes de uma sequência repetida de erro de quantização (consulte Amostragem coerente e distribuição de ruído de quantização ). Esses picos espectrais, assim como o ruído branco, podem vazar por capacitância parasitária e ter efeitos indesejados em outras partes do sistema ou afetar a compatibilidade eletromagnética (EMC) do dispositivo. Como analogia, a tecnologia de espectro espalhado melhora a EMC, transformando picos espectrais em um nível de ruído de pico mais baixo.

1M100

// Compile with g++ -O3 -std-c++11

#include <stdio.h>
#include <math.h>
#include <complex>
#include <float.h>
#include <algorithm>

// N = circle size in quantization steps
const int maxN = 127;
// M = number of points on the circle
const int minM = 1; 
const int maxM = 100;
const int stepM = 1;
// k = floor(log2(N))
const int mink = 2;
const double IScale = 1; // 1 or larger please, sqrt(3) is very lucky, and 1 means a square grid

typedef std::complex<double> cplx;

struct Arrangement {
  int initialI;
  int initialQ;
  cplx fundamentalIQ;
  double fundamentalIQNorm;
  double cost;
};

int main() {
  cplx rotation[maxM+1];
  cplx fourierCoef[maxM+1];
  double invSlope[maxM+1];
  Arrangement bestArrangements[(maxM+1)*(int)(floor(log2(maxN))+1)];
  const double maxk(floor(log2(maxN)));
  const double IScaleInv = 1/IScale;
  for (int M = minM; M <= maxM; M++) {
    rotation[M] = cplx(cos(2*M_PI/M), sin(2*M_PI/M));
    invSlope[M] = tan(M_PI/2 - 2*M_PI/M)*IScaleInv;
    for (int k = 0; k <= maxk; k++) {
      bestArrangements[M+(maxM+1)*k].cost = DBL_MAX;
      bestArrangements[M+(maxM+1)*k].fundamentalIQNorm = 1;
    }
  }
  for (int M = minM; M <= maxM; M += stepM) {
    for (int m = 0; m < M; m++) {
      fourierCoef[m] = cplx(cos(2*M_PI*m/M), -sin(2*M_PI*m/M))/(double)M;
    }
    for (int initialQ = 0; initialQ <= maxN; initialQ++) {
      int initialI(IScale == 1? initialQ : 0);
      initialI = std::max(initialI, (int)floor(invSlope[M]*initialQ));
      if (initialQ == 0 && initialI == 0) {
    initialI = 1;
      }
      for (; initialI*(int_least64_t)initialI  <= (2*maxN + 1)*(int_least64_t)(2*maxN + 1)/4 - initialQ*(int_least64_t)initialQ; initialI++) {
    cplx IQ(initialI*IScale, initialQ);
    cplx roundedIQ(round(real(IQ)*IScaleInv)*IScale, round(imag(IQ)));
        cplx fundamentalIQ(roundedIQ*fourierCoef[0].real());
    for (int m = 1; m < M; m++) {
      IQ *= rotation[M];
      roundedIQ = cplx(round(real(IQ)*IScaleInv)*IScale, round(imag(IQ)));
          fundamentalIQ += roundedIQ*fourierCoef[m];
    }
    IQ = fundamentalIQ;
    roundedIQ = cplx(round(real(IQ)*IScaleInv)*IScale, round(imag(IQ)));
    double cost = norm(roundedIQ-IQ);
    for (int m = 1; m < M; m++) {
      IQ *= rotation[M];
      roundedIQ = cplx(round(real(IQ)*IScaleInv)*IScale, round(imag(IQ)));
      cost += norm(roundedIQ-IQ);
    }
    double fundamentalIQNorm = norm(fundamentalIQ);
    int k = std::max(floor(log2(initialI)), floor(log2(initialQ)));
    //  printf("(%d,%d)",k,initialI);
    if (cost*bestArrangements[M+(maxM+1)*k].fundamentalIQNorm < bestArrangements[M+(maxM+1)*k].cost*fundamentalIQNorm) {
      bestArrangements[M+(maxM+1)*k] = {initialI, initialQ, fundamentalIQ, fundamentalIQNorm, cost};
    }
      }
    }
  }
  printf("N");
  for (int k = mink; k <= maxk; k++) {
    printf(",%d-bit", k+2);
  }
  printf("\n");
  for (int M = minM; M <= maxM; M += stepM) {
    printf("%d", M);
    for (int k = mink; k <= maxk; k++) {
      printf(",%.13f", sqrt(bestArrangements[M+(maxM+1)*k].cost/bestArrangements[M+(maxM+1)*k].fundamentalIQNorm/M));
    }
    printf("\n");
  }

  printf("bits,M,N,fundamentalI,fundamentalQ,I,Q,rms\n");
  for (int M = minM; M <= maxM; M += stepM) {
    for (int k = mink; k <= maxk; k++) {
      printf("%d,%d,%.13f,%.13f,%.13f,%d,%d,%.13f\n", k+2, M, sqrt(bestArrangements[M+(maxM+1)*k].fundamentalIQNorm), real(bestArrangements[M+(maxM+1)*k].fundamentalIQ), imag(bestArrangements[M+(maxM+1)*k].fundamentalIQ), bestArrangements[M+(maxM+1)*k].initialI, bestArrangements[M+(maxM+1)*k].initialQ, sqrt(bestArrangements[M+(maxM+1)*k].cost/bestArrangements[M+(maxM+1)*k].fundamentalIQNorm/M));
    }
  }
}

Saída de amostra que descreve a primeira sequência de exemplo encontrada com IScale = 1:

bits,M,N,fundamentalI,fundamentalQ,I,Q,rms
8,12,112.0029761113937,112.0029761113937,0.0000000000000,112,0,0.0000265717171

Saída de amostra que descreve a segunda sequência de exemplo encontrada com IScale = sqrt(3):

8,30,200.2597744568315,199.1627304588310,20.9328464782995,115,21,0.0007529202390

Código de oitava para testar a primeira sequência de exemplo:

x = [112+0i, 97+56i, 56+97i, 0+112i, -56+97i, -97+56i, -112+0i, -97-56i, -56-97i, 0-112i, 56-97i, 97-56i];
abs(fft(x))
20*log10(abs(fft(x)(6)))-20*log10(abs(fft(x)(2)))

Código de oitava para testar a segunda sequência de exemplo:

x = exp(2*pi*i*(0:29)/30)*(199.1627304588310+20.9328464782995i);
y = real(x)/sqrt(3)+imag(x)*i;
z = (round(real(y))*sqrt(3)+round(imag(y))*i)/200.2597744568315;
#Error on IQ plane
star = z-exp(2*pi*i*(0:29)/30)*(199.1627304588310+20.9328464782995i)/200.2597744568315;
scatter(real(star), imag(star));
#Magnitude of discrete Fourier transform
scatter((0:length(z)-1)*2*pi/30, 20*log10(abs(fft(z))/abs(fft(z)(2)))); ylim([-120, 0]);
#RMS error:
10*log10((sum(fft(z).*conj(fft(z)))-(fft(z)(2).*conj(fft(z)(2))))/(fft(z)(2).*conj(fft(z)(2))))

Muito agradável. Cada eixo I e Q em magnitude é bem aproximado como uniforme; Gostaria de saber se estamos vendo uma convolução de duas distribuições uniformes - você já tentou tirar um histograma do seu resultado? Eu assumiria também com esta lógica não verificada que estou usando que a distribuição de amplitude para o sinal complexo também pode ser triangular? Você tem alguma idéia disso, o que pode acontecer quando o relógio de amostragem é proporcional?
Dan Boschen 9/04

No entanto, atualizarei a pergunta para não sugerir que seja uniforme!
Dan Boschen

veja minha atualização - eu simulei e confirmei minha suspeita com distribuições triangulares. Parece-me que a distribuição varia entre uniforme e triangular, dependendo do ângulo (veja minha atualização para explicação); portanto, se nosso ângulo é distribuído uniformemente, devemos terminar com uma distribuição arredondada em geral.
precisa saber é o seguinte

11
@OlloNiemitalo Very cool. Você tem mais informações sobre o que aconteceria (em particular os componentes de erro de fase) se limitarmos os locais no círculo unitário a uma amostragem proporcional; significando um múltiplo fixo da taxa de rotação de um único tom complexo? Certamente, à medida que a taxa de amostragem aumenta, isso se aproxima do que você mostrou. Mas como podemos descrever matematicamente os componentes da fase versus essa taxa quando limitamos as opções a serem proporcionais?
Dan Boschen

11
Obrigado por mastigar isso e dar mais orientações sobre onde a resposta pode estar. Observe que se a razão for um número inteiro múltiplo uniforme, o padrão se repetirá duas vezes por ciclo e, em seguida, se multiplica mais rapidamente para múltiplos que são divisíveis por uma potência maior de 2's. Esse padrão, conforme determinado da teoria dos números modulo é onde a resposta pode ser de fato
Dan Boschen
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.