Matlab 如何使用倍频程将波形的16位I/Q交错采样保存到二进制文件?
我需要使用GNU倍频程或Matlab生成一个二进制文件,该文件中的数据是波形的16位交错I/Q数据(16位实部,16位虚部) 假设生成的文件名为“output.bin”,如果我们将位[0:15]读取为little endian,我们将得到第一个示例的“I”;位[16:31]是第一个样本的“Q” 第二个样本的位[32:47]->I 第二个样本的位[48:63]->Q 我所能找到的就是这样的东西:Matlab 如何使用倍频程将波形的16位I/Q交错采样保存到二进制文件?,matlab,octave,Matlab,Octave,我需要使用GNU倍频程或Matlab生成一个二进制文件,该文件中的数据是波形的16位交错I/Q数据(16位实部,16位虚部) 假设生成的文件名为“output.bin”,如果我们将位[0:15]读取为little endian,我们将得到第一个示例的“I”;位[16:31]是第一个样本的“Q” 第二个样本的位[32:47]->I 第二个样本的位[48:63]->Q 我所能找到的就是这样的东西: points = 1000; % Determines the frequency offset
points = 1000;
% Determines the frequency offset from the carrier
cycles = 101;
phaseInc = 2*pi*cycles/points;
phase = phaseInc * (0:points-1);
% Create an IQ waveform
Iwave = cos(phase);
Qwave = sin(phase);
IQData = Iwave+1i*Qwave;
IQData = IQData(:)';
save -binary output.bin IQData
但显然,我将从中得到的不是16位交错I/Q数据
我刚接触Octave/Matlab,真的搞不懂
非常感谢 在MATLAB中,请参见fopen()和fwrite()以编写二进制文件。对于R2018a及更高版本,您的IQData将已经是交错格式,因此您可以直接写入,但您可能需要此帮助程序例程:
对于R2017b和更早版本,在写入之前,您需要复制数据以获得交错格式的数据。例如,这将把real&imag数据转换成交错格式(作为一个实变量):
然后将数据写入输出文件。事实上,如果您不担心额外的数据拷贝,这种交错数据方法将在所有版本的MATLAB中都能工作
对于转换为16位浮点,一些选项包括:
半精度:使用MATLAB函数Half()将双精度转换为半精度(R2018b或更高版本)。
如果您有R2018a或更早版本,则必须手动转换为半精度。此处给出了执行此操作的C代码:
bfloat16:目前还没有官方的MATLAB支持。一种简单的截断方法(即,不将舍入为偶数,也不进行NaN检查)将转换为单精度,然后选择最重要的16位进行写入。例如,类似
u16 = typecast(single(Data),'uint16');
b16 = u16(1:2:end);
然后将b16写入二进制文件。您认为输出文件是什么样子的?您是否正在寻找一种方法来保存
IQData
以备将来再次使用?或者您是否需要具有特定格式的输出文件?对于包含16位值的二进制文件,您需要知道文件读取器将使用哪个(大端或小端)。不清楚16位在代码中的位置,因为您显示的是64位双精度。您是否正在尝试写入某种类型的16位浮点值,如半精度或bfloat16?或者某种类型的缩放16位整数?请澄清。@TasosPapastylianou谢谢!我添加了一些关于我需要的文件的更多信息。我需要它以备将来再次使用。谢谢@Hoki!是小恩迪安。
u16 = typecast(single(Data),'uint16');
b16 = u16(1:2:end);