电化学稳态阻抗谱(EIS)在等效电路已知的情况下进行拟合,python第三方工具包impedance.py
写在前面
电化学稳态阻抗谱(EIS)在等效电路已知的情况下进行拟合,是防腐蚀涂层过程中的很重要的一个部分,通过对具有物理意义的等效电路的元器件进行拟合可以得到涂层在腐蚀环境中的状态变化,从而监控涂层的某一个方面的参数的变化来实现防腐蚀涂层的失效衍化过程的可数值化的过程。
一般来说,分析的过程如下:
- 从电化学工作站中导出EIS的数据,保存为txt纯文本格式。
- 使用电化学拟合的科学计算软件(如Zview,Zsimpwin)导入上面保存的数据
- 在Zsimpwin中填入测试样品的面积
- 观察Zsimpwin中该样品的EIS的能斯特图和波特图的形状,以判断时间常数
- 选择合适的等效电路(根据所在领域的文献的大多数的选用情况再结合EIS的能斯特图的形状)进行初次拟合
- 初次拟合出现的拟合后的参数,判断方差是否合理,如果不合理,则以倍数甚至数量级来固定输入参数,进行二次拟合
- 多次拟合和查看方差直至方差合理,读取结束参数,导出拟合的数据
- 用origin进行作图,将拟合数据和实验数据做在同一个的图中,清楚地对比看到拟合相趋势能否和实验数据重合
上面的步骤重复而且容易忘记保存,这样的工作其实很适合使用python来进行办公自动化和数学计算,及可视化
在思考的过程,我找到了一个第三方的包impedance.py
关于impedance.py的使用
impedance.py是用于分析电化学阻抗谱(EIS)数据的Python软件包。
安装
在python的环境中pip install impedance即可
pip install impedance
运行实例
下载示例文件
实例的数据文件,下载点这里exampleData.csv
格式如下:
频率 | 实部 | 虚部 |
---|---|---|
3.16E-03 | 4.95E-02 | -2.04E-02 |
3.98E-03 | 4.78E-02 | -1.83E-02 |
5.01E-03 | 4.61E-02 | -1.63E-02 |
6.31E-03 | 4.46E-02 | -1.46E-02 |
7.94E-03 | 4.31E-02 | -1.30E-02 |
1.00E-02 | 4.18E-02 | -1.16E-02 |
1.26E-02 | 4.06E-02 | -1.03E-02 |
1.58E-02 | 3.95E-02 | -9.11E-03 |
2.00E-02 | 3.86E-02 | -8.04E-03 |
读取数据
from impedance import preprocessing
frequencies, Z = preprocessing.readCSV('./exampleData.csv')
将数据限制在第一象限
frequencies, Z = preprocessing.ignoreBelowX(frequencies, Z)
定义阻抗模型
对于这个模型,它的电流的数字式为【R0-p(R1,C1)-p(R2-Wo1,C2)】,p是平行para,也就是并联的缩写,括号内可以无限套娃
常用的腐蚀模型可以写成【Rs-p(p(Cc,Rc)-Rp,Cdl)】
#等效电路模型
circuit = 'R0-p(R1,C1)-p(R2-Wo1,C2)'
#根据等效电路,从左到右对每个电路元件给出起始的拟合值
initial_guess = [.01, .01, 100, .01, .05, 100, 1]
#设计circuit为我们选用的电化学模型电路,并传入起始值
circuit = CustomCircuit(circuit, initial_guess=initial_guess)
将阻抗模型拟合到数据
将实验中的frequencies, Z值传入到设定的等效电路中进行拟合,拟合方法为scipy.optimize软件包中 的curve_fit通过电路模型的非线性最小二乘回归到阻抗数据。
circuit.fit(frequencies, Z)
print(circuit)
显示结果如下
Circuit string: R0-p(R1,C1)-p(R2-Wo1,C2)
Fit: TrueInitial guesses:R0 = 1.00e-02 [Ohm]R1 = 1.00e-02 [Ohm]C1 = 1.00e+02 [F]R2 = 1.00e-02 [Ohm]Wo1_0 = 5.00e-02 [Ohm]Wo1_1 = 1.00e+02 [sec]C2 = 1.00e+00 [F]Fit parameters:R0 = 1.65e-02 (+/- 1.54e-04) [Ohm]R1 = 8.68e-03 (+/- 1.91e-04) [Ohm]C1 = 3.32e+00 (+/- 1.90e-01) [F]R2 = 5.39e-03 (+/- 2.06e-04) [Ohm]Wo1_0 = 6.31e-02 (+/- 1.94e-03) [Ohm]Wo1_1 = 2.33e+02 (+/- 1.62e+01) [sec]C2 = 2.20e-01 (+/- 1.75e-02) [F]
分析拟合结果,返回对应的实部虚部的值
当获得了拟合的最终各个元器件参数值并代入等效电路模型,我们可以通过将实验的frequencies得到拟合后的实部和虚部的值
Z_fit = circuit.predict(frequencies)
print(Z_fit)
将结果可视化
import matplotlib.pyplot as plt
from impedance.visualization import plot_nyquistfig, ax = plt.subplots()
plot_nyquist(ax, Z, fmt='o')
plot_nyquist(ax, Z_fit, fmt='-')plt.legend(['Data', 'Fit'])
plt.show()
扩展
impedance.py 还可以作波特图
circuit.plot(f_data=frequencies, Z_data=Z, kind='bode')
impedance.py 还可以验证电化学数据的准确性,也就是Kramers-Kronig Relations,K-K拟合
M, mu, Z_linKK, res_real, res_imag = linKK(f, Z, c=.5, max_M=100, fit_type='complex', add_cap=True)
print('\nCompleted Lin-KK Fit\nM = {:d}\nmu = {:.2f}'.format(M, mu))
impedance.py 可以通过遍历的方式来实现多个EIS数据的拟合
思考
- impedance.py拟合的方差是多少,能否满足科研需要?
- 如何调整输入的初始参数才能提高拟合值,得到期待的拟合数?和Zsimpwin相比的优势在哪里
- CPE非恒相位元器件的输入值怎么控制,这里面是有2个参数的。
文章出处来源
这个介绍性的文章的出处是
impedance.py的官网
有不懂的可以上去学习一下
电化学稳态阻抗谱(EIS)在等效电路已知的情况下进行拟合,python第三方工具包impedance.py相关推荐
- 对电化学稳态阻抗谱(EIS)的数据进行自动化处理并可视化作图/画图(科研投稿)
写在前面 对于一个做防腐蚀涂层的化学材料人来说, 在做电化学实验的时候,我们会获得很多的电化学稳态阻抗谱(EIS),其中包含频率.实部.虚部,然后需要将这些EIS的数据进行平均值处理,接着模量等于实部 ...
- matlab电力系统潮流计算软件matpower_衡真课堂 | 电力系统稳态与暂态分析
电力系统稳态分析 电力系统稳态运行指电力系统正常的.相对静止的运行状态. 电力系统稳态分析包括三个方面 ①电力系统的基本知识和等值网络: ②电力系统正常运行状况的分析和计算: ③电力系统有功功率-频率 ...
- 二维稳态热传导基本方程的有限元方程
二维稳态热传导基本方程的有限元方程 - 知乎 二维稳态热传导基本方程的有限元求解(2) - 知乎 关于学习拉格朗日矩形单元和serendipity四边形单元形函数的构造方法 - 知乎 CFD理论学习- ...
- 正弦稳态电路的阻抗和功率
阻抗和导纳 阻抗和导纳是电阻和电导在正弦稳态电路上的一种推广,反应了电路元件两端电压与电流的幅度关系和相位关系. 阻抗(Ω\OmegaΩ) 导纳(S 西门子) 定义式 Z=defU˙I˙=UI∠ ...
- Part-Ⅰ3. 稳态等效电路建模/损耗/效率(三)
如何获得模型的输入端口 用前面章节学到的建立电路模型的方法分析如下buck电路,电感绕线电阻由串联电阻RLR_LRL代替 电感电压平均值为<vL>=0=DVg−ILRL−VC<v_ ...
- 二维稳态热传导 代码实现_常用振动激励方式:稳态正弦 、瞬态和随机激振
在测量机械设备或结构的振动力学参量或动态性能,如固有频率.阻尼.刚度.响应和模态等时,需要对被测对象施加一定的外力,让其作受迫振动或自由振动,以便获得相应的激励及其响应.激励方式通常可以分为稳态正弦激 ...
- 双稳态电路的两个稳定状态是什么_从双稳态到双“更”稳态 ——叶芳伟课题组在拓扑光子学研究方向上取得新进展...
你拿起一个计算器,输入"2+6",计算器会输出"8":过了一会儿,你又在这个计算器上输入"2+6",它依然会输出"8". ...
- 什么叫单稳态,双稳态
我们知道,数字电路的信号只有两种状态:逻辑低或逻辑高,即通常所说的0状态或1状态.0电平或1电平. 单稳电路指的是该电路的输出信号只能在一种状态(逻辑高或低)下是稳定的,而当电路的输出处在另一种状态下 ...
- 电流matlab正玄函数,用MATLAB求解线性电路的正弦稳态响应.doc
用MATLAB求解线性电路的正弦稳态响应.doc 用MATLAB求解线性电路的正弦稳态响应 阻抗和导纳. 一个含线性电阻.电感和电容等元件,但不含独立元的一端口,但它在角频率为w 的正弦电压或电流激励 ...
- Microbiome | 中科院/农科院/浙大解析微生物介导的植物气生根黏液固氮功能及稳态维持机制...
植物气生根-黏液微生境具有固氮生物学功能及其稳态维持机制 Microbiota-mediated nitrogen fixation and microhabitat homeostasis in a ...
最新文章
- UVA679 小球下落 Dropping Balls(二叉树的编号)
- 学习python需要什么基础-学习python需要什么基础
- 技术大牛长成记之不要光看热闹
- Android init.rc执行顺序
- CVPR 2020 | 反传统的无监督人脸旋转方案:旋转-渲染
- Struts 2基础
- [js] innerHTML与outerHTML有什么区别?
- 前端学习(2216):react元素渲染
- Windows下VC++显示UTF-8编码中文
- 数据结构 2-3-4 静态链表
- [BUG]Git Sever搭建与相关错误处理
- 试用了GIMP的Smart remove selection,结果有些失望啊,哈哈
- (转)Top Ten Web Hacking Techniques of 2011
- python加密狗的制作_制作u盘加密狗
- 幼儿园进行计算机培训心得体会,幼儿园教师课堂培训心得感悟五篇
- 软件测试工程师需要学什么?全网最全,测试工程师技能树,吐血整理
- 股市集合竞价藏了很多秘密
- YarnAllocator:Container killed by YARN for exceeding memory limits. spark.yarn.executor.memoryOverhe
- 关于电平转换电路1.8V转3.3V
- c++镇国之争游戏(带存档,无bug)