Рекуперативный выпрямитель напряжения AFE
Автор
Соавторы
# Функция расчёта Total Harmonic Distortiщn (THD):
# суммарного и по искажающих высшим целым гармоникам
function calculate_thd(signal, sample_rate, harmonic_limit, base=1)
n = length(signal)
# Применение окна Ханна
window = hanning(n)
windowed_signal = signal .* window
# Выполнение БПФ
fft_result = fft(windowed_signal)
amplitudes = abs.(fft_result) .* 2 / n
# Определение частотных параметров
freq_resolution = sample_rate / n
frequencies = fftfreq(n) * sample_rate
# Поиск основной гармоники
fundamental_idx = argmax(amplitudes[1:n÷2])
fundamental_amp = amplitudes[fundamental_idx]
fundamental_freq = abs(frequencies[fundamental_idx])
# Сбор данных о гармониках
harmonic_indices = Int[]
harmonic_amps = Float64[]
for k in 2:harmonic_limit
harmonic_idx = fundamental_idx * k
harmonic_idx > n÷2 && break
push!(harmonic_indices, harmonic_idx)
push!(harmonic_amps, amplitudes[harmonic_idx])
end
# Расчет THD
harmonic_sum = sum(harmonic_amps.^2)
thd = sqrt(harmonic_sum) / fundamental_amp
return (
thd = thd * 100,
frequencies = frequencies[1:n÷2]/base, # Только положительные частоты
amplitudes = amplitudes[1:n÷2],
fundamental_idx = fundamental_idx,
harmonic_indices = harmonic_indices
)
end
# Функция окна Ханна
hanning(n) = [0.5 - 0.5*cos(2π*i/(n-1)) for i in 0:n-1]