我正在从要解调的软件定义无线电中读取 IQ 数据缓冲区。我收到的数据是 8 位无符号整数的缓冲区。我需要将其转换为缓冲区以输入复数浮点数以解调信号(我计划使用 Liquid DSP 库)。我在转换缓冲区时遇到了困难。
在 GNURadio 中,我已经制定了我的逻辑并将我的代码输出写入一个二进制文件,然后我可以将其用作测试的输入源。到目前为止,唯一可行的是将 uint8_t 缓冲区写入文件,对数据的其他操作会破坏逻辑。
这是我尝试过的 C++ 代码片段:
uint8_t buffer[buffersize];
uint8_t I;
uint8_t Q;
float Ifloat;
float Qfloat;
complex<float> complexsample;
ofstream myfile;
myfile.open("example.bin", ios::out | ios::app | ios::binary);
for (int x = 0; x < (buffersize/2); x++) {
memcpy(&I, buffer + (2 * x), 1);
memcpy(&Q, buffer + (1 + (2 * x)), 1);
//writing I and Q above to a binary file works
//myfile.write((char*) &I, sizeof(I));
//myfile.write((char*) &Q, sizeof(Q));
Ifloat = (float) I;
Qfloat = (float) Q;
//when I write Ifloat and Qfloat to a binary file then pass the
//file as an input source into the Add Const block things stop working
//myfile.write((char*) &IIfloat, sizeof(Ifloat));
//myfile.write((char*) &Qfloat, sizeof(Qfloat));
Ifloat -= 127.0;
Qfloat -= 127.0;
//what I would do to turn the turn the unsigned value into a signed value
//myfile.write((char*) &IIfloat, sizeof(Ifloat));
//myfile.write((char*) &Qfloat, sizeof(Qfloat));
complexsample.real(Ifloat);
complexsample.imag(Qfloat);
//what I would do to turn the I and Q floats into a single complex sample
//myfile.write((char*) &complexsample, sizeof(complexsample));
}