exponenta event banner

Анализ гармонических искажений

В этом примере показано, как анализировать гармонические искажения слабо нелинейной системы при наличии шума.

Введение

В этом примере мы рассмотрим выход упрощенной модели усилителя, который имеет шум, связанный с входным сигналом, и проявляет нелинейность. Рассмотрим, как затухание на входе может уменьшить гармонические искажения. Мы также дадим пример того, как математически исправить для искажения в продукции усилителя.

Просмотр эффектов нелинейности

Удобным способом просмотра влияния нелинейности усилителя является просмотр периодограммы его выхода при стимулировании синусоидой. Амплитуда синусоиды устанавливается на максимально допустимое напряжение усилителя. (2 Vpk)

В этом примере мы будем получать синусоиду 2 кГц в течение 50 мс.

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

Просмотр увеличенной области выходной синусоиды. Заметим, что дефекты нашего усилителя трудно увидеть визуально, когда они нанесены на график относительно времени.

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

Figure contains an axes. The axes with title Amplifier output contains an object of type line.

Теперь рассмотрим периодограмму выхода нашего усилителя.

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

Figure contains an axes. The axes with title Periodogram Power Spectrum Estimate contains 3 objects of type line, text.

Обратите внимание, что вместо того, чтобы видеть только 2 кГц синусоиды, которые мы разместили на входе, мы видим другие синусоиды на 4 кГц, 6 кГц, 8 кГц и 10 кГц. Эти синусоиды кратны основной частоте 2 кГц и обусловлены нелинейностью усилителя.

Мы также видим относительно плоскую полосу мощности шума.

Количественное определение нелинейных искажений

Рассмотрим некоторые общие метрики искажений для сравнения

Наша периодограмма показывает некоторые очень четко определенные гармоники фундаментального сигнала. Это предполагает измерение полного гармонического искажения входного сигнала, которое возвращает отношение мощности всего гармонического содержания к основному сигналу.

thd(outputVmax, Fs)

Figure contains an axes. The axes with title THD: -60.39 dB contains 16 objects of type line, text. These objects represent Fundamental, Harmonics, DC and Noise (excluded).

ans = -60.3888

Обратите внимание, что третья и самая большая гармоника примерно на 60 дБ ниже фундаментальной. Именно здесь происходит большая часть искажений.

Мы также можем получить оценку общего шума, присутствующего на нашем входе. Для этого мы называем SNR, который возвращает отношение мощности основного к мощности всего негармонического содержания.

snr(outputVmax, Fs)

Figure contains an axes. The axes with title SNR: 130.93 dB contains 17 objects of type line, text. These objects represent Fundamental, Noise, DC and Harmonics (excluded).

ans = 130.9300

Другой полезной метрикой для вычисления является SINAD. Это вычисляет отношение мощности ко всем другим гармоническим и шумовым содержимым в сигнале.

sinad(outputVmax, Fs)

Figure contains an axes. The axes with title SINAD: 60.39 dB contains 7 objects of type line, text. These objects represent Fundamental, Noise and Distortion, DC (excluded).

ans = 60.3888

Значения THD, SNR и SINAD составляли соответственно -60 дБ, 131 дБ и 60 дБ. Поскольку величина THD примерно равна SINAD, можно отнести, что большая часть искажения обусловлена гармоническим искажением.

Если мы проверим периодограмму, мы можем заметить, что третья гармоника доминирует над искажением выходного сигнала.

Ослабление входного сигнала для уменьшения гармонических искажений

Большинство аналоговых схем, выполняющих усиление, имеет собственный компромисс между гармоническими искажениями и мощностью шума. В нашем примере наш усилитель имеет относительно низкую мощность шума по сравнению с гармоническими искажениями. Это делает его пригодным для обнаружения маломощных сигналов. Если наш вход может быть ослаблен для входа в эту область низкой мощности, мы можем восстановить некоторые гармонические искажения.

Повторим измерения, снизив входное напряжение в два раза.

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

Figure contains an axes. The axes with title Periodogram Power Spectrum Estimate contains 3 objects of type line, text.

Давайте снова повторим наши метрики, на этот раз измеряя эффект снижения входного напряжения.

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

Обратите внимание, что простое ослабление входного уровня мощности на 6 дБ снижает содержание гармоник. SINAD и THD улучшились с ~ 60 дБ до ~ 72 дБ. Это произошло за счет снижения SNR с 131 дБ до 125 дБ.

SNR THD и SINAD как функция ослабления входного сигнала

Может ли дальнейшее ослабление улучшить наши общие характеристики искажения? Давайте построим график THD, SNR и SINAD как функции ослабления входного сигнала, увеличивая входной аттенюатор от 1 до 30 дБ.

% 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')

Figure contains an axes. The axes with title Distortion Metrics vs. Input Attenuation contains 3 objects of type line. These objects represent |THD|, SNR, SINAD.

График показывает полезный динамический диапазон, соответствующий каждой метрике. Величина THD соответствует диапазону, свободному от гармоник. Аналогично, SNR соответствует динамическому диапазону, на который не влияет шум; SINAD соответствует общему динамическому диапазону, свободному от искажений.

Как видно из графика, SNR ухудшается по мере увеличения ослабления входной мощности. Это происходит потому, что при ослаблении сигнала ослабляется только сигнал, но уровень шума усилителя остается прежним.

Также следует отметить, что величина полного гармонического искажения постоянно улучшается до тех пор, пока она не пересекает кривую SNR, после чего измерение становится нестабильным. Это происходит, когда гармоники «исчезли» под шумом усилителя.

Практическим выбором ослабления усилителя было бы 26 дБ (с получением SINAD 103 дБ). Это было бы разумным компромиссом между гармоническими и шумовыми искажениями.

% 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

Нарисуем периодограмму, когда аттенюатор установлен на 26 дБ.

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

Figure contains an axes. The axes with title Periodogram Power Spectrum Estimate contains 4 objects of type line, text.

Здесь мы дополнительно нанесли на график уровень суммарной мощности шума, который распределяется по спектру. Следует отметить, что при этой установке затухания вторая и третья гармоники все еще видны в спектре, но также значительно меньше, чем общая мощность шума. Если бы у нас было приложение, которое использует меньшую полосу пропускания доступного спектра, мы бы выиграли от дальнейшего увеличения затухания для уменьшения гармонического содержания.

Постобработка для удаления искажений

Иногда мы можем исправить некоторую нелинейность усилителя. Если выходной сигнал усилителя оцифрован, мы можем восстановить более полезный динамический диапазон путем цифровой последующей обработки захваченного выходного сигнала и математической коррекции нелинейности.

В нашем случае мы стимулируем вход с помощью линейного клина и подгоняем полином третьего порядка, который лучше всего подходит для входа.

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

    0.0010   -0.0002    1.0000   -0.0250

Теперь, когда у нас есть коэффициенты, мы можем затем выполнить посткоррекцию на выходе и сравнить бок о бок с нашим исходным неоткорректированным выходом

correctedOutputVmax = polyval(polyCoeff, outputVmax);

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

Figure contains 2 axes. Axes 1 with title Uncorrected contains an object of type line. Axes 2 with title Polynomial Corrected contains an object of type line.

Следует отметить, что вторая и третья гармоники значительно уменьшаются при использовании полиномиальной коррекции.

Повторим измерения еще раз с откорректированным выходом.

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

Обратите внимание, что наш SINAD (и THD) упал с 60 дБ до 99 дБ, сохраняя при этом наш исходный SNR 131 дБ.

Объединение методов

Мы можем объединить затухание с полиномиальной оценкой, чтобы найти идеальное рабочее напряжение, которое минимизирует общую SINAD нашей системы.

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

Figure contains an axes. The axes with title Distortion Metrics vs. Input Attenuation and Polynomial Correction contains 6 objects of type line. These objects represent |THD| (uncorrected), SNR (uncorrected), SINAD (uncorrected), |THD| (corrected), SNR (corrected), SINAD (corrected).

Здесь мы нанесли на график все три метрики наряду с нескорректированным и полиномиальным скорректированным усилителем.

Как видно из графика, THD значительно улучшился, тогда как SNR не был затронут полиномиальной коррекцией. Это следует ожидать, поскольку полиномиальная коррекция влияет только на гармонические искажения, а не на шумовые искажения.

Покажем максимально возможную SINAD при коррекции полиномом

[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

Хороший выбор ослабления усилителя для полиномиально скорректированного усилителя был бы 20dB (давая SINAD 109,8 дБ).

% 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')

Figure contains an axes. The axes with title Periodogram of attenuated and polynomial corrected amplifier contains 4 objects of type line, text.

Заметим, что все, кроме второй гармоники, исчезли полностью с полиномиальной коррекцией при идеальной установке затухания. Как отмечалось ранее, вторая гармоника появляется чуть ниже уровня мощности полного шумового поля. Это обеспечивает разумный компромисс в приложениях, которые используют полную полосу пропускания усилителя.

Резюме

Мы показали, как полиномиальная коррекция может быть применена к выходу усилителя, испытывающего искажения, и как выбрать разумное значение затухания, чтобы уменьшить эффекты гармонических искажений.

См. также

| |