Ruido de cuantización para muestreo coherente: ¿ruido de fase?

9

Actualización: vea los pensamientos adicionales al final de esta publicación.


En condiciones de muestreo generales no limitadas por lo que se describe a continuación (señal no correlacionada con el reloj de muestreo), el ruido de cuantificación a menudo se estima como una distribución uniforme sobre un nivel de cuantificación. Cuando dos ADC se combinan con las rutas I y Q para crear el muestreo de una señal compleja, el ruido de cuantificación tiene componentes de ruido de amplitud y fase como se simula a continuación. Como se muestra, este ruido tiene una distribución triangular cuando los componentes I y Q contribuyen igualmente a la amplitud y la fase, como cuando una señal está en un ángulo de 45 °, y uniforme cuando la señal está en el eje. Esto se espera ya que el ruido de cuantificación para cada I y Q no está correlacionado, por lo que las distribuciones se convolucionarán cuando ambos contribuyan al resultado de salida.

La pregunta que se hace es si esta distribución del ruido de fase cambia significativamente para los casos de muestreo coherente (supongamos que el reloj de muestreo tiene un ruido de fase que es muy superior, por lo que no es un factor). Específicamente estoy tratando de entender si el muestreo coherente reducirá significativamente el ruido de fase relacionado con la cuantificación. Esto sería directamente aplicable a la generación de señal de reloj, donde la coherencia se mantendría fácilmente.

Considere tanto las señales reales (un ADC) como las señales complejas (dos ADC; una para I y una para Q juntas que describen una sola muestra compleja). En el caso de señales reales, la entrada es una onda sinusoidal a escala completa y el término de fase se deriva de la señal analítica; La fluctuación de fase relacionada con los cambios en el cruce por cero de un tono sinusoidal sería un ejemplo del ruido de fase resultante para una señal real. Para el caso de señales complejas, la entrada es una escala completa , donde los componentes reales e imaginarios serían ondas sinusoidales a escala completa.Aejωt

Esto está relacionado con esta pregunta donde el muestreo coherente está bien descrito, pero el ruido de fase específicamente no fue mencionado:

Muestreo coherente y la distribución del ruido de cuantificación

Para describir los componentes de ruido AM y PM inducidos más claramente, he agregado el siguiente gráfico a continuación para el caso de cuantificación compleja que muestra un vector complejo en tiempo continuo en un instante de muestreo dado, y la muestra cuantificada asociada como un punto rojo, suponiendo lineal Distribución uniforme de los niveles de cuantificación de las porciones real e imaginaria de la señal.

ingrese la descripción de la imagen aquí

Acercarse a la ubicación donde se produce la cuantización en el gráfico anterior para ilustrar el error de amplitud inducida y el error de fase:

ingrese la descripción de la imagen aquí

Por lo tanto, dada una señal arbitraria

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

La señal cuantificada es el punto de distancia más cercano dado por

sk=ik+jqk

Donde y q k representan los niveles cuantificados de I y Q, cada uno mapeado de acuerdo conikqk

Q{x}=ΔxΔ+12

Donde representa la función de piso y Δ representa un nivel de cuantificación discreto.()Δ

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

|s(tk)||sk|tks(t)sk

arg{s(tk)}arg{sk}=arg{s(tk)(sk)}

La pregunta para esta publicación es ¿cuál es la naturaleza del componente de fase cuando el reloj de muestreo es acorde con (un múltiplo entero de) la señal de entrada?

Para ayudar, aquí hay algunas distribuciones simuladas de los errores de amplitud y fase para el caso de cuantificación compleja con cuantificación de 6 bits en I y Q. Para estas simulaciones se supone que la "verdad" real de la señal es igualmente probable en cualquier lugar de una cuantización. sector definido como la cuadrícula que se muestra en el diagrama anterior. Observe que cuando la señal se encuentra en uno de los cuadrantes (ya sea todo I o todo Q), la distribución es uniforme como se esperaba en el caso de ADC único con señales reales. Pero cuando la señal tiene un ángulo de 45 °, la distribución es triangular. Esto tiene sentido ya que en estos casos la señal tiene contribuciones I y Q iguales, cada una de las cuales es distribuciones uniformes no correlacionadas; entonces las dos distribuciones implican ser triangulares.

45 grados con cuantización

Zoom de 45 grados con cuantización

histograma de ángulo

histograma de magnitud

Después de rotar el vector de señal a 0 °, los histogramas de magnitud y ángulo son mucho más uniformes como se esperaba:

Ángulo de 0 grados con cuantización

histograma de ángulo a 0 °

histograma de magnitud a 0 °


Actualización: dado que todavía necesitamos una respuesta a la pregunta específica (la respuesta de Olli a continuación ofreció una buena aclaración sobre las características del ruido que condujo a mi actualización de las densidades de ruido triangular y uniforme, pero las características del ruido de fase bajo las condiciones de muestreo coherentes aún son difíciles de alcanzar), ofrezco los siguientes pensamientos que pueden generar una respuesta real o un mayor progreso (tenga en cuenta que estos son muchos pensamientos posiblemente equivocados pero con el interés de llegar a la respuesta que aún no tengo):

Tenga en cuenta que en condiciones de muestreo coherentes, la frecuencia de muestreo es un múltiplo entero de la frecuencia de entrada (y también la fase bloqueada). Esto significa que siempre habrá un número entero de muestras a medida que giramos una vez a través del plano complejo para una señal compleja y muestreo, o un número entero de muestras de un ciclo de una sinusoide para una señal real y muestreo (ADC simple).

Y como se describe, estamos asumiendo el caso cuando el reloj de muestreo en sí mismo es muy superior, por lo que no se considera una contribución. Por lo tanto, las muestras aterrizarán exactamente en la misma ubicación, siempre.

Considerando el caso de la señal real, si solo estuviéramos interesados ​​en los cruces por cero para determinar el ruido de fase, el resultado del muestreo coherente solo sería un cambio fijo pero constante en el retraso (aunque los bordes ascendente y descendente pueden tener diferentes retrasos cuando la coherencia es un entero impar). Claramente, en el caso de muestreo complejo, nos preocupa el ruido de fase en cada muestra, y sospecho que esto sería lo mismo para el caso real también (mi sospecha es que el retraso de una muestra en cualquier momento desde la "verdad" sería el componente de ruido de fase pero luego me confundo si estoy contando dos veces cuál es también la diferencia de amplitud ...) Si tengo tiempo simularé esto ya que toda la distorsión se mostrará en armónicos enteros de la señal de entrada dado el patrón repetitivo sobre uno ciclo, y la prueba de fase versus amplitud sería la fase relativa de los armónicos versus la fundamental; lo que sería interesante ver a través de la simulación o el cálculo es si estos armónicos (que para una señal real tendrían contrapartidas conjugadas complejas) suman en cuadratura con el fundamental o en fase, y así se muestra que es todo ruido de fase, todo ruido de amplitud o una combinación de ambos. (La diferencia entre un número par de muestras e impar posiblemente puede afectar esto).

Para el caso del complejo, el gráfico de Olli que se realizó con un número proporcional de muestras, puede agregar más información si muestra la ubicación de la muestra en "verdad" que está asociada con cada muestra cuantificada mostrada. Nuevamente veo la posibilidad de una diferencia interesante si hay un número par o impar de muestras (su gráfico fue par y observo la simetría que resulta, pero no puedo ver más allá de eso lo que puede hacer para el ruido de fase versus amplitud). Sin embargo, lo que me parece claro es que los componentes de ruido en casos reales y complejos solo existirán en los armónicos enteros de la frecuencia fundamental cuando el muestreo sea coherente. Entonces, aunque el ruido de fase aún puede existir como sospecho, su ubicación en armónicos enteros es mucho más propicio para ser eliminado por el filtrado posterior.

(Nota: esto es aplicable a la generación de señales de reloj de referencia de alta pureza espectral).

Dan Boschen
fuente
2
Ojalá pudieras ser más matemáticamente explícito sobre cuál es la pregunta real.
robert bristow-johnson
fs=Nfsigfsfsig
Estoy de acuerdo con rbj. ¿Qué quieres decir con distribución fase-amplitud? Yo creo una matemática. El modelo sobre el problema ayudará a resolverlo. Además, puede ser más específico, ¿cómo descompondría el ruido de cuantificación en amplitud y fase?
Maximilian Matthé
1
¿Esto se refiere a señales arbitrarias como se alude en el texto o específicamente señales sinusoidales como lo implican las descripciones matemáticas? El caso se simplifica enormemente si solo se consideran señales sinusoidales, pero esto puede no reflejar el comportamiento de las señales del mundo real. En el caso proporcional para señales sinusoidales, el error de cuantificación es periódico y se traduce en un error de fase periódica. Ese tipo de correlación no aparecería en un histograma, pero probablemente sea importante en términos de describir la "naturaleza del componente de fase" (con esto quiere decir el error de fase ¿verdad?).
saltos
1
También actualicé la pregunta para aclarar que es para la generación de señal de reloj, en caso de que desee mantener su último párrafo sincronizado (sugirió que era para la medición).
Dan Boschen

Respuestas:

5

Tengo una duda sobre (Editar: esto se eliminó más tarde de la pregunta):

Se puede suponer razonablemente que la distribución de estos componentes de ruido AM y PM es uniforme siempre que la señal de entrada no esté correlacionada con el reloj de muestreo

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

1/NN=5

Traza de señal y su cuantización.
N=5asignal(t)+(1a)quantized_signal(t)a=[15,25,35,45].

El error en la fase debido al error de cuantificación es:

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π)+π

Restar fases envueltas es arriesgado, pero funciona en este caso.

Error de fase
phase_error(t)N=5

tphase_error(t),phase_error(t)

NN,Nlas distribuciones de los errores I y Q son uniformes, y los errores de fase y magnitud son números pseudoaleatorios provenientes de distribuciones que dependen de la fase de la señal. La dependencia de la fase está ahí porque la cuadrícula de cuantificación rectangular tiene una orientación.

N,arcsinααα+π/2

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

La rotación de estas coordenadas o la proyección equivalente de ellas en los ejes de error de fase proporcional y de error de magnitud proporcional proporciona la misma función de densidad de probabilidad lineal plana por partes con nodos:

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

Nodos del PDF
αα{π,π/2,0,π/2,π}α{3π/4,π/4,π/4,3π/4}N2/22/2arcsin

En las fases intermedias, el PDF se ve, por ejemplo, así:

PDF intermedio
α=π/8.

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

Puede haber algunas combinaciones "pseudolucky" de fase inicial y una relación numérica racional de la frecuencia de la sinusoide compleja y la frecuencia de muestreo que dan solo un pequeño error para todas las muestras en la secuencia repetitiva. Debido a las simetrías de los errores vistos en la Fig. 1, en el sentido de error absoluto máximo esas frecuencias tienen una ventaja para la cual el número de puntos visitados en el círculo es un múltiplo de 2, porque se necesita suerte (error bajo) en solo la mitad de los puntos. El error en el resto de los puntos son duplicados de lo que son en los primeros, con volteretas. Al menos los múltiplos de 6, 4 y 12 tienen una ventaja aún mayor. No estoy seguro de cuál es la regla exacta aquí, porque no parece ser todo acerca de ser un múltiplo de algo. Eso' s algo sobre las simetrías de cuadrícula combinadas con el módulo aritmético. Sin embargo, los errores pseudoaleatorios son deterministas, por lo que una búsqueda exhaustiva revela los mejores arreglos. Encontrar la mejor disposición en el sentido de error absoluto de raíz cuadrática media (RMS) es lo más fácil:

Error absoluto de RMS en arreglos de pseudoluckyDetalle
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

Error absoluto de RMS en arreglos de pseudolucky para una cuadrícula rectangular no cuadrada con coeficiente de escala sqrt (3)
3

Notablemente, para un oscilador de 8 bits con 30 puntos en el círculo, el error absoluto RMS más pequeño posible es -51.3 dB en la cuadrícula cuadrada y -62.5 dB en la cuadrícula rectangular no cuadrada, donde el error absoluto RMS más bajo La secuencia de pseudolucky tiene error:

Error en segunda secuencia
3

No tengo experiencia práctica con las señales de reloj IQ, así que no estoy seguro de qué cosas importan. Con la generación de señal de reloj, usando un convertidor digital a analógico (DAC), sospecho que a menos que se usen buenos arreglos de pseudolucky, es mejor tener un piso de ruido blanco más bajo que tener un espectro de ruido armónico con un espectro más alto picos que provienen de una secuencia repetitiva de error de cuantización (ver Muestreo coherente y distribución del ruido de cuantización ). Estos picos espectrales, al igual que el ruido blanco, podrían filtrarse a través de la capacitancia parásita y tener efectos no deseados en otras partes del sistema o afectar la compatibilidad electromagnética (EMC) del dispositivo. Como analogía, la tecnología de espectro expandido mejora la EMC al convertir los picos espectrales en un piso de ruido de pico más bajo.

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));
    }
  }
}

Ejemplo de salida que describe la primera secuencia de ejemplo encontrada con IScale = 1:

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

Ejemplo de salida que describe la segunda secuencia de ejemplo encontrada con IScale = sqrt(3):

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

Código de octava para probar la primera secuencia de ejemplo:

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 octava para probar la segunda secuencia de ejemplo:

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))))
Olli Niemitalo
fuente
Muy agradable. Cada eje I y Q en magnitud está bien aproximado como uniforme; Me pregunto si estamos viendo una convolución de dos distribuciones uniformes. ¿Has intentado tomar un histograma de tu resultado? ¿Supongo también con esta lógica no verificada que estoy usando que la distribución de amplitud para la señal compleja también puede ser triangular? ¿Tiene alguna idea de lo que puede suceder cuando el reloj de muestreo es acorde?
Dan Boschen
Sin embargo, actualizaré la pregunta para no sugerir que sea uniforme.
Dan Boschen
vea mi actualización: simulé y confirme mi sospecha con distribuciones triangulares. Me parece que la distribución variará entre uniforme y triangular dependiendo del ángulo (vea mi actualización para obtener una explicación); así que si nuestro ángulo está distribuido uniformemente, debemos terminar con una distribución redondeada en general.
Dan Boschen
1
@OlloNiemitalo Muy guay. ¿Tiene más información sobre lo que sucedería (en particular con los componentes de error de fase) si limitamos las ubicaciones en el círculo unitario para que sean muestras proporcionales; ¿Qué significa un múltiplo fijo de la velocidad de rotación de un solo tono complejo? Ciertamente, a medida que aumenta la frecuencia de muestreo, esto se acercaría a lo que ha mostrado. Pero, ¿cómo podríamos describir matemáticamente los componentes de fase versus esa tasa cuando limitamos las opciones para que sean proporcionales?
Dan Boschen el
1
Gracias por masticar esto y dar más instrucciones sobre dónde puede estar la respuesta. Observe que si la relación es un múltiplo entero par, el patrón se repetirá dos veces por ciclo, y luego se multiplica más rápido por múltiplos que son divisibles por una mayor potencia de 2. Ese patrón, según lo determinado por la teoría de los números de módulo, es donde la respuesta puede estar
Dan Boschen,