Рекуперативный выпрямитель напряжения AFE
Автор
Соавторы
# Функция для расчёта коэффициента мощности (cosϕ )
function calculate_power_factor(U::Vector{Float64}, I::Vector{Float64}; sampling_rate=200000, period=0.02)
# Рассчитываем параметры дискретизации
samples_per_period = Int(period * sampling_rate)
total_samples = length(U)
# Проверки и подготовка данных
@assert length(U) == length(I) "Векторы должны быть одинаковой длины"
n_periods = div(total_samples, samples_per_period)
cropped_len = n_periods * samples_per_period
# Обрезаем данные до целого числа периодов
U_cropped = @view U[1:cropped_len]
I_cropped = @view I[1:cropped_len]
# Расчет коэффициентов для каждого периода
pf = Vector{Float64}(undef, n_periods)
for k in 0:(n_periods-1)
range = (1:samples_per_period) .+ k * samples_per_period
U_seg = @view U_cropped[range]
I_seg = @view I_cropped[range]
P = dot(U_seg, I_seg) / samples_per_period
Urms = norm(U_seg)/√samples_per_period
Irms = norm(I_seg)/√samples_per_period
S = Urms * Irms
pf[k+1] = S ≈ 0.0 ? NaN : P/S
end
return pf
end