You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

scipy.io.savemat保存雷达数据为mat文件报NoneType转换错误求解

错误原因

scipy.io.savemat 只能存储Matlab兼容的numpy数组、字符串、数字、基础字典/列表这类结构,你直接传入的data是雷达SDK返回的自定义采集对象,不是纯数值数组,对象内部带有不少值为None的内部属性,转换时就会触发「Could not convert None (type <class 'NoneType'>) to array」报错。

修复方法
  • 第一步:从采集结果对象中提取有效原始采样数据
    不要直接存储acq.read()返回的整个自定义对象,SENSE X1系列雷达SDK自带转numpy数组的方法,读取数据后先转换为纯数值数组:
    import numpy as np
    from scipy import io
    
    # 保留原有采集读取逻辑
    data = acq.read()
    # 提取原始ADC采样数组,若方法名不匹配可执行print(dir(data))查看对象所有属性/方法,查找带samples、ndarray关键字的有效字段
    raw_adc_data = data.as_ndarray()
    # 本地校验数据有效性
    print(f"数据维度:{raw_adc_data.shape}, 数据类型:{raw_adc_data.dtype}, 空值数量:{np.sum(np.isnan(raw_adc_data))}")
    
  • 第二步:整理待存储字典,仅传入基础类型与numpy数组
    配置项也不要直接存储整个config对象,把跑SAR算法需要的参数单独提取出来,确保所有值都是数字、字符串、numpy数组这类savemat支持的类型:
    save_dict = {
        "radar_data": raw_adc_data,
        "cfg_start_freq": config["sweep"]["start_frequency"],
        "cfg_stop_freq": config["sweep"]["stop_frequency"],
        "cfg_sample_num": config["sweep"]["num_samples"],
        "cfg_sweep_count": config["sweep"]["count"]
    }
    # 写入mat文件,开启压缩可大幅减小文件体积
    io.savemat("test.mat", save_dict, do_compression=True)
    
  • 第三步:存储结果校验
    写入完成后用io.loadmat("test.mat")读回文件,确认所有字段完整、数值无异常,再放到Matlab环境中运行SAR算法即可。
避坑提示
  • 所有传入savemat的内容都不能是自定义类实例、文件句柄、日志对象这类特殊类型,必须转换为基础类型或者numpy数组
  • 若转换数组时仍发现存在None/空值,优先检查采集流程:确认雷达完成完整扫频动作后再读取数据,必要时可在acq = device.initiate.immediate_and_receive()后添加数百毫秒延时,等待采集完成再调用read()
  • 若当前使用的SDK版本没有as_ndarray()方法,可直接访问data.samples属性取原始采样值,再调用np.array()转换为numpy数组即可。

内容的提问来源于stack exchange,提问作者Xan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 00:09:13