Искажения сигнала при его усилении могут быть оценены путём анализа спектра выходного сигнала. Для оценки искажений по спектру усиленного сигнала нужен (помимо генератора сигнала) цифровой осциллограф с возможностью записи оцифрованного сигнала в файл. Для проведения расчётов нужна программа, которая умеет делать дискретное преобразование Фурье. Все приведённые здесь расчёты сделаны в программе FreeMat. Основное внимание в тексте уделено процессу числовой обработки спектра.
Для получения исходных данных для вычисления спектра сигнала нужно записать оцифрованный сигнал с АЦП осциллографа в файл. Разные программы, которые работают с осциллографами, обеспечивают разные возможности по записи сигналов.
Две из опробованных мною программ – штатная программа осциллографа, и другая, свободная (open-source) – обеспечивают запись последовательностей с АЦП длинной 130048, и 8192 сэмплов, соответственно. Пояснять как делается запись сигнала в программах, думаю, нет особой надобности, эта простая операция, поясню как производится само измерение сигнала, для записи.
Первое, что нужно сделать – собрать измерительную схему: генератор + усилитель + один канал осциллографа подключен на вход усилителя (для наблюдения – что там входит на вход усилителя), другой – на выход. Выставляем нужную частоту входного сигнала (синус), регулятором громкости усилителя выставляем нужный уровень выходного сигнала, записываем данные в файл. Запоминаем (или записываем) частоту дискретизации АЦП осциллографа. Для вычисления коэффициента искажений частота нам не нужна, нужны только магнитуды (размах) гармонических составляющих с выходного сигнала. Частота нам понадобится, если мы захотим посмотреть спектры сигналов в графическом виде.
Запускаем FreeMat. Допустим, у нас есть файл оцифровки выходного сигнала. Загрузка данных будет выглядеть так:
–> s2=csvread(‘1khz-sin-1mhz-2.csv’); % выходной сигнал
Используя имеющийся комплект функций (приложен к статье) мы можем сразу же вычислить коэффициент гармоник выходного сигнала (КГИ):
–> [kh,v2]=spectraTHDf(s2,20) % считаем 20 гармоник, включая основную частоту
% основная частота = 1kHz, 20-ю гармониками перекрываем% весь звуковой частотный диапазон
kh = 0,0407 % ~ 4 %
v2 = 1,0e+04 *
здесь:
kh – коэффициент гармоник выходного сигнала
v2 – магнитуды гармоник для s2
Columns 1 to 11
0,0112
Columns 12 to 20
0,0017
КНИ может быть получен из величины kh (THD) посредством простой формулы, приведённой в Википедии. График спектра выходного сигнала может быть получен следующим образом:
–> [f,t]=spectra(s2,1e6); % частота дискретизации = 1 МГц
–> plot(t(1:2500),log10(f(1:2500))) % берём первые 25 кГц
Алгоритм вычисления коэффициента гармоник использует БПФ для вычисления спектра. В полученном спектре процедура находит базовую частоту (по максимальной магнитуде), а также указанное количество гармонических частот, по локальным максимумам магнитуд. Магнитуды гармоник возводятся в квадрат, суммируются, затем из полученной суммы извлекается квадратный корень, значение которого делится на магнитуду первой гармоники – полученное значение и будет величиной THD.
Описание пакета функций обработки сигналов:
function [m,mi] = find_max(S,i1,i2)
Поиск максимального значение S(i) в диапазоне индексов от i1 до i2
Возвращает найденное максимальное значение m, и его индекс mi
function v = max_harms(S,n)
Поиск максимумов магнитуд гармоник в векторе S, количеством не более n.
Возвращает вектор магнитуд гармоник.
function [t,v] = THDf(F,n)
Вычисление величины THD по частотному спектру F, изпользуя не более n магнитуд гармоник
Возвращает величину коэффициента и вектор магнитуд гармоник.
function [t,v] = spectraTHDf(S,N)
Вычисление величины THD по частотному спектру сигнала S, используя не более N магнитуд гармоник
Возвращает величину коэффициента и вектор магнитуд гармоник.
function [P,frq] = spectra(S,Sfreq)
Вычисляет спектр P сигнала S и вектор частот, соответствующих спектру.
Автор: Андрей Гусев