news 2026/7/18 3:50:34

激光雷达俯仰角正态分布曲线预测合格率

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
激光雷达俯仰角正态分布曲线预测合格率

激光雷达俯仰角正态分布曲线预测合格率

  • 一、前言
  • 二、说明
  • 三、整体架构流程
  • 四、技术细节与代码分析
    • 1. 数据读取与处理 (`get_data` 和 `plotting_parameters`)
    • 2. 正态分布参数计算 (`mathematics`)
    • 3. 正态分布曲线构建与可视化
    • 4. 合格率计算:数值积分 (`func` 和 `quad`)
  • 五、结果演示与分析
  • 六、结论
  • 附:完整代码

摘要
在激光雷达等精密传感器的生产与测试过程中,俯仰角度的精度是衡量产品合格与否的关键指标之一。传统的合格率判定往往依赖于对大量样本数据进行简单的统计,难以直观地反映数据的分布规律。本文介绍了一种基于正态分布模型的合格率预测方法。该方法通过Python编程,从Excel文件中读取俯仰角测试数据,计算出每组数据的均值(μ)和标准差(σ),进而拟合出其正态分布概率密度函数曲线。在此基础上,利用数值积分方法计算曲线在合格范围(±1°)内的面积,该面积即为预测的合格率。整个流程集成了数据读取、参数计算、曲线绘制与面积积分等模块,最终以图形和数值的形式输出每组数据的合格率预测结果,为产品质量评估提供了直观且定量的分析工具。

一、前言

在传感器制造领域,产品的最终性能参数通常呈现一定的统计分布规律。激光雷达的俯仰角作为一项核心指标,其测量值的分布往往趋近于正态分布。传统的合格率判定方式,例如直接计算合格样本的比例,虽然简单直接,但受限于样本量,且无法对分布的整体趋势进行预测。相比之下,若能通过样本数据拟合出其理论分布曲线,并计算合格范围内的理论概率,不仅能更平滑地反映质量水平,还能在小批量数据下对未来大批量生产的合格率进行预测。

基于这一思路,本文设计了一个Python脚本,实现了从数据读取、正态分布参数计算,到曲线绘制与合格率积分预测的全流程自动化。下文将对该方案的架构流程、核心代码实现以及最终结果进行详细解读。

二、说明

俯仰角数据如下,合格范围:±1°。

三、整体架构流程

该脚本的设计遵循模块化原则,将不同功能的代码封装为独立的函数,使得整个流程清晰易懂,便于后续的维护与扩展。整体架构主要分为以下五个核心部分:

  1. 参数计算模块(mathematics函数):该模块负责核心的数学运算,即计算输入数据数组的均值(μ)和标准差(σ)。这两个参数是后续构建正态分布曲线的基础。
  2. 数据读取模块(get_data函数):负责与外部数据源交互。它使用xlrd库读取本地的 Excel 文件,提取出所有的俯仰角数据列以及对应的列标题(如“左前”、“右后”等方向标识)。
  3. 数据整合模块(plotting_parameters函数):作为数据处理的枢纽,该函数调用get_data获取原始数据,再调用mathematics为每一列数据计算其均值和标准差,并将计算结果与原始数据的标题进行整合,返回一个结构化的列表供主函数使用。
  4. 积分函数定义模块(func函数):该模块定义了一个用于数值积分的函数,其表达式为正态分布概率密度函数。由于积分过程需要用到全局的均值和标准差,这里巧妙地利用了global关键字在函数内部访问主程序中定义的参数。
  5. 主控与可视化模块(main函数):这是程序的入口点。它负责串联所有模块,依次对每组数据(每个方向)执行以下操作:
    • plotting_parameters获取该组数据的均值和标准差。
    • 使用numpymatplotlib构建并绘制正态分布曲线。
    • 使用fill_between函数高亮显示合格范围(±1°)内的区域。
    • 调用scipy.integrate.quad函数,结合func进行数值积分,计算出该区域的面积,即预测合格率。
    • 在图上添加文本说明,并保存图片。

流程图解:程序从main函数启动,首先调用plotting_parameters对 Excel 中的每一列数据进行预处理(读取 -> 计算均值/标准差),然后将这些参数返回给main函数。main函数循环处理每一组参数,完成绘图和积分计算,最终输出结果。


四、技术细节与代码分析

下面我们将深入分析代码中的关键技术点,并结合代码进行说明。

1. 数据读取与处理 (get_dataplotting_parameters)

使用xlrd读取 Excel 文件是常见的数据导入方式。get_data函数中,table.row_values(0)获取了第一行的标题,而table.col_values(i)[1:]则跳过了第一行的标题,获取了从第二行开始的所有数值数据,确保数据纯净。

defget_data():# 导入需要读取的第一个Excel表格的路径data1=xlrd.open_workbook(r'D:\python_demo\数学运算\俯仰角数据.xlsx')table=data1.sheets()[0]# 获取第一行的内容,索引从0开始row=table.row_values(0)# 获取一共多少列cols=table.ncols# 获取每一列的数据col_datas=[]foriinrange(cols):# 获取每一列的数据,并将第一个数据过滤col_datas.append(table.col_values(i)[1:])returncol_datas,row

plotting_parameters函数将读取和计算步骤串联起来,返回一个列表,列表中的每个元素都包含了[均值, 标准差, 方向名称]。这种数据结构非常便于在main函数中遍历处理。

2. 正态分布参数计算 (mathematics)

mathematics函数虽然简单,但至关重要。这里特别需要注意的是标准差的计算方式。np.std(array, ddof=1)中的ddof=1表示计算的是样本标准差(分母为 n-1),这符合统计学中利用样本估计总体的场景,使预测结果更加合理。

defmathematics(array):arr_mean='%.4f'%np.mean(array)# 求均值arr_std='%.4f'%np.std(array,ddof=1)# 求标准差returnarr_mean,arr_std

3. 正态分布曲线构建与可视化

main函数中,正态分布曲线的绘制使用了标准公式:

f ( x ) = 1 σ 2 π e − ( x − μ ) 2 2 σ 2 f(x) = \frac{1}{\sigma\sqrt{2\pi}} e^{-\frac{(x-\mu)^2}{2\sigma^2}}f(x)=σ2π1e2σ2(xμ)2

其中sig代表方差(即标准差的平方)。代码中使用np.linspace生成了一个覆盖 μ ± 6σ 范围的 x 轴坐标,这几乎涵盖了99.999%的数据范围,保证了曲线的完整性。plt.fill_between函数通过where=(x >= -1) & (x <= 1)参数,巧妙地只对合格范围内的区域进行颜色填充,增强了可视化效果。

x=np.linspace(u-6*sig,u+6*sig,200)# 定义域y=np.exp(-(x-u)**2/(2*sig**2))/(math.sqrt(2*math.pi)*sig)# 定义曲线函数plt.plot(x,y,"g",linewidth=2,label=r"u={},σ={}".format('%.4f'%u,'%.4f'%σ))# 画曲线plt.fill_between(x,y1=y,y2=0,where=(x>=-1)&(x<=1),facecolor='blue',alpha=0.2)# 填充积分区域

4. 合格率计算:数值积分 (funcquad)

合格率即曲线在合格范围 [-1°, 1°] 下的面积。这里使用了scipy.integrate.quad函数进行数值积分。该函数要求被积函数只能接受一个参数(即 x)。为了将均值 (μ) 和标准差 (σ) 传递给func,代码使用了global u, sig声明,使得func内部可以访问在main函数中定义的、代表当前处理数据组的均值和标准差。这种方式虽然简单,但需要注意在循环中更新全局变量。

# 定义全局变量,以便在func中使用globalu,sigdeffunc(x):# 返回当前全局变量 u 和 sig 下的概率密度值returnmath.exp(-(x-u)**2/(2*sig**2))/(math.sqrt(2*math.pi)*sig)# 在main函数中调用积分fArea,err=integrate.quad(func,-1,1)print("Integral area:",fArea)

quad函数返回两个值:fArea是积分结果(即合格率),err是估计的绝对误差。最后,通过plt.text将计算出的合格率以文本形式标注在图上,使结果一目了然。


五、结果演示与分析

运行脚本后,程序会为 Excel 中的每一列数据(即每个方向的俯仰角数据)生成一张图片,并打印出对应的合格率。

这些结果直观地展示了正态分布参数(μ 和 σ)对合格率的决定性影响:均值越靠近0、标准差越小,合格率越高。


六、结论

本文介绍了一种利用正态分布模型预测激光雷达俯仰角合格率的方法,并给出了完整的 Python 代码实现。通过将原始数据拟合为正态分布曲线,并计算合格范围内的曲线下面积,该方法能够:

  1. 定量评估质量:将合格率从一个简单的比例,提升为一个基于理论分布的概率值,更具预测性。
  2. 直观诊断问题:通过观察曲线和参数(μ, σ),可以快速判断质量问题的来源。例如,均值偏移可能指向系统性误差(如安装校准问题),而标准差过大可能指向随机性误差(如工艺稳定性问题)。
  3. 实现流程自动化:该脚本能够批量处理 Excel 文件中的多组数据,并自动生成图文并茂的报告,大大提高了数据分析的效率。

这种基于统计模型的质量分析方法,不仅适用于激光雷达的俯仰角测试,也可推广至其他具有正态分布特征的工业参数的质量评估中,为智能制造中的数据驱动决策提供有力支持。

附:完整代码

#!/usr/bin/env python# -*- coding: utf-8 -*-importnumpyasnpfrommatplotlibimportpyplotaspltimportmathfromscipyimportintegrateimportxlrd# todo 计算均值和标准差defmathematics(array):arr_mean='%.4f'%np.mean(array)# 求均值arr_std='%.4f'%np.std(array,ddof=1)# 求标准差returnarr_mean,arr_std# todo 读取数据defget_data():# 导入需要读取的第一个Excel表格的路径data1=xlrd.open_workbook(r'D:\python_demo\数学运算\俯仰角数据.xlsx')table=data1.sheets()[0]# 获取第一行的内容,索引从0开始row=table.row_values(0)# 获取一共多少列cols=table.ncols# 获取每一列的数据col_datas=[]foriinrange(cols):# 获取每一列的数据,并将第一个数据过滤col_datas.append(table.col_values(i)[1:])returncol_datas,row# todo 生成数学期望值、标准差、方向defplotting_parameters():value_list=[]row=get_data()[1]foriinrange(len(row)):result=list(mathematics(get_data()[0][i]))result.append(row[i])value_list.append(result)returnvalue_list# todo 使用quad()函数进行积分deffunc(x):print("x=",x)# 用于展示quad()函数对func的多次调用returnmath.exp(-(x-u)**2/(2*sig**2))/(math.sqrt(2*math.pi)*sig)# todo 绘制图形并求积分defmain():globalu,sig# 输入数学期望值、标准差、方向value_list=plotting_parameters()forvalueinvalue_list:u=float(value[0])# 均值μσ=float(value[1])# 标准差δsig=math.sqrt(σ)# 方差x=np.linspace(u-6*sig,u+6*sig,200)# 定义域y=np.exp(-(x-u)**2/(2*sig**2))/(math.sqrt(2*math.pi)*sig)# 定义曲线函数plt.axis([np.min(x),np.max(x),0,np.max(y)])# 坐标范围plt.plot(x,y,"g",linewidth=2,label=r"u={},σ={}".format('%.4f'%u,'%.4f'%σ))# 画曲线,带图示。保留四位小数plt.fill_between(x,y1=y,y2=0,where=(x>=-1)&(x<=1),facecolor='blue',alpha=0.2)# 填充积分区域plt.text(1.6,0.5,r"$f(x)=\int_{-1}^1(\frac{1}{σ\sqrt{2\pi}}e^{-\frac{{(x-u)^2}}{2σ^2}})\mathrm{d}x$",horizontalalignment='center',fontsize=14)# 增加说明文本# 求积分,计算(-1,1)之间的概率# noinspection PyTupleAssignmentBalancefArea,err=integrate.quad(func,-1,1)print("Integral area:",fArea)plt.text(1.5,0.4,"{}俯仰角合格率:{}".format(value[2],'%.4f'%fArea),horizontalalignment='center',fontproperties="SimHei",fontsize=10)# 增加说明文本plt.grid(True)# 网格线plt.legend(loc='upper right',fontsize=10)# 标签位置plt.savefig(r'.\{}俯仰角.png'.format(value[2]),bbox_inches='tight')# 保存为图片print("已保存“{}俯仰角.png”".format(value[2]))plt.show()if__name__=='__main__':main()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 14:08:42

D3D绘制精确到屏幕上每一个像素

最近项目上有一个需求&#xff0c;就是要求我们绘制的图像必须精确到屏幕上的每个像素。这就要求我们对d3d的绘制有比较深入的认识&#xff0c;比如&#xff1a;我们已经设置好了3D变换中相机矩阵和投影矩阵&#xff08;无论是透视变换还是正交变换&#xff09;&#xff0c;此时…

作者头像 李华
网站建设 2026/7/14 14:08:43

HP-Socket社区贡献者认可仪式:线上与线下活动策划指南

HP-Socket社区贡献者认可仪式&#xff1a;线上与线下活动策划指南 【免费下载链接】HP-Socket High Performance TCP/UDP/HTTP Communication Component 项目地址: https://gitcode.com/gh_mirrors/hp/HP-Socket HP-Socket作为高性能TCP/UDP/HTTP通信组件&#xff0c;其…

作者头像 李华
网站建设 2026/7/14 14:08:45

如何使用Material Motion Swift框架创建流畅的iOS动画交互:完整入门指南

如何使用Material Motion Swift框架创建流畅的iOS动画交互&#xff1a;完整入门指南 【免费下载链接】material-motion-swift gregnb/mui-datatables: 这是一个基于Material-UI库构建的、功能丰富的React组件&#xff0c;用于创建具有排序、筛选、搜索、分页等高级功能的数据表…

作者头像 李华
网站建设 2026/7/14 14:08:46

Python实战:3种高效处理RTSP视频流的方法(线程/进程/GPU加速)

Python实战&#xff1a;3种高效处理RTSP视频流的方法&#xff08;线程/进程/GPU加速&#xff09; 在实时视频分析领域&#xff0c;RTSP协议因其低延迟特性成为安防监控、智能交通等场景的首选。但面对高并发视频流处理时&#xff0c;开发者常遇到性能瓶颈——帧率下降、内存溢出…

作者头像 李华