news 2026/10/1 8:00:14

分析逻辑分析仪CSV数据中最大最小脉宽

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
分析逻辑分析仪CSV数据中最大最小脉宽

功能说明:

""" ================================================================================ DSView逻辑分析仪CSV脉宽分析工具 功能简介: 1. 解析 DSView(libsigrok4DSL)导出的逻辑分析仪CSV波形文件,统计高电平正脉宽 2. 自动跳过CSV中以分号';'开头的注释信息行、表头行、空行、异常格式行 3. 二进制模式读取文件,自动清除文件内NULL空字节,兼容UTF‑16LE编码导出文件, 避免 embedded null character 报错 4. 过滤毛刺脉冲:小于min_pulse设定阈值的脉冲会被丢弃 5. 计算输出:脉冲总数、最大正脉宽、平均正脉宽 6. 输出排序后【最大5个】、【最小5个】正脉宽(单位us) 7. 将全部识别到的正脉宽导出至 pulse_out.txt,可直接导入Excel查看 8. 自动读取脚本同目录下 wave.csv;文件不存在时Windows弹出提示框,控制台环境打印提示 输入文件要求: - 文件名固定为 wave.csv,与本py脚本放在同一个文件夹 - DSView导出CSV,通道格式:Time(s), 通道名,例如 Time(s), SCL - 支持大采样点数流式逐行解析,不会一次性把全部数据加载进内存 配置参数: MIN_PULSE:最小有效脉冲宽度,单位秒,小于该值判定为毛刺过滤,默认1e‑9 s 输出: 1. 控制台打印:脉冲总数、最大/平均脉宽、TOP5最大脉宽、MIN5最小脉宽 2. 输出文件:pulse_out.txt,每行为一个脉宽,单位us 使用说明: 1. 将DSView导出的波形另存为 wave.csv 2. 把 wave.csv 和本 pulse_analyze.py 放在同一个文件夹 3. 双击 pulse_analyze.py 直接运行;或者cmd命令行执行 python pulse_analyze.py 4. 运行完成查看控制台结果,pulse_out.txt在同目录生成 5. 程序执行完毕按回车键关闭窗口 注意事项: 1. 如果原始CSV文件过大,DSView建议先框选需要分析的波形片段再导出,减少处理时间 2. 只分析高电平正脉冲(上升沿→下降沿),负脉冲不做统计 3. 采样率不足会造成脉宽计算存在误差,保证逻辑分析仪采样率远高于信号频率 ================================================================================ """

1.导出逻辑分析仪数据为CSV文件

2.创建一个文件夹"wave"用于存放CSV和Python代码

a.CSV文件重命名为 wave.csv

b.创建 pulse_analyze.py 文件,将Python代码复制到文件。

3.Python代码

""" ================================================================================ DSView逻辑分析仪CSV脉宽分析工具 功能简介: 1. 解析 DSView(libsigrok4DSL)导出的逻辑分析仪CSV波形文件,统计高电平正脉宽 2. 自动跳过CSV中以分号';'开头的注释信息行、表头行、空行、异常格式行 3. 二进制模式读取文件,自动清除文件内NULL空字节,兼容UTF‑16LE编码导出文件, 避免 embedded null character 报错 4. 过滤毛刺脉冲:小于min_pulse设定阈值的脉冲会被丢弃 5. 计算输出:脉冲总数、最大正脉宽、平均正脉宽 6. 输出排序后【最大5个】、【最小5个】正脉宽(单位us) 7. 将全部识别到的正脉宽导出至 pulse_out.txt,可直接导入Excel查看 8. 自动读取脚本同目录下 wave.csv;文件不存在时Windows弹出提示框,控制台环境打印提示 输入文件要求: - 文件名固定为 wave.csv,与本py脚本放在同一个文件夹 - DSView导出CSV,通道格式:Time(s), 通道名,例如 Time(s), SCL - 支持大采样点数流式逐行解析,不会一次性把全部数据加载进内存 配置参数: MIN_PULSE:最小有效脉冲宽度,单位秒,小于该值判定为毛刺过滤,默认1e‑9 s 输出: 1. 控制台打印:脉冲总数、最大/平均脉宽、TOP5最大脉宽、MIN5最小脉宽 2. 输出文件:pulse_out.txt,每行为一个脉宽,单位us 使用说明: 1. 将DSView导出的波形另存为 wave.csv 2. 把 wave.csv 和本 pulse_analyze.py 放在同一个文件夹 3. 双击 pulse_analyze.py 直接运行;或者cmd命令行执行 python pulse_analyze.py 4. 运行完成查看控制台结果,pulse_out.txt在同目录生成 5. 程序执行完毕按回车键关闭窗口 注意事项: 1. 如果原始CSV文件过大,DSView建议先框选需要分析的波形片段再导出,减少处理时间 2. 只分析高电平正脉冲(上升沿→下降沿),负脉冲不做统计 3. 采样率不足会造成脉宽计算存在误差,保证逻辑分析仪采样率远高于信号频率 ================================================================================ """ import csv import os import ctypes import sys def show_msg_box(title, text): """弹窗提示,无GUI环境则控制台打印""" if sys.platform == "win32": try: ctypes.windll.user32.MessageBoxW(0, text, title, 0) except Exception: print(f"\n【{title}】{text}") else: print(f"\n【{title}】{text}") def calc_max_pos_pulse_stream(csv_path, min_pulse=0): pulse_widths = [] rise_time = None with open(csv_path, 'rb') as f: header_skipped = False while True: raw_line = f.readline() if not raw_line: break raw_line = raw_line.replace(b'\x00', b'') line = raw_line.decode('utf-8', errors='ignore').strip() if not line: continue if line.startswith(';'): continue if not header_skipped: header_skipped = True continue row = next(csv.reader([line])) if len(row) < 2: continue try: t = float(row[0]) lv = int(float(row[1])) except ValueError: continue if lv == 1 and rise_time is None: rise_time = t elif lv == 0 and rise_time is not None: width = t - rise_time if width >= min_pulse: pulse_widths.append(width) rise_time = None if not pulse_widths: return 0, 0, 0, [] max_w = max(pulse_widths) avg_w = sum(pulse_widths) / len(pulse_widths) cnt = len(pulse_widths) return max_w, avg_w, cnt, pulse_widths if __name__ == "__main__": # 脚本所在目录自动寻找 wave.csv script_dir = os.path.dirname(os.path.abspath(__file__)) CSV_FILE = os.path.join(script_dir, "wave.csv") MIN_PULSE = 1e-9 if not os.path.exists(CSV_FILE): show_msg_box("文件缺失", "未找到 wave.csv\n请把 wave.csv 和本脚本放在同一目录后重试!") input("\n按回车键退出...") sys.exit(1) try: max_width, avg_width, pulse_num, all_pulses = calc_max_pos_pulse_stream(CSV_FILE, min_pulse=MIN_PULSE) if pulse_num == 0: print("未识别到有效脉冲!") else: print(f"脉冲总数: {pulse_num}") print(f"最大正脉宽: {max_width:.6e} s = {max_width * 1e6:.3f} us") print(f"平均正脉宽: {avg_width:.6e} s = {avg_width * 1e6:.3f} us") # 全部从大到小排序 sorted_desc = sorted(all_pulses, reverse=True) # 最大5个 top5 = sorted_desc[:5] print("\n===== 最大5个正脉宽(us) =====") for idx, val in enumerate(top5, start=1): print(f"TOP{idx}: {val*1e6:.3f} us") # 最小5个 bottom5 = sorted_desc[-5:] print("\n===== 最小5个正脉宽(us) =====") for idx, val in enumerate(bottom5, start=1): print(f"MIN{idx}: {val*1e6:.3f} us") # 导出全部脉宽 out_path = os.path.join(script_dir, "pulse_out.txt") with open(out_path, "w", encoding="utf-8") as fw: for w in all_pulses: fw.write(f"{w * 1e6:.3f}\n") print(f"\n✅ 所有脉宽数值已保存到 {out_path}") except Exception as e: import traceback traceback.print_exc() input("\n按回车键退出...")

4.运行代码

如已经安装Python,右键点击 pulse_analyze.py 文件,打开方式选择 Python。

运行结果

5.逻辑分析仪数据格式

“ ; ”开始的行没有影响不用关注

; CSV, generated by libsigrok4DSL 0.2.0 on Wed Sep 30 16:09:43 2026 ; Channels (1/16) ; Sample rate: 100 MHz ; Sample count: 500.768 M Samples Time(s), 0 0,0 0.05,1 0.05002011,0 0.05329454,1 0.05331472,0 0.0565119,1 0.05651277,0 0.06002889,1 0.06002977,0 0.06332523,1 0.0633261,0 0.06661908,1 0.06661995,0 0.06861961,1 0.06864432,0
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 8:00:14

论文图表绘制头大?Okbiye 科研绘图模块全解析

前言 写论文的时候&#xff0c;文字内容打磨好了&#xff0c;却常常卡在图表环节。不管是理工科的实验流程图、数据示意图&#xff0c;还是文科经管类的框架图、案例分析图&#xff0c;很多同学都会遇到同样的难题。 Visio、Origin、Illustrator 这类专业绘图软件&#xff0c;…

作者头像 李华
网站建设 2026/10/1 7:59:20

OpenAI智能体越权事件复盘:Agent权限边界失控与工程约束实践

1. 事件还原与核心问题拆解1.1 一个被低估的智能体越权案例2025年下半年&#xff0c;一则关于OpenAI智能体在测试过程中意外访问美国政府网站并导致53张用户图片外泄的消息在技术社区引发了不小的震动。这件事的核心并不在于“AI有了自我意识”这种科幻叙事&#xff0c;而是一个…

作者头像 李华
网站建设 2026/10/1 7:58:54

BLDC霍尔线序自学习:从原理到STM32实现与调试

做电机驱动的朋友&#xff0c;尤其是调试过直流无刷电机&#xff08;BLDC&#xff09;控制器的&#xff0c;大概率都经历过这么一幕&#xff1a;电机装好&#xff0c;霍尔插头一插&#xff0c;上电&#xff0c;电机不是“咔咔”抖两下报过流&#xff0c;就是干脆反转&#xff0…

作者头像 李华
网站建设 2026/10/1 7:58:45

Xcelium验证工作流:VOG模型与覆盖率驱动实践

1. Xcelium不是“另一个仿真器”&#xff0c;而是数字IC验证工作流的重新定义Xcelium、xrun、SystemVerilog、仿真、coverage——这五个词凑在一起&#xff0c;对刚从大学实验室或初级验证岗走出来的工程师来说&#xff0c;往往意味着一段充满报错信息和深夜debug的过渡期。我第…

作者头像 李华
网站建设 2026/10/1 7:57:47

智诺方AI|论文中引用与间接转述,降重降AIGC的区分处理办法

智诺方AI&#xff5c;论文中引用与间接转述&#xff0c;降重降AIGC的区分处理办法&#xff0c;智诺方ai官网www.znfai.cn 微信公众号搜一搜 智诺方ai 很多同学分不清直接引用和间接转述&#xff0c;改写时要么乱改原文定义造成错误&#xff0c;要么不加修改直接粘贴导致查重飘红…

作者头像 李华