我的类正在接收复杂浮点数的向量,但数据流数据包必须将数据设置为short。我的解决方案是首先将数据转换为short,然后将其批量处理为数据包,然后发送它们。转换这些数据的最佳方法是什么?
复杂数据应映射到两个单独的变量:例如,vcfSampleData[0].real()
- > m_pData[0]
和vcfSampleData[0].imag()
- > m_pData[1]
等等。
void cPXGFtoWaveBase::BufferSampleData(const std::vector<std::complex<float>>& vcfSampleData, const float& fTotalGain_dB, const cFrequency& CentreFrequency, const cBandwidth& cBandwidth, const cTimeStamp& tCaptureTime, const cSampleRate& 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();
}
}
答案 0 :(得分:0)
KISS。
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;
}
}
答案 1 :(得分:0)
没有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());
}