激光雷达俯仰角正态分布曲线预测合格率
激光雷达俯仰角正态分布曲线预测合格率一、前言二、说明三、整体架构流程四、技术细节与代码分析1. 数据读取与处理 (get_data 和 plotting_parameters)2. 正态分布参数计算 (mathematics)3. 正态分布曲线构建与可视化4. 合格率计算数值积分 (func 和 quad)五、结果演示与分析六、结论附完整代码摘要在激光雷达等精密传感器的生产与测试过程中俯仰角度的精度是衡量产品合格与否的关键指标之一。传统的合格率判定往往依赖于对大量样本数据进行简单的统计难以直观地反映数据的分布规律。本文介绍了一种基于正态分布模型的合格率预测方法。该方法通过Python编程从Excel文件中读取俯仰角测试数据计算出每组数据的均值μ和标准差σ进而拟合出其正态分布概率密度函数曲线。在此基础上利用数值积分方法计算曲线在合格范围±1°内的面积该面积即为预测的合格率。整个流程集成了数据读取、参数计算、曲线绘制与面积积分等模块最终以图形和数值的形式输出每组数据的合格率预测结果为产品质量评估提供了直观且定量的分析工具。一、前言在传感器制造领域产品的最终性能参数通常呈现一定的统计分布规律。激光雷达的俯仰角作为一项核心指标其测量值的分布往往趋近于正态分布。传统的合格率判定方式例如直接计算合格样本的比例虽然简单直接但受限于样本量且无法对分布的整体趋势进行预测。相比之下若能通过样本数据拟合出其理论分布曲线并计算合格范围内的理论概率不仅能更平滑地反映质量水平还能在小批量数据下对未来大批量生产的合格率进行预测。基于这一思路本文设计了一个Python脚本实现了从数据读取、正态分布参数计算到曲线绘制与合格率积分预测的全流程自动化。下文将对该方案的架构流程、核心代码实现以及最终结果进行详细解读。二、说明俯仰角数据如下合格范围±1°。三、整体架构流程该脚本的设计遵循模块化原则将不同功能的代码封装为独立的函数使得整个流程清晰易懂便于后续的维护与扩展。整体架构主要分为以下五个核心部分参数计算模块mathematics函数该模块负责核心的数学运算即计算输入数据数组的均值μ和标准差σ。这两个参数是后续构建正态分布曲线的基础。数据读取模块get_data函数负责与外部数据源交互。它使用xlrd库读取本地的 Excel 文件提取出所有的俯仰角数据列以及对应的列标题如“左前”、“右后”等方向标识。数据整合模块plotting_parameters函数作为数据处理的枢纽该函数调用get_data获取原始数据再调用mathematics为每一列数据计算其均值和标准差并将计算结果与原始数据的标题进行整合返回一个结构化的列表供主函数使用。积分函数定义模块func函数该模块定义了一个用于数值积分的函数其表达式为正态分布概率密度函数。由于积分过程需要用到全局的均值和标准差这里巧妙地利用了global关键字在函数内部访问主程序中定义的参数。主控与可视化模块main函数这是程序的入口点。它负责串联所有模块依次对每组数据每个方向执行以下操作从plotting_parameters获取该组数据的均值和标准差。使用numpy和matplotlib构建并绘制正态分布曲线。使用fill_between函数高亮显示合格范围±1°内的区域。调用scipy.integrate.quad函数结合func进行数值积分计算出该区域的面积即预测合格率。在图上添加文本说明并保存图片。流程图解程序从main函数启动首先调用plotting_parameters对 Excel 中的每一列数据进行预处理读取 - 计算均值/标准差然后将这些参数返回给main函数。main函数循环处理每一组参数完成绘图和积分计算最终输出结果。四、技术细节与代码分析下面我们将深入分析代码中的关键技术点并结合代码进行说明。1. 数据读取与处理 (get_data和plotting_parameters)使用xlrd读取 Excel 文件是常见的数据导入方式。get_data函数中table.row_values(0)获取了第一行的标题而table.col_values(i)[1:]则跳过了第一行的标题获取了从第二行开始的所有数值数据确保数据纯净。defget_data():# 导入需要读取的第一个Excel表格的路径data1xlrd.open_workbook(rD:\python_demo\数学运算\俯仰角数据.xlsx)tabledata1.sheets()[0]# 获取第一行的内容,索引从0开始rowtable.row_values(0)# 获取一共多少列colstable.ncols# 获取每一列的数据col_datas[]foriinrange(cols):# 获取每一列的数据并将第一个数据过滤col_datas.append(table.col_values(i)[1:])returncol_datas,rowplotting_parameters函数将读取和计算步骤串联起来返回一个列表列表中的每个元素都包含了[均值 标准差 方向名称]。这种数据结构非常便于在main函数中遍历处理。2. 正态分布参数计算 (mathematics)mathematics函数虽然简单但至关重要。这里特别需要注意的是标准差的计算方式。np.std(array, ddof1)中的ddof1表示计算的是样本标准差分母为 n-1这符合统计学中利用样本估计总体的场景使预测结果更加合理。defmathematics(array):arr_mean%.4f%np.mean(array)# 求均值arr_std%.4f%np.std(array,ddof1)# 求标准差returnarr_mean,arr_std3. 正态分布曲线构建与可视化在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π1e−2σ2(x−μ)2其中sig代表方差即标准差的平方。代码中使用np.linspace生成了一个覆盖 μ ± 6σ 范围的 x 轴坐标这几乎涵盖了99.999%的数据范围保证了曲线的完整性。plt.fill_between函数通过where(x -1) (x 1)参数巧妙地只对合格范围内的区域进行颜色填充增强了可视化效果。xnp.linspace(u-6*sig,u6*sig,200)# 定义域ynp.exp(-(x-u)**2/(2*sig**2))/(math.sqrt(2*math.pi)*sig)# 定义曲线函数plt.plot(x,y,g,linewidth2,labelru{},σ{}.format(%.4f%u,%.4f%σ))# 画曲线plt.fill_between(x,y1y,y20,where(x-1)(x1),facecolorblue,alpha0.2)# 填充积分区域4. 合格率计算数值积分 (func和quad)合格率即曲线在合格范围 [-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,errintegrate.quad(func,-1,1)print(Integral area:,fArea)quad函数返回两个值fArea是积分结果即合格率err是估计的绝对误差。最后通过plt.text将计算出的合格率以文本形式标注在图上使结果一目了然。五、结果演示与分析运行脚本后程序会为 Excel 中的每一列数据即每个方向的俯仰角数据生成一张图片并打印出对应的合格率。这些结果直观地展示了正态分布参数μ 和 σ对合格率的决定性影响均值越靠近0、标准差越小合格率越高。六、结论本文介绍了一种利用正态分布模型预测激光雷达俯仰角合格率的方法并给出了完整的 Python 代码实现。通过将原始数据拟合为正态分布曲线并计算合格范围内的曲线下面积该方法能够定量评估质量将合格率从一个简单的比例提升为一个基于理论分布的概率值更具预测性。直观诊断问题通过观察曲线和参数μ, σ可以快速判断质量问题的来源。例如均值偏移可能指向系统性误差如安装校准问题而标准差过大可能指向随机性误差如工艺稳定性问题。实现流程自动化该脚本能够批量处理 Excel 文件中的多组数据并自动生成图文并茂的报告大大提高了数据分析的效率。这种基于统计模型的质量分析方法不仅适用于激光雷达的俯仰角测试也可推广至其他具有正态分布特征的工业参数的质量评估中为智能制造中的数据驱动决策提供有力支持。附完整代码#!/usr/bin/env python# -*- coding: utf-8 -*-importnumpyasnpfrommatplotlibimportpyplotaspltimportmathfromscipyimportintegrateimportxlrd# todo 计算均值和标准差defmathematics(array):arr_mean%.4f%np.mean(array)# 求均值arr_std%.4f%np.std(array,ddof1)# 求标准差returnarr_mean,arr_std# todo 读取数据defget_data():# 导入需要读取的第一个Excel表格的路径data1xlrd.open_workbook(rD:\python_demo\数学运算\俯仰角数据.xlsx)tabledata1.sheets()[0]# 获取第一行的内容,索引从0开始rowtable.row_values(0)# 获取一共多少列colstable.ncols# 获取每一列的数据col_datas[]foriinrange(cols):# 获取每一列的数据并将第一个数据过滤col_datas.append(table.col_values(i)[1:])returncol_datas,row# todo 生成数学期望值、标准差、方向defplotting_parameters():value_list[]rowget_data()[1]foriinrange(len(row)):resultlist(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_listplotting_parameters()forvalueinvalue_list:ufloat(value[0])# 均值μσfloat(value[1])# 标准差δsigmath.sqrt(σ)# 方差xnp.linspace(u-6*sig,u6*sig,200)# 定义域ynp.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,linewidth2,labelru{},σ{}.format(%.4f%u,%.4f%σ))# 画曲线带图示。保留四位小数plt.fill_between(x,y1y,y20,where(x-1)(x1),facecolorblue,alpha0.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$,horizontalalignmentcenter,fontsize14)# 增加说明文本# 求积分计算-1,1之间的概率# noinspection PyTupleAssignmentBalancefArea,errintegrate.quad(func,-1,1)print(Integral area:,fArea)plt.text(1.5,0.4,{}俯仰角合格率:{}.format(value[2],%.4f%fArea),horizontalalignmentcenter,fontpropertiesSimHei,fontsize10)# 增加说明文本plt.grid(True)# 网格线plt.legend(locupper right,fontsize10)# 标签位置plt.savefig(r.\{}俯仰角.png.format(value[2]),bbox_inchestight)# 保存为图片print(已保存“{}俯仰角.png”.format(value[2]))plt.show()if__name____main__:main()
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2434844.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!