AECA的安装有很多种方法。最简单的方法是直接使用预编译版本的二进制可执行文件。
预编译版本的AECA运行比较可靠,毋须安装任何程序运行环境,开箱即可使用。缺点是由于随程序一起打包了运行所需的python运行时和第三方函数库,因此体积比较大,且只支持window平台。
AECA程序是使用python语言进行开发的,从源码运行该程序必须安装Python 3.7x的运行环境。要安装Python运行环境,首先从Python官网下载对应版本和平台的安装包。
安装完python之后,从控制台窗口输入命令
python -V
如果显示Python 3.7.x,则说明python已经安装成功。继续在控制台窗口输入下面的命令
pip --help
执行上述命令后,如果能够看到下面的内容,则说明python的库管理程序pip也安装成功了。如果pip安装不成功,请重新安装python安装包。
Usage:
pip <command> [options]
Commands:
install Install packages.
download Download packages.
uninstall Uninstall packages.
freeze Output installed packages in requirements
……
AECA程序依赖于多个第三方库,必须预先安装这些库,才能成功运行程序,第三方函数库的安装通过pip进行,执行如下命令安装AECA所需的库文件
pip install numpy matplotlib pyQt5 pyqtgraph xlrd xlwt chardet
安装完运行所需的函数库之后,双击AeCA.py即可运行程序。
若需要将源代码打包成二进制文件,也通用需要python的运行环境,具体步骤可以参考上面。打包Python程序,需要先安装pyinstaller,在从控制台窗口输入下面的命令,即可完成安装。
pip install pyinstaller
安装完pyinstaller之后,切换路径到AECA所在文件夹路径,然后执行下面的命令
pyinstaller -i resource/curve.ico -w AECA.py
一段时间后,pyinstaller将程序打包完成,在当前的路径下可以看到新增的dist文件路径,其中的AECA文件夹就是打包的二进制运行程序。
AECA程序全称ATL-电化学分析器(ATL-Electrical Chemistry Analysor),该程序使用Python进行开发,并采用pyQt5开发了图形用户界面,其界面主窗口如下图所示
程序默认是英文界面,同时支持英文、简体中文和繁体中文三种语言,点击Language菜单栏可以进行语言的切换。这儿先简单列举一下AECA程序的主要功能。
- Excel 格式的数据文件转 CSV格式
- Excel 格式的数据文件转 TXT格式
- CSV格式的数据文件转 Excel格式
- CSV格式的数据文件转 TXT格式
- TXT格式的数据文件转 Excel格式
- TXT格式的数据文件转 CSV格式
- 自定义间隔对数据采点:将多个数据点平均成一个点,例如原始数据有1000个点,设间隔为5,则每5个点取平均值,处理后的数据有200个点。
- 自定义间隔对数据微分:和采点不同,间隔微分只会减少尾部的少量数据点,设当前数据集为{(x1,y1),(x2,y2)…(xn,yn)},设间隔为n,则xi处的微分为(yi+n-yi)/( xi+n-xi)。
- 自定义范围对数据截取:根据用户设定的上下限(xmin,xmax),自动截取数据集中满足xmin ≤ xi ≤ xmax的数据点。
- 自定义滤波方法对数据进行平滑降噪:程序内置了均值滤波(Simple),中值滤波(Median),SG滤波(Savitzky_Golay),高斯滤波(Gaussian)和三次样条线插值(Spline);前三种滤波方法都是平滑滤波,是低频增强的空间域滤波技术。空间域的平滑滤波一般采用简单平均法进行,就是求邻近点的平均值。邻域的大小与平滑的效果直接相关,邻域越大平滑的效果越好,但邻域过大,平滑会使边缘信息损失的越大,因此需合理选择邻域的大小。平滑窗口=2*邻域的大小+1,因此窗口大小必须设为奇数。程序的默认值是5,可根据需要在用户界面中自行调节。高斯滤波是根据高斯函数的形状来选择权值的线性平滑滤波器。高斯平滑滤波器对于抑制服从正态分布的噪声非常有效。用户可以通过调节sigma值来改变高斯函数的形状,sigma值越大,平滑效果越好,但信息的损失也越大。三次样条线是通过求解三弯矩方程组得出曲线函数,然后预测未知点数值的方法,其噪声因子S≤sum((yi-spl(xi))**2),噪声因子越大,则曲线越平滑,损失的信息也越多。
- 交换XY轴数据:程序默认的数据形式是电压-容量,微分处理后得到dVdQ-Q数据,对数据交换XY轴即可得到容量-电压数据,微分后即为dQdV-V数据。
- 数据拟合:根据正极的克容量曲线、负极的克容量曲线以及全电池的测试数据,可以拟合出电池中正极的有效质量、负极的有效质量、以及活性锂的损失,从而达到对电池的失效机理进行定量分析的目的。曲线拟合基于最小二乘法的原理,可以对V-Q数据进行拟合,也可以对dVdQ-Q数据进行拟合。程序会自动基于容量数据进行初猜拟合参数,用户可以按需要对参数进行一定的约束。
- 数据的缩放和平移:给定拟合参数,可以对选中的正极或负极曲线的数据进行拉伸、压缩和平移。
- 原始读取的数据,以及后续处理得到的数据可以进行作图,只需勾选对应的数据即可显示在绘图框中。
- 可以设定绘图的方式(散点图或折线图)、曲线的颜色、散点的形状、散点的大小、曲线的线宽等等。
- 图像的缩放、拉伸、局部放大、平移显示等等。
- 将所有绘图的数据导出为一个数据文件。
- 将所绘的曲线导出为图片(支持svg、png、jpg、tif等等)。
- 将曲线数据用matplotlib显示。
如下图所示,点击菜单栏的 文件 菜单,在下拉菜单中选择 打开 ,在二级下拉菜单中会显示三个菜单选项: 正极参考数据 、 负极参考数据 和 测试数据 。用户根据自己的需要选择不同的菜单。
首先载入正极的参考数据,按下快捷键( Atl+P )或点击菜单栏 文件-打开-正极参考数据 ,程序会弹出文件选择窗口如下:
程序支持 Excel 、 CSV 和 TXT 三种数据格式,用户根据自己的实际情况选择数据类型,文件选择窗口会自动过滤出复合条件的数据文件,选择需要读取的文件,然后点击 打开 按钮,或按下 Enter键 。程序会读取文件的数据,并根据文件名显示在数据列表、正极列表和曲线列表三个位置,如下图红框标注所示。
类似地载入负极的参考数据,和测试数据,最终的界面如下图所示。在 数据列表 和 曲线列表 里面列出了所有载入的数据,在 正极列表 、 负极列表 和 全电池列表 里面则分别列出了对应的数据。
当数据点非常密集的时候,可以通过设置间隔采点对数据进行压缩,间隔的值必须是正整数。软件默认间隔为1,也即不对数据进行任何处理;当间隔为n,且n大于1的时候,则将每n个数据点平均成一个数据点。若原始数据点有1000个,设置间隔为5进行采点之后数据量会压缩成200个点。
对于等时间间隔的(也即等容量间隔,按时间进行数据采集)数据,设置一定的间隔进行采点,等效于一种低通线性滤波,可以在一定程度上对数据进行平滑。经采点处理后得到的新数据默认以 当前数据名称+"_S" 进行保存,用户可以在编辑菜单中对数据进行 重命名 。对于非等间隔的数据,不建议进行采点处理!
对散点数据的曲线,由于没有固定的数学表达式,因此曲线的微分通过数据方法,也即差分法计算得到:某点(xi,yi)处的微分dy/dx近似等于(yi+n-yi-n)/( xi+n-xi-n),公式中的n即为微分间隔。程序默认为1,也即(dy/dx)i=(yi+1-yi-1)/( xi+1-xi-1)。微分处理后的数据相比原始数据会减少头尾各n个数据点。经微分处理后得到的新数据默认以 当前数据名称+"_D" 进行保存,用户也可以在编辑菜单中对数据进行重命名。对与微分后的数据,也可以继续做微分处理,等于对原始数据进行二阶微分,以此类推。
类似的微分后的数据也可以做采点、切割、平滑等其他处理,用户可以通过各种操作的任意组合得到自己需要的数据。
对于任意选中的数据集,程序会自动读取x轴的最大值和最小值,并显示在输入框中,也即数据切割的 上下限 。用户可以对数据切割范围进行调整,获得自己所需范围内的数据点。经微分处理后得到的新数据默认以 当前数据名称+"_C" 进行保存,用户也可以在编辑菜单中对数据进行重命名。对于某些测试数据,在起始或者结束位置的,会有少量的几个点数据存在异常,可以通过这种方式删去。需要注意的是,在用半电池数据拟合全电池数据的时候,必须保证半电池的数据段能够覆盖全电池的数据段,因此对数据切割需要用户自己根据曲线来判断范围。
由于仪器精度的原因,测试的电化学数据往往存在大量的噪声,为了能够更加精确地对数据进行分析,可以对数据进行平滑预处理。由于测试的数据不一定是等间隔的,因此无法使用时间域的滤波方法。当前程序支持5种滤波方法:均值滤波(Simple),中值滤波(Median),SG滤波(Savitzky_Golay),高斯滤波(Gaussian)和三次样条线插值(Spline);前三种滤波方法都是线性平滑滤波,邻域的大小与平滑的效果直接相关,邻域越大平滑的效果越好,但邻域过大,平滑会使边缘信息损失的越大,因此需合理选择邻域的大小。平滑窗口=2*邻域的大小+1,因此窗口大小必须设为奇数。程序的默认值是5,用户可根据需要自行调节。高斯滤波是根据高斯函数的形状来选择权值的线性平滑滤波器。高斯平滑滤波器对于抑制服从正态分布的噪声非常有效。用户可以通过调节sigma值来改变高斯函数的形状,sigma值越大,平滑效果越好,但信息的损失也越大。三次样条线是通过求解三弯矩方程组得出曲线函数,然后预测未知点数值的方法,其噪声因子S≤sum((yi-spl(xi))**2),噪声因子越大,则曲线越平滑,损失的信息也越多。
经微分处理后得到的新数据默认以 当前数据名称+"_M" 进行保存,用户也可以在编辑菜单中对数据进行重命名。由于过度平滑会导致数据信息的丢失,因此用户需要酌情调节平滑参数,在数据平滑程度和失真程度之间达到平衡。
数据拟合基于一个简单的物理近似: 全电池曲线=正极曲线-负极曲线。
对于容量损失很大的电池,由于正负极发生了不可逆的变化,其本身的半电池曲线相比循环之前已经发生了很大的变化,此时用原始的半电池数据是很难拟合到全电池的数据的,因此当前版本的软件只能处理循环容量衰退小于20%的失效情况。另外我们不难发现,简化的公式完全忽略了极化的影响,这意味这用软件进行数据拟合的时候必须使用小电流放电的测试数据,因为此时极化的影响可以忽略不计。
假设正极半电池的克容量曲线函数为P(Q,V),负极半电池克容量曲线为函数N(Q,V),全电池曲线为函数M(Q,V)。当正极活性物质质量为w1,活性锂损失为s1的时候,真实的负极半电池曲线为函数P'(Q,V)=P(w1*Q+s1,V);类似的负极活性物质质量为w2,活性锂损失为s2,则负极的半电池曲线为函数N'(Q,V)=N(w2*Q+s2,V)。根据前面的假设,M'(Q,V)= P'(Q,V)- N'(Q,V),误差函数E= M'(Q,V)- M(Q,V)= P(w1*Q+s1,V)- N(w1*Q+s1,V)- M(Q,V)。
从函数P(Q,V)变换到P(w1*Q+s1,V)等效于对将曲线上所有的横坐标进行拉伸压缩和平移,若将原始的数据集的横坐标记为Q,则新的横坐标Q'={w1*q+s1|q∈Q},类比到负极曲线,Q''={w2*q+s2|q∈Q}。由于全电池数据点的横坐标不是和半电池一一对应的,因此,程序基于变换后的曲线数据,使用线性插值法计算每个对应点的正极电压V'和负极电压V''。根据最小二乘法原理,误差函数就可以定义为:
程序的具体操作很简单,选择拟合时所需的 正极参考数据 , 负极参考数据 ,以及需要进行拟合的 全电池测试数据 。程序会自动根据选择的数据进行参数的初猜,并计算当前初猜时候的均方根误差。初猜的参数会显示在下面的四个参数框中,用户可以自己对初始参数进行调整。
选择好所需的数据之后,点击 拟合 按钮,程序就会基于当前的初猜和输入的三组数据进行V-Q曲线的拟合。拟合结束之后,程序会自动更新参数框之中的数值为最后拟合的结果。同时在数据列中会以 正极参考数据名+"_F" , 正极参考数据名+"_F" 和 全电池数据名+"_F" 的命名形式写入最终拟合得到的三条曲线数据,对应于函数P(w1*Q+s1,V),N(w2*Q+s2,V)和M(Q,V)= P(w1*Q+s1,V)- N(w1*Q+s1,V),勾选对应的曲线作图可以查看拟合的曲线和原始的曲线的误差情况。
拟合曲线的横坐标是基于全电池曲线的,因此数据范围受限于全电池曲线的数据,勾选四个参数后面的复选框,将参数锁定,然后选择任意的正负极,点击 **缩放按钮** 可以直接基于当前的参数,最整个曲线的坐标范围进行伸缩和平移变换。程序会基于 **正极参考数据名+"\_N"** , **正极参考数据名+"\_N"** 和 **全电池数据名+"\_N"** 的命名形式写入变换后的曲线数据。
基于dVdQ-Q进行数据拟合和基于V-Q进行数据拟合没有太大区别,用户只需选择数据类型中的dVdQ-Q单选框,然后在选择 正极参考数据 , 负极参考数据 ,以及需要进行拟合的 全电池测试数据 的时候选择原始数据进行微分之后的曲线数据。另外需要注意的是,用微分数据进行参数拟合的时候,误差函数和V-Q数据拟合存在一定的差异。根据复合函数求导法则df(kx)=kdf(x),对于变换后的函数P(w1*Q+s1,V)和N(w2*Q+s2,V),其微分函数并不是dP(w1*Q+s1,V)和dN(w2*Q+s2,V),而是dP(w1*Q+s1,V)/w1和dN(w2*Q+s2,V)/w2。因此误差函数定义为:
下图是用dVdQ-Q进行参数拟合得到的结果
可作图的数据集会以列表的形式展示在曲线画布的下方,勾选数据名称前面的复选框即可在画布上绘制对应的曲线,如图所示。
默认的曲线类型是散点型(scatter)的,软件也支持线条型(Line)的作图方式,通过修改setting.ini配置文件,可以对图像的曲线类型进行修改。
退出软件,用记事本打开程序路径下的setting.ini文件,如下所示:
[FileStructure]defaultExtension=Text File (*.txt)posDataStructure=Voltage:CapacitynegDataStructure=Voltage:CapacityfullDataStructure=Voltage:CapacitydataStructure=Voltage:Capacity [Display]language=Chinese Simplified [Curve] type=scatter colors=FF0000, 0000FF, 00FF00, FFFF00, FF00FF, 00FFFF, 228B22, 191970, 802A2A, A020F0, E3170D, 082E54, FF8000, 6B8E23, FFE384symbols=o, s, t, t1, t2, t3, d, +, x, p, h, starwidth=3size=5 |
---|
将type=scatter修改为type=line,保存setting.ini文件,然后重新启动软件, 此时作图显示就是线型的曲线。
默认的曲线的宽度为3,散点的大小为5,分别修改width和size可以调节曲线的宽度和散点的大小。程序默认的颜色序列是 FF0000 , 0000FF , 00FF00 , FFFF00 , FF00FF , 00FFFF , 228B22 , 191970 , 802A2A , A020F0 , E3170D , 082E54 , FF8000 , 6B8E23 , FFE384 ,用户可根据自己的需要修改颜色的RGB值,或者添加新的颜色值。散点的形状是程序的内置的Symbol,请勿修改。
在画布窗口右击,弹出右击菜单栏,选择最后一个选项Export可以将曲线进行导出。点击Export后会弹出如下图的窗口,用户可以选择将整个图像区域(Entire Scene)导出,也可以只导出曲线区域(Plot)或坐标区域(ViewBox)。导出的格式可以是图片(png、tif、jpg、bmp、webp等等),也可以是SVG格式的矢量图。另外还支持用matplotlib重新绘制当前的曲线,并用matplotlib的功能对曲线进行其他处理(matploblib支持更加丰富的曲线操作和更多的曲线导出格式)。
曲线数据的导出有多种方式,这儿先介绍如何将所有的绘图数据批量导出。在点击Export后弹出的导出窗口中,可以将曲线的数据以CSV的格式进行导出。 在导出的对象列表中,必须选择Plot对象 ; 导出格式列表中,选择最后的CSV from plot data;导出选项列表中,可以设置数据的分割符号(半角逗号,或Tab),数据的精度,以及数据列的格式。 导出后的CSV数据可以用Excel或Origin打开,用户根据自己的需要再进行处理。
在数据列表中选中需要查看的数据集,然后点击 菜单栏 上的 编辑 菜单,选择 查看 功能,当前选择的数据即会以记事本的形式打开。用户可以将数据进行保存,达到数据导出的目的。
类似的,在数据列表中选中需要重命名的数据集,然后点击 菜单栏 上的 编辑 菜单,选择 重命名 功能,即可修改当前选择的数据集的名称。例如拟合过程生成的数据,再修改初猜重新拟合的时候会被覆盖掉,若用户需要保留上一次拟合的结果,可以将数据先进行重命名。
在数据列表中选中数据集,然后点击 菜单栏 上的 编辑 菜单,选择 删除 功能,即可删除当前选择的数据。若选择 全部删除 功能,程序将删除所有的从当前数据衍生出来的文件。
PS:程序基于数据名称来判断是否是从当前数据衍生出来的,若当前数据名称的Full_Data,则所有名称以Full_Data开头的数据都会被删除。若数据经过重命名,且文件名不是以Full_Data为开头的,则不会被删除。
在数据列表中选中数据集,然后点击 菜单栏 上的 编辑 菜单,选择 转置 功能,可以调换当前数据的XY轴。若原始数据为V-Q,微分后得到的是dVdQ-Q的数据;经过转置之后的数据变成Q-V,经过微分处理后还能够得到dQdV-V的数据。
点击 菜单栏 上的 编辑 菜单,选择 导出 功能,可以将当前选中的数据导出到文件,程序支持TXT,CSV和Excel三种格式。