将相位(角度)转换为复数值

时间:2019-07-19 20:23:02

标签: c++ eigen

是否有执行val = cos(phase) + sin(phas) j的标准函数。是否有使用“欧拉公式”来执行“ argument”功能相反的常规名称?与std::polar类似,但是需要幅度分量。

我正在查看一个大型的代码库,该代码库经常执行以下模式:

Eigen::VectorXf phase = ...;
Eigen::VectorXcf cplx = ...;
cplx.real() = phase.array().cos();
cplx.imag() = phase.array().sin();

很遗憾,这没有利用sincos优化。

是否存在本文档中未发现的自然方法?为此有一个常规名称吗?

这可能就是我要使用的,只是在更改大量代码之前先与世界核对。

void phase2Cplx(const Eigen::Ref<const Eigen::VectorXf> phaseIn,
        Eigen::Ref<Eigen::VectorXcf> cplxOut) {
    // assert len in == len out
    Eigen::Index len = cplxOut.size();
    std::complex<float> *out = cplxOut.data();
    const float *in = phaseIn.data();
    for (Eigen::Index i = 0; i < len; ++i) {
        float val = in[i];
        out[i] = { cosf(val), sinf(val) };
    }
}
// @Details: Using () was measurably worse than []

0 个答案:

没有答案