пятница, 10 октября 2025 г.

Интерполяция и экстраполяция сплайнами

 Предварительно выбраны напряжения при разрядке Vd и зарядке Vc батареи и рассчитаны методом подсчёта протекшего заряда (интегрирование тока по отношению к номинальной емкости) соответствующие им уровни заряда SoSd и SoCc. Соответствующие графики:



Видно, что эти противоположные процессы проявляют гистерезис, и, кроме того, если начинать с экспериментального значения заряженной батареи, то оно ниже, чем получилось в конце процесса зарядки. Поэтому имеет смысл провести нормировку кривых таким образом, чтобы получить стандартизированные для Li-ion батарей (см. например, обзор по ссылке) границы полного заряда 4.2 В и полного разряда 3 В.

Для этого построим график зависимости SoC от напряжения, проведем интерполяцию кубическими сплайнами. используя функцию spline и сделаем выборку SoC на равномерной сетке с конечными узлами в 3 В и 4.2 В, сгенерированной функцией linspace

Пример кода для кривой разрядки:

Vd1=linspace(3,4.2,201);

[uVd,indu]=unique(Vd);

step=10;

SOCd1=spline(uVd(1:step:end),SOCd(indu(1:step:end)),Vd1);

и график, иллюстрирующий результаты процедуры, на котором показаны все исходные точки (кружки), прореженные с шагом step точки, использованные для сплайн-интерполяции и сам сплайн в стандартизированных границах:


На нижней панели видно, что прореживание нужно для двух целей: (1) исходные точки обладают определенным разбросом, выбор их меньшего количества (с увеличенным шагом дискретизации) делает сплайн-кривую более гладкой (по определению алгоритма она проходит через все точки, т.е. тут - через прореженные, а остальные образуют разброс вокруг этой кривой); (2) гладкость кривой и достаточно большой шаг дискретизации нужны для более аккуратной экстраполяции (т.к. измеренное напряжение ниже, чем 4.2 В) - экстраполирование интерполяционными сплайнами имеет смысл на расстояние не слишком сильно превышающее расстояние между четырьмя точками, использованными для интерполяции. 

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

Теперь можно перемасштабировать SoC, сдвинув полученную кривую в ноль на левой границе и сжав ее так, чтобы правый конец пришелся ровно на единицу:

SOC1dn=(SOCd1-SOCd1(1))/(max(SOCd1)-SOCd1(1));

Совмещение исходных и перемасштабированных графиков: