Есть статья
Analog Devices MT-003 TUTORIAL "Understand SINAD, ENOB, SNR, THD, THD + N, and SFDR so You Don*t Get Lost in the Noise Floor
MT-003.pdf
Есть исходник на пайтоне по мотивам данной статьи. По нему есть вопросы.
Берём массив с оцифровкой, значения в вольтах. Убираем постоянку, накладываем на него окно (hanning) и дальше делаем следующее
sig_window (тип numpy.ndarray) содержит обработанный сигнал
sig_n - размер массива, кратно 2^n
amp_sp - должен содержать амплитудный спектр в единицах vrmsКод:import numpy as np ... sig_rfft = np.abs(np.fft.rfft(sig_window)) amp_sp = np.sqrt(2) * sig_rfft / sig_n # рассчитываем спектр мощности (Vrms^2) pow_sp = np.power(amp_sp, 2)
pow_sp - должен содержать спектр мощности
Умножение на np.sqrt(2) - это понятно, привели амплитудные единицы к действующим(rms).
Зачем делят спектр на sig_n - это компенсация process gain или что-то другое?
Дальше идет поиск первой гармоники и остальных, с учетом leakage и собственно расчеты искомых величин. Там все логично, хоть и много нудного кода.
Вопрос только один - по документу расчет идет на основе амплитудного спектра, а в исходнике всё считают из спектра мощности (и даже децибелы считают по формулам мощности) - в чем подвох? Почему нельзя было считать из амплитудного значения?
Социальные закладки