Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Análisis de distorsión armónica

Este ejemplo muestra cómo analizar la distorsión armónica de un sistema débilmente no lineal en presencia de ruido.

Introducción

En este ejemplo exploraremos la salida de un modelo simplificado de un amplificador que tiene el ruido acoplado a la señal de entrada y exhibe la no linealidad. Exploraremos cómo la atenuación en la entrada puede reducir la distorsión armónica. También daremos un ejemplo de cómo se corrige matemáticamente la distorsión en la salida del amplificador.

Visualización de los efectos de la no linealidad

Una manera conveniente de ver el efecto de la no linealidad del amplificador es ver el periodograma de su salida cuando se estimula con una sinusoide. La amplitud de la sinusoide se establece en el voltaje máximo admisible del amplificador. (2 VPK)

En este ejemplo vamos a fuente de una sinusoide de 2 kHz para una duración de 50ms.

VmaxPk = 2;       % Maximum operating voltage Fi = 2000;        % Sinusoidal frequency of 2 kHz Fs = 44.1e3;      % Sample rate of 44.1kHz Tstop = 50e-3;    % Duration of sinusoid t = 0:1/Fs:Tstop; % Input time vector  % Use the maximum allowable voltage of the amplifier inputVmax = VmaxPk*sin(2*pi*Fi*t); outputVmax = helperHarmonicDistortionAmplifier(inputVmax);

Visualice una región ampliada de la sinusoide de salida. Tenga en cuenta que las imperfecciones de nuestro amplificador son difíciles de ver visualmente cuando se trazan con respecto al tiempo.

plot(t, outputVmax) xlabel('Time') ylabel('Output Voltage') axis([0 5e-3 -2.5 2.5]) title('Amplifier output')

Ahora vamos a ver el periodograma de nuestra salida del amplificador.

helperPlotPeriodogram(outputVmax, Fs, 'power','annotate');

Tenga en cuenta que en lugar de ver solo la sinusoide de 2 kHz que coloqué en la entrada, vemos otras sinusoides a 4 kHz, 6 kHz, 8 kHz y 10 kHz. Estas sinusoides son múltiplos de la frecuencia fundamental de 2 kHz y se deben a la no linealidad del amplificador.

También vemos una banda relativamente plana de energía de ruido.

Cuantificando la distorsión no lineal

Examinemos algunas métricas de distorsión comunes para fines de comparación

Nuestro periodograma muestra algunos armónicos muy bien definidos de la señal fundamental. Esto sugiere que medimos la distorsión armónica total de la señal de entrada que devuelve la relación de potencia de todo el contenido armónico a la señal fundamental.

thd(outputVmax, Fs)

ans = -60.3888 

Observe que el tercer y más grande armónico es aproximadamente 60 dB abajo de lo fundamental. Aquí es donde se produce la mayor parte de la distorsión.

También podemos obtener una estimación del ruido total presente en nuestra entrada. Para ello, llamamos SNR que devuelve la relación de la potencia de lo fundamental a la potencia de todo el contenido no armónico.

snr(outputVmax, Fs)

ans = 130.9300 

Otra métrica útil para calcular es SINAD. Esto calcula la relación de la potencia a todos los demás armónicos y el contenido de ruido en la señal.

sinad(outputVmax, Fs)

ans = 60.3888 

El THD, el SNR, y el SINAD eran-60 dB, 131 dB y 60 dB, respectivamente. Dado que la magnitud de THD es aproximadamente igual a SINAD, podemos atribuir que la mayor parte de la distorsión se debe a la distorsión armónica.

Si inspeccionamos el periodograma, podemos notar que el tercer armónico domina la distorsión de la salida.

Atenuación de entrada para reducir la distorsión armónica

La mayoría de los circuitos analógicos que realizan la amplificación tiene un intercambio inherente entre la distorsión armónica y la potencia de ruido. En nuestro ejemplo, nuestro amplificador tiene una potencia de ruido relativamente baja en comparación con la distorsión armónica. Esto lo hace adecuado para la detección de señales de baja potencia. Si nuestra entrada puede ser atenuada para entrar en esta región de baja potencia, podemos recuperar parte de la distorsión armónica.

Vamos a repetir las mediciones bajando la tensión de entrada por un factor de dos.

inputVhalf = (VmaxPk/2) * sin(2*pi*Fi*t); outputVhalf = helperHarmonicDistortionAmplifier(inputVhalf); helperPlotPeriodogram(outputVhalf, Fs, 'power','annotate');

Vamos a rehacer nuestras métricas de nuevo, esta vez midiendo el efecto de bajar el voltaje de entrada.

thdVhalf = thd(outputVhalf, Fs)
thdVhalf = -72.0676 
snrVhalf = snr(outputVhalf, Fs)
snrVhalf = 124.8767 
sinadVhalf = sinad(outputVhalf, Fs)
sinadVhalf = 72.0676 

Observe que simplemente atenuar el nivel de potencia de entrada en 6 dB reduce el contenido armónico. El SINAD y THD mejoraron de ~ 60 dB a ~ 72 dB. Esto llegó a expensas de bajar el SNR de 131 dB a 125 dB.

SNR THD y SINAD como función de atenuación de entrada

¿Puede la atenuación adicional mejorar nuestro rendimiento general de distorsión? Vamos a trazar THD, SNR y SINAD como una función de atenuación de entrada, barriendo el atenuador de entrada de 1 a 30 dB.

% Allocate a table with 30 entries nReadings = 30; distortionTable = zeros(nReadings, 3);  % Compute the THD, SNR and SINAD for each of the attenuation settings for i = 1:nReadings   inputVbestAtten = db2mag(-i) * VmaxPk * sin(2*pi*Fi*t);   outputVbestAtten = helperHarmonicDistortionAmplifier(inputVbestAtten);   distortionTable(i,:) = [abs(thd(outputVbestAtten, Fs))                           snr(outputVbestAtten, Fs)                           sinad(outputVbestAtten, Fs)]; end  % Plot results plot(distortionTable) xlabel('Input Attenuation (dB)') ylabel('Dynamic Range (dB)') legend('|THD|','SNR','SINAD','Location','best') title('Distortion Metrics vs. Input Attenuation')

El gráfico muestra el rango dinámico utilizable correspondiente a cada métrica. El de THD corresponde a la gama que está libre de armónicos.magnitude Del mismo modo, el SNR corresponde al rango dinámico de que no se ve afectado por el ruido; SINAD corresponde al rango dinámico total que está libre de distorsión.

Como se puede ver en el gráfico, el SNR se degrada a medida que aumenta la atenuación de potencia de entrada. Esto es porque cuando usted atenúan la señal, solamente la señal se atenúan, pero el suelo del ruido del amplificador permanece lo mismo.

También tenga en cuenta que la magnitud de la distorsión armónica total mejora constantemente hasta que intersecta la curva SNR, después de lo cual la medición se vuelve inestable. Esto sucede cuando los armónicos han "desaparecido" bajo el ruido del amplificador.

Una elección práctica de la atenuación del amplificador para el amplificador sería de 26 dB (produciendo un SINAD de 103 dB). Esto sería un equilibrio razonable entre la distorsión armónica y el ruido.

% Search the table for the largest SINAD reading [maxSINAD, iAtten] = max(distortionTable(:,3)); fprintf('Max SINAD (%.1f dB) occurs at %.f dB attenuation\n', ...   maxSINAD, iAtten)
Max SINAD (103.7 dB) occurs at 26 dB attenuation 

Vamos a trazar el periodograma cuando el atenuador se establece en 26 dB.

inputVbestAtten = db2mag(-iAtten) * VmaxPk * sin(2*pi*Fi*t); outputVbestAtten = helperHarmonicDistortionAmplifier(inputVbestAtten); helperPlotPeriodogram(outputVbestAtten, Fs, 'power','annotate','shownoise');

Aquí hemos graficado Adicionalmente el nivel de potencia de ruido que se propaga a través del espectro.total Tenga en cuenta que en este ajuste de atenuación, el segundo y tercer armónico siguen siendo visibles en el espectro, pero también considerablemente menor que la potencia de ruido total. Si tuviéramos que tener una aplicación que utiliza un ancho de banda más pequeño del espectro disponible nos beneficiaría de aumentar aún más la atenuación para reducir el contenido armónico.

Post-procesamiento para eliminar la distorsión

Ocasionalmente podemos corregir algunas de las no linealidades del amplificador. Si la salida del amplificador está digitalizada, podemos recuperar un rango dinámico más útil mediante el post-procesamiento digital de la salida capturada y corrigiendo para la no linealidad matemáticamente.

En nuestro caso, estimularemos la entrada con una rampa lineal y ajustaremos un polinomio de tercer orden que mejor se adapte a la entrada.

inputRamp = -2:0.00001:2; outputRamp = helperHarmonicDistortionAmplifier(inputRamp); polyCoeff = polyfit(outputRamp,inputRamp,3)
polyCoeff = 1×4

    0.0010   -0.0002    1.0000   -0.0250

Ahora que tenemos los coeficientes podemos realizar después de la corrección en la salida y comparar lado a lado con nuestra salida original sin corregir

correctedOutputVmax = polyval(polyCoeff, outputVmax);  helperPlotPeriodogram([outputVmax; correctedOutputVmax],Fs,'power'); subplot(2,1,1) title('Uncorrected') subplot(2,1,2) title('Polynomial Corrected')

Tenga en cuenta que el segundo y tercer armónicos se reducen significativamente cuando se utiliza la corrección polinómica.

Repetimos las mediciones de nuevo con la salida corregida.

thdCorrectedVmax = thd(correctedOutputVmax, Fs)
thdCorrectedVmax = -99.6194 
snrCorrectedVmax = snr(correctedOutputVmax, Fs)
snrCorrectedVmax = 130.7491 
sinadCorrectedVmax = sinad(correctedOutputVmax, Fs)
sinadCorrectedVmax = 99.6162 

Observe que nuestro SINAD (y THD) bajó de 60 dB a 99 dB, preservando al mismo tiempo nuestra SNR original de 131 dB.

Combinando técnicas

Podemos combinar la atenuación con la evaluación polinómica para encontrar la tensión de operación ideal que minimiza el SINAD general de nuestro sistema.

subplot(1,1,1) % Add three more columns to our distortion table distortionTable = [distortionTable zeros(nReadings,3)]; for i = 1:nReadings   inputVreduced = db2mag(-i) * VmaxPk * sin(2*pi*Fi*t);   outputVreduced = helperHarmonicDistortionAmplifier(inputVreduced);   correctedOutput = polyval(polyCoeff, outputVreduced);   distortionTable(i,4:6) = [abs(thd(correctedOutput, Fs))                             snr(correctedOutput, Fs)                             sinad(correctedOutput, Fs)]; end  h = plot(distortionTable)
h =    6x1 Line array:    Line   Line   Line   Line   Line   Line  
xlabel('Input attenuation (dB)') ylabel('Dynamic Range (dB)') for i = 1:3   h(i+3).Color = h(i).Color;   h(i+3).LineStyle = '--' ; end legend('|THD| (uncorrected)','SNR (uncorrected)','SINAD (uncorrected)', ...  '|THD| (corrected)','SNR (corrected)','SINAD (corrected)','Location','best') title('Distortion Metrics vs. Input Attenuation and Polynomial Correction');

Aquí, hemos trazado las tres métricas al mismo lado tanto para el amplificador con corrección de polinomio como para el no corregido.

Como se puede ver en el gráfico, THD ha mejorado considerablemente, mientras que SNR no se vio afectada por la corrección polinómica. Esto es de esperar ya que la corrección polinómica sólo afecta a la distorsión armónica y no a la distorsión del ruido.

Vamos a mostrar el máximo SINAD posible cuando se corrige por el polinomio

[maxSINADcorrected, iAttenCorr] = max(distortionTable(:,6)); fprintf('Corrected:    Max SINAD (%.1f dB) at %.f dB attenuation\n', ...   maxSINADcorrected, iAttenCorr)
Corrected:    Max SINAD (109.7 dB) at 17 dB attenuation 

Una buena elección de atenuación del amplificador para el amplificador con corrección polinómica sería de 20 dB (produciendo un SINAD de 109,8 dB).

% Recompute amplifier at maximum SINAD attenuation setting with polynomial inputVreduced = db2mag(-iAttenCorr) * VmaxPk * sin(2*pi*Fi*t); outputVreduced = helperHarmonicDistortionAmplifier(inputVreduced); correctedOutputVbestAtten = polyval(polyCoeff, outputVreduced);  helperPlotPeriodogram(correctedOutputVbestAtten, Fs, 'power','annotate','shownoise'); title('Periodogram of attenuated and polynomial corrected amplifier')

Tenga en cuenta que todo menos el segundo armónico desapareció por completo con la corrección polinómica bajo el ajuste de atenuación ideal. Como se señaló antes de la segunda armónica aparece justo debajo del nivel de potencia de la superficie total noisefloor. Esto proporciona un equilibrio razonable en las aplicaciones que utilizan el ancho de banda completo del amplificador.

Resumen

Hemos demostrado cómo la corrección polinómica se puede aplicar a la salida de un amplificador experimentando distorsión y cómo elegir un valor de atenuación razonable para reducir los efectos de la distorsión armónica.