2017-04-27 126 views
1

我的班級正在接收一個複雜浮點的向量,但數據流數據包的數據必須儘可能短。我的解決方案是首先將數據轉換爲short,然後將其批量轉換爲數據包併發送。什麼是轉換這些數據的最佳方法?有沒有一種優雅的方式將矢量<complex <float>>轉換爲矢量<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(); 
    } 
} 
+4

爲了幫助與技術(語法)部分,我們首先需要了解一個'std :: complex '映射到您的域中的一個或多個'short's。你想如何使用短整數來表示來自兩個浮點數的信息? – Angew

+2

使用'std :: transform' – fnc12

+0

數據流只需要是二進制數據流。您可以將內存原樣複製到您的流 –

回答

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()); 
} 
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; 
    } 
} 
相關問題