Здравствуйте.
Выполняю фильтрацию сигнала мгновенной мощности (т.е. имеются датчики тока и напряжения, с них синхронно поступают данные с определенной частотой). Эта фильтрация позволяет выделить постоянную поставляющую мощности, а именно активную составляющую мощности.
На рисунке представлена схема в matlab, реализующая данную фильтрацию ( ссылка на яндекс диск
https://yadi.sk/i/IntrXGamriNhG , не получилось залить картинку сюда).
Задача состоит в том, чтобы реализовать данную фильтрацию на С++. Для интегрирования выбран метод Эйлера (одношаговый).
Попробовал реализовать, но что-то не так сделал. Подскажите, что не так или вообще может другой способ реализации посоветуете.
// double Current[] - массив значений мгновенных токов
// double Voltage[] - массив значений мгновенных напряжений
// double Step - шаг опроса
// int N - количество значений в массиве токов (напряжения)
double Filter (double Current[], double Voltage[], double Step, int N) {
double y1Past=0; // предыдущее значение y1
double yPast=0; // предыдущее значение y
double xPast=0; // предыдущее значение х
double y1=0; // текущее значение y1
double y=0; // текущее значение y
double x=0; // текущее значение х
double ksi=0.707;
double T=1/(5*M_PI);
for (int i = 0; i < N; i++) {
x= (Current[i] * Voltage[i] - y1Past - 2*ksi*T*yPast)/(T*T);
y= yPast + (x-xPast)*Step;
xPast = x;
y1 = y1Past + (y-yPast) * Step;
yPast = y1 ;
}
return y1;
}
}