brisonus_app_eq/ERNCTuningTool/test/test_struct.py
2025-02-18 22:05:52 +08:00

31 lines
1.0 KiB
Python

import numpy as np
def float_to_int16(float_values, _num_ints):
"""
将指定数量的浮点数转换为指定数量的 16 位整数。
:param float_values: 输入的浮点数列表或数组。
:param _num_ints: 要输出的 int16 数量。
:return: 转换后的 int16 数组。
"""
# 缩放浮点数到 int16 范围
scale_factor = 32767 / max(abs(np.min(float_values)), np.max(float_values), 1)
scaled_floats = np.array(float_values) * scale_factor
# 转换为 int16 并调整数量
int16_values = scaled_floats.astype(np.int16)
if len(int16_values) > _num_ints:
return int16_values[:_num_ints] # 截取
elif len(int16_values) < _num_ints:
padding = np.zeros(_num_ints - len(int16_values), dtype=np.int16)
return np.concatenate([int16_values, padding]) # 补零
else:
return int16_values
# 示例用法
floats = [0.1, 0.5, -0.3, 0.9, -1.0] # 输入浮点数
num_ints = 10 # 指定需要的 int16 数量
result = float_to_int16(floats, num_ints)
print(result)