This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] IWR1642BOOST:.bin 文件转换/解释

Guru**** 2763455 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/sensors-group/sensors/f/sensors-forum/774528/iwr1642boost-bin-file-conversion-interpretation

器件型号:IWR1642BOOST

你(们)好。

我正在将下面的 MATLAB 代码用于我的、我似乎无法打开我的结果。 我正在进行实验练习0001-DRIVER-VREI-Signs。

我不断收到 Matlab 上的错误消息。

使用 fread 时出错
无效的文件标识符。 使用 fopen 生成有效的文件标识符。
MAIN_READGUISavedBinary 中出现错误(第64行)
dataBin = fread (fid_bin、'uint8');
我似乎无法解决这个问题。 这是否与我的设置将.bin 文件设置为记事本文件有关?
如果是、我似乎无法将其改回。
其次、我目前正在测试物体和传感器之间的距离和角度如何影响结果。  
保存的数据是否是整个实验的平均值? 或者、我是否能够逐部分查看它?
下面是我使用的代码:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%(C)版权所有2018 Texas Instruments、Inc.
%
重新分发百分比并以源代码和二进制形式使用、有无
允许进行%修改、前提是满足以下条件
满足百分比:
%
源代码的重新分发百分比必须保留上述版权
%通知、此条件列表和以下免责声明。
%
%二进制形式的再发行必须复制上述版权
%注意、此条件列表和中的以下免责声明
随提供的文档和/或其他材料百分比
分布百分比。
%
%德州仪器公司的名称和名称均不相同
%其贡献者可用于认可或推广衍生产品
未经特定事先书面许可的本软件的百分比。
%
%本软件由版权所有者和贡献者提供
%"按原样"以及任何明示或暗示的保证、包括但不包括
%仅限于对适销性和适用性的暗示保证
%某特定用途不承担责任。 在任何情况下、版权均不得
%所有者或贡献者应对任何直接、间接、偶然、
%特殊、惩戒性或后果性损害(包括但不包括)
仅限于采购替代产品或服务;不使用、
%数据或利润;或业务中断)
%责任理论、无论是合同责任、严格责任还是侵权行为
因使用而产生的百分比(包括疏忽或其他原因)
此软件的百分比、即使被告知可能会发生此类损坏。
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%提供(a)从 PC-GUI 保存的二进制文件
%和(b)用于运行 GUI 的相应配置文件

工作区中保存的变量百分比
% rangeProfile_CpLx [行 x 列]:包含中的复数 Range-FFT 值
与指定值对应的%范围单元
%。 行包含区域单元、而
%列是线性调频脉冲/帧。 每个线性调频脉冲的第1个线性调频
%帧被保存。

% vitalSignsDemo_OutputStats:包含从输出的已处理值
EVM 的百分比。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
全关闭;全关闭;全部清除;CLC

%目录名称
dir_name ='C:\DataDirectory\';

%二进制数据
file_name_bin ='dataOutputFromEVM.bin';

用于收集数据的%配置文件
clientCfgFileDir = dir_name;
clientCfgFileName ='xwr1642_profile_VitalSmiss_20fps_back.cfg';

全局 total_payload_size_bytes;

file_path_bin = strcat (dir_name、file_name_bin);
fid_bin = fopen (file_path_bin、'rb');
dataBin = fread (fid_bin、'uint8');
fclose (fifd_bin);
clientCfgFilePath = strcat (dir_name、clientCfgFileName);
paramsStruct= parseCfgFile (clientCfgFilePath);
[total_payload_size_bytes、indexVitalSignsOutput]= calculate_PayLoadSize (ParamsStruct);
num_samples_EVM = total_payload_size_bytes;

numChirpsFile =长度(dataBin)/NUM_SAMPS_EVM;
dataAll =整形(dataBin、[NUM_SAMPS_EVM numChirpsFile]);
dataEVM = dataAll;

采样间隔= 1e-3*ParamsStruct.frameCfg.framePeriodicity;%帧周期
Fs = 1/采样间隔;%采样率
timeAxis =采样间隔:采样间隔:大小(dataEVM、2)*采样间隔;
rangeBinSize_meter = ParamsStruct.dataPath.rangeBinSize_meter;
RangeStartMeters = ParamsStruct.vitalSignsParams.rangeStartMeters;
rangeEndMeters = ParamsStruct.vitalSignsParams.rangeEndMeters;
rangeAxis = rangeStartMeters:rangeBinSize_meter:rangeEndMeters;
%%
index_range_profile_start = indexVitalSignsOutput.index_range_profile_start;
numRangeBinsSentUART = ParamsStruct.dataPath.numRangeProcessBined;
rangeProfile = dataEVM (index_range_profile_start:(index_range_profile_start + 4*numRangeBinsSentUART)-1、:);
%将 uint8转换为 uint16
rangeProfile = rangeProfile (1:2:end、:)+ rangeProfile (2:2:end、:)* 2^8;
二进制补码格式的转换百分比
对于 col=1:size (rangeProfile、2)
如果 i=1:size (rangeProfile、1)
如果(rangeProfile (i、col)>2^15)
rangeProfile (i、col)= rangeProfile (i、col)-2^16;
结束
结束
结束

转换为复杂格式的百分比
rangeProfile_CpLx = rangeProfile (1:2:end、:)+ j*rangeProfile (2:2:end、:);
%从感兴趣的距离库中提取相位
ROW_INDEX = 12;
ant1_ph =角度(rangeProfile_CpLx (row_index、:));
ant1_UnWrapPh = unwrap(ant1_Ph);

图(1);CLF
子图(311);imagesc (abs (rangeProfile_CpLx));
xlabel ("帧编号");ylabel ("范围箱")
标题("距离曲线的幅度")
子图(312);
绘图(abs (rangeProfile_CpLx (:、10)));网格打开
标题("范围配置文件的选定列")
子图(313);图(ant1_UnWrapPh);
ylabel ('Radians')
标题({strcat ('rangeIndex ='、num2str (row_index))、'Phasy'})
电网打开

%%从 EVM 输出中提取量表

vitalSignsDemo_OutputStats = parseDataEVM (dataEVM、indexVitalSignsOutput);
outGlobalCount = vitalSignsDemo_OutputStats.outGlobalCount;
outPhase = vitalSignsDemo_OutputStats.outPhase;
outBreathWfm = vitalSignsDemo_OutputStats.outBreathWfm;
outHeartWfm = vitalSignsDemo_OutputStats.outHeartWfm;
outHeartRate_FFT = VitalSignsDemo_OutputStats.outHeartRate_FFT;
outBreathRate_FFT = vitalSignsDemo_OutputStats.outBreathRate_FFT;
outBreathRate_Peak = vitalSignsDemo_OutputStats.outBreathRate_Peak;
outHeartRate_Peak = vitalSignsDemo_OutputStats.outHeartRate_Peak;
outConfidenceMetricHeart = vitalSignsDemo_OutputStats.outConfidenceHearicMetrt;
outConfidenceMetricBreath = vitalSignsDemo_OutputStats.outConfidenceMetricBreath;
outEnergyBreath = vialSignsDemo_OutputStats.outEnergyBreath;
outEnergyHeart = vitalSignsDemo_OutputStats.outEnergyHeart;

图(2);
图解(outPhase);网格打开
标题("相位值(来自 EVM)")

图(9);
子图(211);图(outGlobalCount);title ('Frame number saved from the EVM')
Subplot (212);plot (diff (outGlobalCount));title ('如果不为零、则表示在保存数据时错过了帧')


%%解析 EVM 中的数据以提取 vitalSignsDemo_OutputStats 中的相关输出
% dataEVM:从 EVM 保存的数据
% indexVitalSignsOutput:生命体征 Demo Output 的索引位置。
%这些索引位置在中进行了硬编码
EVM 上的固件百分比(在后续版本中会发生变化)
% vitalSignsDemo_OutputStats:包含不同输出值的输出结构
函数[vitalSignsDemo_OutputStats]= parseDataEVM (dataEVM、indexVitalSignsOutput)
VitalSignsDemo_OutputStats =[];
index_global_count = indexVitalSignsOutput.index_global_count;
index_range_bin_phase = indexVitalSignsOutput.index_range_bin_phase;
index_range_bin_value = indexVitalSignsOutput.index_range_bin_value;
index_phase = indexVitalSignsOutput.index_phase;
index_bathing_waveform = indexVitalSignsOutput.index_bathing_waveform;
index_Heart 波形= indexVitalSignsOutput.index_Heart 波形;
index_binging_rate FFT = indexVitalSignsOutput.index_bing_rate FFT;
index_Heart Rate EST_FFT = indexVitalSignsOutput.index_Heart Rate;
index_vinging_rate _peak = indexVitalSignsOutput.index_ving_rate _peak;
index_Heart Rate EST_PEAK = indexVitalSignsOutput.index_Heart Rate;EST_PEAK;
index_Confidence 公制呼吸= indexVitalSignsOutput.index_Confidence 公制呼吸;
index_CONFIDENSION_METRICT_Heart = indexVitalSignsOutput.index_CONFIDENSION_METRICT_Heart;
index_ENERGYWFM_Breath = indexVitalSignsOutput.index_ENERGYWFM_Breath;
index_ENERGYWFM_Heart = indexVitalSignsOutput.index_ENERGYWFM_Heart;

如果 i=1:size (dataEVM、2)

temp16 = typecast (uint8 ([dataEVM (:、ii)])、'uint16');
temp32 = typecast (uint8 ([dataEVM (:、ii)])、'uint32');
tempFloat = typecast (uint8 ([dataEVM (:、ii)])、'single');

globalCountTemp = dataEVM ([index_global_count:index_global_count+3]、ii);
outGlobalCount = typecast (uint8 ([globalCountTemp])、'uint32');

vitalSignsDemo_OutputStats.outGlobalCount (ii)= outGlobalCount;
vitalSignsDemo_OutputStats.outPhase (ii)= tempFloat (index_PHASE);
vitalSignsDemo_OutputStats.outBreathWfm (ii)= tempFloat (index_bathing_waveform);
vitalSignsDemo_OutputStats.outHeartWfm (ii)= tempFloat (index_Heart 波形);
vitalSignsDemo_OutputStats.outHeartRate_FFT (ii)= tempFloat (index_Heart Rate_EST_FFT);
vitalSignsDemo_OutputStats.outBreathRate_FFT (ii)= tempFloat (index_bing_Rate_FFT);
vitalSignsDemo_OutputStats.outBreathRate_Peak (ii)= tempFloat (index_bing_Rate_peak);
vitalSignsDemo_OutputStats.outHeartRate_Peak (ii)= tempFloat (index_Heart Rate_EST_PEAK);
VitalSignsDemo_OutputStats.outConfidMetricHeart (ii)= tempFloat (index_Confidency_metric_Heart);
VitalSignsDemo_OutputStats.outConfidMetricBreath (ii)= tempFloat (index_Confidency_metric_Breath);
VitalSignsDemo_OutputStats.outEnergyBreath (ii)= tempFloat (index_ENERGYWFM_Breath);
VitalSignsDemo_OutputStats.outEnergyHeart (ii)= tempFloat (index_ENERGYWFM_Heart);
结束
结束

函数[index_out]= translation_index (length_offset、index_in)
index_out =(length_offset + index_in_*4)/4;
结束

函数[total_payload_size_bytes、indexVitalSignsOutput]= calculate_PayLoadSize (ParamsStructt)

length_magic_word_bytes = 8;从 EVM 附加到 UART 数据包的 Magic Word 的长度百分比
length_debug_data_out_Bytes = 128;% VitalSignsDemo_OutputStats 大小
length_header_bytes = 40;% Header + Magic Word
length_TLV_MESSAGE_HEADER_Bytes = 8;
MMWDEMO_OUTPUS_MSG_SEGM_LEN = 32;

%Calculate 监控数据包大小
numRangeBinProcessed = ParamsStruct.dataPath.numRangeBinProcessed;
TOTAL_PAYLOAD_SIZE = LENGTH_HEADER_bytes;
TOTAL_PAYLOAD_SIZE = TOTAL_PAYLOAD_SIZE =字节+……
length_TLV_message_header_bytes +(4*numRangeBinProcessed);
TOTAL_PAYLOAD_SIZE = TOTAL_PAYLOAD_SIZE =字节+……
length_TLV_message_header_bytes+length_debug_data_out_Bytes;

%填充
if (mod (total_payload_size_bytes、MMWDEMO_output_MSG_SEGM_LEN)~=0)
PaddingFactor = ceil (total_payload_size_bytes/MMWDEMO_output_MSG_Size_LEN);
TOTAL_PAYLOAD_SIZE_Bytes = MMWDEMO_OUTPUS_MSG_SEGMER_LEN*划桨因子;
结束

length_offset_Bytes = length_header_bytes - length_magic_word_bytes + length_TLV_message_header_bytes
%%此结构定义雷达数据包中各种输出的索引位置
%注:索引会发生变化

length_offset = length_offset_Bytes + length_TLV_message_header_bytes;

indexVitalSignsOutput.index_global_count = 21;标头中全局帧计数的开始字节数量百分比
indexVitalSignsOutput.index_range_bin_phase = translation_index (length_offset、1);
indexVitalSignsOutput.index_range_bin_value = translation_index (length_offset、2)
indexVitalSignsOutput.index_PHASE = translation_index (length_offset、5)
indexVitalSignsOutput.index_bathing_waveform = translation_index (length_offset、6)
indexVitalSignsOutput.index_Heart 波形= translation_index (length_offset、7)
indexVitalSignsOutput.index_Heart Rate EST_FFT = translation_index (length_offset、8)
indexVitalSignsOutput.index_Heart Rate EST_FFT_4Hz = translation_index (length_offset、9)
indexVitalSignsOutput.index_Heart Rate EST_xCorr = translation_index (length_offset、10)
indexVitalSignsOutput.index_Heart Rate EST_peak = translation_index (length_offset、11)
indexVitalSignsOutput.index_binging_rate FFT = translation_index (length_offset、12)
indexVitalSignsOutput.index_bing_rate _xcr = translation_index (length_offset、13)
indexVitalSignsOutput.index_binging_rate 峰值= translation_index (length_offset、14)

indexVitalSignsOutput.index_Confidence metric_Breath = translation_index (length_offset、15)
indexVitalSignsOutput.index_CONFIDENSION_METRICT_Heart = translation_INDEX (length_offset、17)
indexVitalSignsOutput.index_Confidence 公制心脏4Hz = translation_index (length_offset、18)
indexVitalSignsOutput.index_CONFIDENSION_METRICT_Heart xCorr = translation_INDEX (length_offset、19)
indexVitalSignsOutput.index_ENERGYWFM_Breath = translation_index (length_offset、20)
indexVitalSignsOutput.index_ENERGYWFM_Heart = translation_index (length_offset、21)

indexVitalSignsOutput.index_MOTION 检测= translation_index (length_offset、22)
indexVitalSignsOutput.index_reserved_2 = translation_index (length_offset、21)
indexVitalSignsOutput.index_reserved_3 = translation_index (length_offset、22)
indexVitalSignsOutput.index_reserved_4 = translation_index (length_offset、23)
indexVitalSignsOutput.index_range_profile_start =(length_header_bytes + length_debug_data_out_Bytes ...
+ 2*length_TLV_MESSAGE_HEADER_Bytes)+ 1.

结束

谢谢你。
此致、
Amy
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我已经更改了"dir_name ='C:\DataDirectory\';"和"clientCfgFileDir = dir_name;"行的路径、但相同的错误消息仍然存在。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Amy、

    您是否遵循了实验室用户指南中提供的说明?

    此致
    尼廷
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Amy、

    请告诉我们您正在尝试实现的目标。

    xWR1642生命体征演示包括基于 QT 的 GUI。

    您似乎尝试开发 MATLAB GUI。

    是这样吗?

    谢谢你
    Cesar