Я хочу сделать полосовой фильтр после преобразования DFT (с использованием библиотеки fftw) на std::vector в С ++?
У меня есть функция, которая выполняет преобразование Гильберта на
std::vecto
Код функции преобразования Гильберта показан ниже. Как я могу добавить к этой функции полосовой фильтр? (Мне нужно использовать окно Ханна или Хэмминга для полосового фильтра.)
void HilbertTransform(vector<short int> inputSample)
{
vector<double> dataHilberted(N);
fftw_complex out[N];
for (int i = 0; i <N ; ++i )
{
out[i][REAL] = inputSample[i];
out[i][IMG] = 0;
}
fftw_plan plan = fftw_plan_dft_1d(N, out, out, FFTW_FORWARD, FFTW_ESTIMATE);
fftw_execute(plan);
fftw_destroy_plan(plan);
int hN = N >> 1;
int NumRem = hN;
for (int i = 0; i < hN; ++i )
{
out[i][REAL] *= 2;
out[i][IMG] *= 2;
}
if (N % 2 == 0)
NumRem--;
else if (N > 1)
{
out[hN][REAL] *= 2;
out[hN][IMG] *= 2;
}
memset(&out[hN+1][REAL], 0, NumRem * sizeof(fftw_complex));
plan = fftw_plan_dft_1d(N, out, out, FFTW_BACKWARD, FFTW_ESTIMATE);
fftw_execute(plan);
fftw_destroy_plan(plan);
fftw_cleanup();
for (int i = 0; i < N; i++ )
{
out[i][REAL] /= N;
out[i][IMG] /= N;
dataHilberted[i] = sqrt((out[i][REAL]*out[i][REAL]) + (out[i][IMG] * out[i][IMG]));
}
......// I will use dataHilberted later
}