有没有一种优雅的方法可以将矢量<复杂<float>>转换为矢量<short>?

Is there an elegant way to convert vector<complex<float>> to vector<short>?

本文关键字:lt gt short 复杂 float 转换 一种 方法 有没有      更新时间:2023-10-16

我的类正在接收复杂浮点的向量,但是数据流数据包必须将数据作为简短。我的解决方案是首先将数据转换为简短,然后将其批处理到数据包中,然后发送。转换此数据的最佳方法是什么?

复杂数据应映射到两个单独的变量:例如,vcfSampleData[0].real()-> m_pData[0]vcfSampleData[0].imag()-> m_pData[1]等。

void BufferSampleData(const std::vector<std::complex<float>>& vcfSampleData, const float& fTotalGain_dB, const Frequency& CentreFrequency, const Bandwidth& cBandwidth, const TimeStamp& tCaptureTime, const SampleRate& SampleRate)
{
    sBufferData* pWriteElement = m_SampleBuffer.GetWriteElement();
    if(pWriteElement != nullptr) {
        std::copy(vcfSampleData.begin(), vcfSampleData.end(), pWriteElement->m_pData); //vector<comlex<float>> must become vector<complex<short>> or vector<short>
        //other irrelevant stuff here
        m_SampleBuffer.CommitWriteElement();
    }
}

没有执行您要求的std::函数,您只需要编写一个循环

pWriteElement->m_pData.reserve(vcfSampleData.size() * 2);
pWriteElement->m_pData.clear();
for (auto cmpl : vcfSampleData)
{
    pWriteElement->m_pData.push_back(cmpl.real());
    pWriteElement->m_pData.push_back(cmpl.imag());
}

亲吻。

void Transform (const std::vector<std::complex<float>>& vSrc, const std::vector<short>& vDst) {
    vDst.resize(2*vSrc.size());
    for (std::size_t i=0; i<vSrc.size(); i++) {
        vDst[2*i] = vSrc[i].real;
        vDst[2*i+1] = vSrc[i].imag;
    }
}