基于C/C++语言实现凯撒窗函数[结果与matlab w = kaiser(L,beta)函数相同]

发布时间:2024年01月24日

1.函数源码

基于VS和C/C++语言的凯撒窗函数。

#define M_EPS  1e-8

double I0(double alpha)
{
    double dNew;
    double K = alpha / 2.0;
    const int MAXTERM = 25 + 1;
    double J = 1.0, dOld = 1.0;
    bool converge = false;
    
    for (int i = 1; i < MAXTERM; ++i)
    {
        J *= K / i;
        dNew = dOld + J * J;

        if ((dNew - dOld) < M_EPS)
        {
            converge = true;
            break;
        }
        dOld = dNew;
    }

    if (!converge)
        return 0;

    return dNew;
}

std::vector<double> kaiser(int n, double alpha)
{
    std::vector<double> win(n);
    for (int i = 0; i < (n + 1) / 2; ++i)
    {
        double beta = 2 * alpha * sqrt(i * (n - i - 1.0)) / (n - 1.0);
        win[i] = I0(beta) / I0(alpha);
        win[n - 1 - i] = win[i];
    }
    return win;
}

2.函数计算结果与matlab kaiser(64,0.5)函数结果对比

1.本功能函数测试用例计算结果与matlab kaiser(64,0.5)函数同参数计算结果曲线对比
在这里插入图片描述

2.计算结果部分数值对比
在这里插入图片描述

文章来源:https://blog.csdn.net/weixin_44011863/article/details/135831910
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。