我想在 C++ 中的 std::vector 上进行 DFT 转换使用 fftw 库后做一个带通滤波器?

问题描述

我有一个函数可以对包含离散样本的 std::vector 进行希尔伯特变换。我了解到在我的样本上使用带通滤波器可以提高希尔伯特变换的质量。

希尔伯特变换函数代码如下所示。如何向此功能添加带通滤波器? (我需要使用 Hann 或 Hamming 窗口作为带通滤波器。)

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,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],NumRem * sizeof(fftw_complex));

         plan = fftw_plan_dft_1d(N,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


}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)