Я хочу сделать полосовой фильтр после преобразования DFT (с использованием библиотеки fftw) на std::vector в С ++?

У меня есть функция, которая выполняет преобразование Гильберта на std::vecto

r, содержащий дискретные образцы. Я узнал, что полосовой фильтр в моих образцах может повысить качество преобразования Гильберта.

Код функции преобразования Гильберта показан ниже. Как я могу добавить к этой функции полосовой фильтр? (Мне нужно использовать окно Ханна или Хэмминга для полосового фильтра.)

      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


}

0 ответов

Другие вопросы по тегам