首页 > 解决方案 > 将相位(角度)转换为复数值

问题描述

是否有一个标准功能val = cos(phase) + sin(phas) j应用“欧拉公式”来与“参数”函数相反,是否有一个常规名称?与 类似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 []

标签: c++eigen

解决方案


推荐阅读