工具/软件:
您好:
我正在使用 IWR1843 并尝试生成 距离多普勒热图 消息流 Python 、类似于 TI 毫米波演示可视化工具 GUI 中所示的图形。
我已经解析 TLV 5 型数据并对其进行了可视化、但结果与 GUI 的热图在外观或振幅分布方面不匹配。 请查看下面的图像、这是由我的代码生成的结果。
我想问以下问题:
-
什么是 正确的程序 如何将 TLV 5 型数据转换为 GUI 等效的距离 — 多普勒热图?
-
TI 是否提供任何技术 官方或示例 Python 代码 完全复制 GUI 输出(例如窗口化,FFT 阶跃,缩放)?
-
中的正确设置是什么 CFG 文件 输出该数据的方式与 GUI 相同?
我的 Python 代码(TLV 类型 5 解析):
def read_header(Data_port):
read_buffer = Data_port.read(Data_port.in_waiting)
byte_vec = np.frombuffer(read_buffer, dtype='uint8')
byte_count = len(byte_vec)
header_parameters = {}
header_parameters["header_start_index"] = -1
if byte_count > 40:
for index in range(byte_count):
if check_magic_word(byte_vec[index:index+8:1]):
header_parameters["header_start_index"] = index
break
if header_parameters["header_start_index"] != -1:
index = header_parameters["header_start_index"]
header_parameters["magic_word"] = byte_vec[index:index+8:1]
header_parameters["version"] = format(get_uint32(byte_vec[index+8:index+12:1]), 'x')
header_parameters["total_packet_length"] = get_uint32(byte_vec[index+12:index+16:1])
header_parameters["platform"] = format(get_uint32(byte_vec[index+16:index+20:1]), 'x')
header_parameters["frame_number"] = get_uint32(byte_vec[index+20:index+24:1])
header_parameters["time_in_cpu_cycles"] = get_uint32(byte_vec[index+24:index+28:1])
header_parameters["num_detected_obj"] = get_uint32(byte_vec[index+28:index+32:1])
header_parameters["num_TLVs"] = get_uint32(byte_vec[index+32:index+36:1])
header_parameters["sub_frame_number"] = get_uint32(byte_vec[index+36:index+40:1])
header_OK = True
else:
header_OK = False
return header_OK, header_parameters, byte_vec
def read_data(Data_port):
header_OK, header_parameters, byte_vec = read_header(Data_port)
if header_OK and header_parameters["num_detected_obj"] > 0:
tlv_start_index = header_parameters["header_start_index"] + 40
tlv_len_1 = get_uint32(byte_vec[tlv_start_index + 4:tlv_start_index + 8])
tlv_start_index += 8 + tlv_len_1
tlv_len_2 = get_uint32(byte_vec[tlv_start_index + 4:tlv_start_index + 8])
tlv_start_index += 8 + tlv_len_2
tlv_type = get_uint32(byte_vec[tlv_start_index : tlv_start_index + 4])
tlv_len = get_uint32(byte_vec[tlv_start_index + 4 : tlv_start_index + 8])
print("The no.3 TLV")
print(" type %d" % (tlv_type))
print(" len %d bytes" % (tlv_len))
if tlv_type == 5:
start = tlv_start_index
end = tlv_start_index + tlv_len
if (end > len(byte_vec)):
print("This frame cannot read all TLV type 5.")
return
heatmap_payload = byte_vec[start:end]
expected_len = 256 * 32 * 2
if len(heatmap_payload) != expected_len:
print(f"Length of data no full. {len(heatmap_payload)} ≠ {expected_len} return")
return
range_doppler_int16 = np.frombuffer(heatmap_payload.tobytes(), dtype='<i2')
if range_doppler_int16.size != 256 * 32:
print(f"Length of data no full. {range_doppler_int16.size} ≠ 256 * 32 return")
return
rangeDoppler = np.reshape(range_doppler_int16, (256, 32), order='F')
rangeDoppler = np.append(rangeDoppler[128:], rangeDoppler[:128], axis=0)
rangeArray = np.arange(32) * 0.042
dopplerArray = np.arange(-128, 128) * 0.04
plt.figure(figsize=(8, 6))
plt.contourf(rangeArray, dopplerArray, rangeDoppler, levels=50, cmap='jet')
plt.xlabel("Range (m)")
plt.ylabel("Velocity (m/s)")
plt.title("Range-Doppler Heatmap")
plt.colorbar(label="Amplitude")
plt.savefig("range_doppler_heatma2.png", dpi=300)
plt.close()
CFG 设置:
sensorStop flushCfg dfeDataOutputMode 1 channelCfg 15 7 0 adcCfg 2 1 adcbufCfg -1 0 1 1 1 lowPower 0 0 profileCfg 0 77 7 3 39 0 0 100 1 256 7200 0 0 30 chirpCfg 0 0 0 0 0 0 0 1 chirpCfg 1 1 0 0 0 0 0 4 chirpCfg 2 2 0 0 0 0 0 2 frameCfg 0 2 32 0 100 1 0 guiMonitor -1 1 0 0 0 1 0 cfarCfg -1 0 2 8 4 3 0 15.0 0 cfarCfg -1 1 0 4 2 3 1 15.0 0 multiObjBeamForming -1 1 0.5 calibDcRangeSig -1 0 -5 8 256 clutterRemoval -1 0 compRangeBiasAndRxChanPhase 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 measureRangeBiasAndRxChanPhase 0 1. 0.2 aoaFovCfg -1 -90 90 -90 90 cfarFovCfg -1 0 0.25 4.65 cfarFovCfg -1 1 -7.06 7.06 extendedMaxVelocity -1 0 CQRxSatMonitor 0 3 11 121 0 CQSigImgMonitor 0 127 8 analogMonitor 0 0 lvdsStreamCfg -1 0 0 0 calibData 0 0 0 sensorStart
输出与 GUI:


感谢您的支持。 如果您有任何指导或官方资源来使我的输出与 GUI 结果保持一致、我将不胜感激。
此致、
Xiao