1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/seanwei-ECG-analyzer

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Filter.cpp 2.5 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Tomasz Drzewiecki Отправлено 28.01.2013 09:32 a1c8474
#include "Filter.h"
Filter::Filter(){}
Filter::~Filter(){}
void Filter::zeroPhase(std::vector<double> b, std::vector<double> a, ECGSignalChannel &inputSignal, ECGSignalChannel &outputSignal, int order)
{
this->filter(b, a, inputSignal, outputSignal, order);
auto signalLength = inputSignal->signal->size;
ECGSignalChannel reverseSignal = ECGSignalChannel(new WrappedVector);
reverseSignal->signal = gsl_vector_alloc(signalLength);
for (int i=0; i<signalLength; i++)
{
auto y1 = gsl_vector_get(outputSignal -> signal, signalLength-i-1);
gsl_vector_set (reverseSignal -> signal, i, y1);
//x[i]=y[NP-i-1];
}
this->filter(b, a, reverseSignal, outputSignal, order);
for (int i=0; i<signalLength; i++)
{
auto y1 = gsl_vector_get(outputSignal -> signal, signalLength-i-1);
gsl_vector_set (reverseSignal -> signal, i, y1);
//x[i]=y[NP-i-1];
}
for (int i=0; i<signalLength; i++)
{
auto y1 = gsl_vector_get(reverseSignal-> signal, i);
gsl_vector_set (outputSignal -> signal, i, y1);
//y[i]=x[i];
}
}
void Filter::filter(std::vector<double> b, std::vector<double> a, ECGSignalChannel &inputSignal, ECGSignalChannel &outputSignal, int order)
{
auto signalLength = inputSignal -> signal->size;
//y[0]=b[0]*x[0];
auto x1 = gsl_vector_get(inputSignal -> signal, 0);
gsl_vector_set (outputSignal -> signal, 0, x1*b[0]);
for (int i=1; i<order+1; i++)
{
//y[i]=0.0;
gsl_vector_set (outputSignal -> signal, i, 0.0);
for (int j=0; j<i+1; j++)
{
//y[i]=y[i]+b[j]*x[i-j];
auto y1 = gsl_vector_get(outputSignal -> signal, i);
auto x1 = gsl_vector_get(inputSignal -> signal, i-j);
gsl_vector_set (outputSignal -> signal, i, y1+b[j]*x1);
}
for (int j=0; j<i; j++)
{
//y[i]=y[i]-a[j+1]*y[i-j-1];
auto y_i1 = gsl_vector_get(outputSignal -> signal, i);
auto y1 = gsl_vector_get(outputSignal -> signal, i-j-1);
gsl_vector_set (outputSignal -> signal, i, y_i1-a[j+1]*y1);
}
}
for (int i=order+1;i<signalLength;i++)
{
//y[i]=0.0;
gsl_vector_set (outputSignal -> signal, i, 0.0);
for (int j=0; j<order+1; j++)
{
//y[i]=y[i]+b[j]*x[i-j];
auto y1 = gsl_vector_get(outputSignal -> signal, i);
auto x1 = gsl_vector_get(inputSignal -> signal, i-j);
gsl_vector_set (outputSignal -> signal, i, y1+b[j]*x1);
}
for (int j=0; j<order; j++)
{
//y[i]=y[i]-a[j+1]*y[i-j-1];
auto y_i1 = gsl_vector_get(outputSignal -> signal, i);
auto y1 = gsl_vector_get(outputSignal -> signal, i-j-1);
gsl_vector_set (outputSignal -> signal, i, y_i1-a[j+1]*y1);
}
}
}

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/seanwei-ECG-analyzer.git
git@api.gitlife.ru:oschina-mirror/seanwei-ECG-analyzer.git
oschina-mirror
seanwei-ECG-analyzer
seanwei-ECG-analyzer
master