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 la 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 ruido acoplado a la señal de entrada y exhibe 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 corregir 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 un sinusoides. La amplitud del sinusoides se establece en la tensión máxima permitida del amplificador. (2 Vpk)

En este ejemplo obtendremos un sinusoides de 2 kHz para una duración de 50 ms.

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

Ver una región ampliada del sinusoides de salida. Tenga en cuenta que las imperfecciones de nuestro amplificador son difíciles de ver visualmente cuando se trazacon 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 de amplificador.

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

Tenga en cuenta que en lugar de ver sólo el sinusoides de 2 kHz que colocamos en la entrada, vemos otros sinusoides a 4 kHz, 6 kHz, 8 kHz y 10 kHz. Estos 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 potencia de ruido.

Cuantificación de la distorsión no lineal

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

Nuestro periodo 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 de unos 60 dB de la fundamental. Aquí es donde se está produciendo 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 con el resto del contenido armónico y de ruido en la señal.

sinad(outputVmax, Fs)

ans = 60.3888 

El THD, SNR y SINAD fueron -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 amplificación tienen un equilibrio 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 detectar 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 reduciendo el voltaje 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 el THD mejoraron de 60 dB a 72 dB. Esto vino a expensas de bajar el SNR de 131 dB a 125 dB.

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

¿Puede una mayor atenuación 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.Magnitud Semejantemente, 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 la potencia de entrada. Esto se debe a que cuando se atenúa la señal, sólo se atenúa la señal, pero el suelo de ruido del amplificador permanece igual.

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

Una práctica elección de atenuación del amplificador para el amplificador sería de 26 dB (con un SINAD de 103 dB). Esto sería un equilibrio razonable entre la distorsión armónica y la distorsión del 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 trazado además el nivel de potencia de ruido que se extiende 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 menos que la potencia de ruido total. Si tuviéramos una aplicación que utilice un ancho de banda menor del espectro disponible, nos beneficiaríamos de aumentar aún más la atenuación para reducir el contenido armónico.

Postprocesamiento para eliminar la distorsión

Ocasionalmente podemos corregir parte de la no linealidad del amplificador. Si la salida del amplificador está digitalizada, podemos recuperar un rango dinámico más útil posprocesando digitalmente la salida capturada y corrigiendo la no linealidad matemáticamente.

En nuestro caso, estimulamos la entrada con una rampa lineal y encajamos en 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 la corrección posterior a la salida y comparar en paralelo con nuestra salida original no corregida

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ómial.

Vamos a repetir 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 nuestro SNR original de 131 dB.

Combinación de técnicas

Podemos combinar la atenuación con la evaluación polinómica para encontrar el voltaje de funcionamiento ideal que minimice 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 junto al amplificador corregido y no corregido.

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

Mostremos 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 corregido polinómico sería 20dB (con 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 todos menos el segundo armónico desapareció por completo con la corrección de polinomio bajo el ajuste de atenuación ideal. Como se señaló antes de la segunda armónica aparece justo debajo del nivel de potencia del suelo de ruido total. 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.