pvanalyze プログラム仕様
PV特性評価ツール pvanalyze.py 技術ドキュメント
PV特性評価ツール
- mode=alpha
反射率/透過率ファイルと膜厚から吸収スペクトルを計算し、 プロットとExcel保存を行います。
- mode=analyze
I-Vデータからパラメータ推定、発電特性解析、量子効率計算、プロットを行います。
- pvanalyze.absorptance_from_alpha(alpha_cm, d_nm)[ソース]
吸収係数と膜厚から吸収率を計算します。
- 詳細説明:
`A = 1 - exp(-alpha * d)`の式を用いて計算します。
- パラメータ:
alpha_cm -- (float or None): 吸収係数 (cm^-1)。
d_nm -- (float): PV層の膜厚 (nm)。
- 戻り値:
float: 計算された吸収率。
- pvanalyze.alpha_at_energy(optical, E_eV)[ソース]
指定されたフォトンエネルギーにおける吸収係数(α)を光学スペクトルデータから補間して取得します。
- パラメータ:
optical -- (dict or None): `analyze_optical`または`read_alpha_from_excel`から返された光学データ辞書。
E_eV -- (float): 取得したいフォトンエネルギー (eV)。
- 戻り値:
float: 指定されたエネルギーにおける吸収係数 (cm^-1)。データがない場合はNaN。
- pvanalyze.analyze_optical(wl_R_nm, R_percent, wl_T_nm, T_percent, d_nm)[ソース]
反射率(R)と透過率(T)のスペクトルデータから吸収率(A)と吸収係数(α)を計算します。
- 詳細説明:
異なる波長スケールのRとTを共通の波長スケールに補間し、 RとTのデータに基づいてAとαを計算します。
- パラメータ:
wl_R_nm -- (numpy.ndarray): 反射率スペクトルの波長データ (nm)。
R_percent -- (numpy.ndarray): 反射率データ (%)。
wl_T_nm -- (numpy.ndarray): 透過率スペクトルの波長データ (nm)。
T_percent -- (numpy.ndarray): 透過率データ (%)。
d_nm -- (float): PV層の膜厚 (nm)。
- 戻り値:
- dict: 計算された光学特性値。
"wl_nm" (numpy.ndarray): 共通波長データ (nm)。
"R" (numpy.ndarray): 反射率 (0-1)。
"Tr" (numpy.ndarray): 透過率 (0-1)。
"A" (numpy.ndarray): 吸収率 (0-1)。
"alpha_cm^-1" (numpy.ndarray): 吸収係数 (cm^-1)。
- pvanalyze.choose_sweep(xs_list, ys_list, sweep_index=0)[ソース]
複数のスイープデータから指定されたインデックスの単一スイープを選択します。
- パラメータ:
xs_list -- (list[numpy.ndarray]): 各スイープのX軸(電圧)データのリスト。
ys_list -- (list[numpy.ndarray]): 各スイープのY軸(電流)データのリスト。
sweep_index -- (int, optional): 選択するスイープのインデックス。デフォルトは0。
- 戻り値:
x (numpy.ndarray): 選択されたスイープのX軸データ。 y (numpy.ndarray): 選択されたスイープのY軸データ。
- pvanalyze.compute_p0(F0, P0, E_eV, lambda_nm)[ソース]
入射フォトンエネルギー密度(P0)を計算します。
- 詳細説明:
入射フォトンフラックス(F0)が与えられている場合はそれから計算し、 そうでない場合は直接指定されたP0を使用します。
- パラメータ:
F0 -- (float or None): 入射フォトンフラックス (cm^-2 s^-1)。Noneの場合はP0を使用。
P0 -- (float or None): 入射フォトンエネルギー密度 (W/cm^2)。Noneの場合はF0から計算。
E_eV -- (float): フォトンエネルギー (eV)。F0からP0を計算する場合に使用。
lambda_nm -- (float): フォトン波長 (nm)。F0からP0を計算する場合に使用。
- 戻り値:
float or None: 計算された入射フォトンエネルギー密度 (W/cm^2)。
- pvanalyze.compute_photon_energy_eV(E_eV, lambda_nm)[ソース]
フォトンエネルギー(eV)を計算します。
- 詳細説明:
フォトンエネルギーが直接与えられている場合はそれを使用し、 そうでない場合は波長から計算します。
- パラメータ:
E_eV -- (float): フォトンエネルギー (eV)。0より大きい場合はこれを使用。
lambda_nm -- (float): フォトン波長 (nm)。`E_eV`が0の場合にこれを使用。
- 戻り値:
float: 計算されたフォトンエネルギー (eV)。
- pvanalyze.consolidate_duplicate_x(x, y)[ソース]
X軸に重複する値がある場合、Y軸の対応する値を平均して重複を解消します。
- パラメータ:
x -- (numpy.ndarray): X軸データ。
y -- (numpy.ndarray): Y軸データ。
- 戻り値:
ux (numpy.ndarray): 重複が解消されたX軸データ。 uy (numpy.ndarray): 重複が解消され、平均化されたY軸データ。
- pvanalyze.estimate_initial_params(V, I_meas, T=300.0)[ソース]
I-Vデータから単一ダイオードモデルの初期パラメータ(I0, ndiode, IPV, Rs, Rsh)を推定します。
- 詳細説明:
estimate_rs_tangent_point, estimate_rsh_tangent_point, `estimate_ndiode_representative_point`などの補助関数を用いて、 各パラメータの初期値を経験的に決定します。
- パラメータ:
V -- (numpy.ndarray): 電圧データ (V)。
I_meas -- (numpy.ndarray): 測定電流データ (A)。
T -- (float, optional): 温度 (K)。デフォルトは300.0。
- 戻り値:
- dict: 推定された初期パラメータ。
"I0" (float): 逆方向飽和電流 (A)。
"ndiode" (float): ダイオード因子。
"IPV" (float): 光電流 (A)。
"Rs" (float): 直列抵抗 (Ω)。
"Rsh" (float): 並列抵抗 (Ω)。
"Ish" (float): 並列抵抗に流れる電流 (A)。
"Vsh" (float): Rsh推定における代表点電圧 (V)。
"Vnd" (float): ndiode推定における代表点電圧 (V)。
- pvanalyze.estimate_ndiode_curve(V, I, T=300.0)[ソース]
I-Vデータから電圧に対するダイオード因子(ndiode)の曲線を推定します。
- 詳細説明:
log(I)の一次微分を計算し、それに基づいて各電圧点におけるダイオード因子を導出します。
- パラメータ:
V -- (numpy.ndarray): 電圧データ (V)。
I -- (numpy.ndarray): 電流データ (A)。
T -- (float, optional): 温度 (K)。デフォルトは300.0。
- 戻り値:
Vn (numpy.ndarray): ダイオード因子が計算された電圧データ。 nn (numpy.ndarray): 各電圧に対応する推定されたダイオード因子。
- pvanalyze.estimate_ndiode_representative_point(V, I, T=300.0, Ish=None)[ソース]
I-V曲線からダイオード因子(ndiode)を推定するための代表点と値を計算します。
- 詳細説明:
順方向バイアス領域でlog(I)の二階微分が最小となる点を特定し、 その点での一次微分からダイオード因子を計算します。
- パラメータ:
V -- (numpy.ndarray): 電圧データ (V)。
I -- (numpy.ndarray): 電流データ (A)。
T -- (float, optional): 温度 (K)。デフォルトは300.0。
Ish -- (float, optional): 並列抵抗に流れる電流の推定値。これを考慮してIを調整します。デフォルトはNone。
- 戻り値:
- dict or None: ダイオード因子推定に関する情報。計算できなかった場合はNone。
"v_rep" (float): 代表点電圧 (V)。
"ndiode" (float): 推定されたダイオード因子。
"slope_logI" (float): 代表点でのlog(I)の傾き (1/V)。
"curvature_logI" (float): 代表点でのlog(I)の二階微分 (1/V^2)。
- pvanalyze.estimate_rs_tangent_point(V, I)[ソース]
I-V曲線から直列抵抗(Rs)を推定するための接点と抵抗値を計算します。
- 詳細説明:
順方向バイアス領域でdI/dVが最大となる点を特定し、その点での接線からRsを計算します。
- パラメータ:
V -- (numpy.ndarray): 電圧データ (V)。
I -- (numpy.ndarray): 電流データ (A)。
- 戻り値:
- dict: 直列抵抗推定に関する情報。
"v_rep" (float): 接点電圧 (V)。
"i_rep" (float): 接点電流 (A)。
"Is" (float): 接点電流 (A) (互換性のため)。
"Rs" (float): 推定された直列抵抗 (Ω)。
"slope" (float): 接線の傾き (A/V)。
"intercept" (float): 接線のY切片 (A)。
"xx" (numpy.ndarray): 接線フィッティングに使用されたXデータ。
"yy" (numpy.ndarray): 接線フィッティングに使用されたYデータ。
"idx" (int): 接点のインデックス。
- pvanalyze.estimate_rsh_tangent_point(V, I)[ソース]
I-V曲線から並列抵抗(Rsh)を推定するための接点と抵抗値を計算します。
- 詳細説明:
逆方向バイアス領域でdI/dVが最小となる点(絶対値)を特定し、 その点での接線からRshを計算します。
- パラメータ:
V -- (numpy.ndarray): 電圧データ (V)。
I -- (numpy.ndarray): 電流データ (A)。
- 戻り値:
- dict: 並列抵抗推定に関する情報。
"v_rep" (float): 接点電圧 (V)。
"i_rep" (float): 接点電流 (A)。
"Ish" (float): 接点電流 (A) (互換性のため)。
"Rsh" (float): 推定された並列抵抗 (Ω)。
"slope" (float): 接線の傾きの絶対値 (A/V)。
"intercept" (float): 接線のY切片 (A)。
"slope_fit_raw" (float): フィットされた直線の元の傾き (A/V)。
"intercept_fit_raw" (float): フィットされた直線の元のY切片 (A)。
"xx" (numpy.ndarray): 接線フィッティングに使用されたXデータ。
"yy" (numpy.ndarray): 接線フィッティングに使用されたYデータ。
"idx" (int): 接点のインデックス。
- pvanalyze.exec_alpha(args)[ソース]
`alpha`または`make_alpha`モードでプログラムを実行するメイン関数。
- 詳細説明:
光学スペクトルファイル(RとT)を読み込み、吸収率と吸収係数を計算し、 結果をプロットしてExcelファイルに保存します。
- パラメータ:
args -- (argparse.Namespace): コマンドライン引数。
- 戻り値:
なし
- pvanalyze.exec_analyze(args)[ソース]
`analyze`モードでプログラムを実行するメイン関数。
- 詳細説明:
暗電流および光照射I-Vファイルを読み込み、初期パラメータと光起電力性能指標を推定し、 量子効率を計算します。光学データが利用可能な場合はそれも考慮に入れます。 結果を標準出力に表示し、比較プロットを作成します。
- パラメータ:
args -- (argparse.Namespace): コマンドライン引数。
- 戻り値:
なし
- pvanalyze.fit_local_line(x, y, center_idx, npts=7)[ソース]
指定された中心インデックスの周囲のデータポイントを用いて局所的な線形フィッティングを行います。
- パラメータ:
x -- (numpy.ndarray): X軸データ。
y -- (numpy.ndarray): Y軸データ。
center_idx -- (int): フィッティングの中心となるデータポイントのインデックス。
npts -- (int, optional): フィッティングに使用するデータポイント数。デフォルトは7。
- 戻り値:
a (float): フィットされた直線の傾き。 b (float): フィットされた直線のY切片。 xx (numpy.ndarray): フィッティングに使用されたXデータ。 yy (numpy.ndarray): フィッティングに使用されたYデータ。 i0 (int): フィッティングに使用されたデータの開始インデックス。 i1 (int): フィッティングに使用されたデータの終了インデックス(排他的)。
- pvanalyze.initialize()[ソース]
コマンドライン引数を解析し、プログラムの初期設定を行います。
- 詳細説明:
`argparse`モジュールを使用して、実行モード、ファイルパス、温度、膜厚などの パラメータを定義し、ユーザー入力から値をパースします。
- 戻り値:
args (argparse.Namespace): 解析された引数オブジェクト。 parser (argparse.ArgumentParser): 引数パーサーオブジェクト。
- pvanalyze.interpolate_to_common_wavelength(wl_ref, y_ref, wl_target)[ソース]
参照波長スケール上のデータをターゲット波長スケールに線形補間します。
- パラメータ:
wl_ref -- (numpy.ndarray): 参照波長データ (nm)。
y_ref -- (numpy.ndarray): 参照Y軸データ。
wl_target -- (numpy.ndarray): 補間対象のターゲット波長データ (nm)。
- 戻り値:
numpy.ndarray: ターゲット波長スケールに補間されたY軸データ。
- pvanalyze.local_poly_value(x, y, x0, npts=7, order=3)[ソース]
指定されたX座標の周囲のデータポイントを使用して、局所的な多項式フィッティングを行い、 `x0`におけるY値を推定します。
- パラメータ:
x -- (numpy.ndarray): X軸データ。
y -- (numpy.ndarray): Y軸データ。
x0 -- (float): Y値を推定するX座標。
npts -- (int, optional): フィッティングに使用するデータポイント数。デフォルトは7。
order -- (int, optional): 多項式フィッティングの次数。デフォルトは3。
- 戻り値:
float: `x0`における推定されたY値。
- pvanalyze.plot_alpha(optical, outfile=None, pause=False)[ソース]
吸収係数スペクトル(α vs フォトンエネルギー)をプロットします。
- パラメータ:
optical -- (dict): `analyze_optical`関数から返された光学データ辞書。
outfile -- (str, optional): プロットを保存するファイルパス。Noneの場合、画面に表示します。デフォルトはNone。
- 戻り値:
matplotlib.figure.Figure: 作成されたMatplotlib Figureオブジェクト。
- pvanalyze.plot_iv_comparison(dark_sweeps, light_sweeps, S, light_metrics, dark_params=None, light_params=None, outfile=None, T=300.0, pause=False)[ソース]
暗電流I-Vおよび光照射I-Vデータと、関連する推定値や解析結果を比較プロットします。
- 詳細説明:
以下の4つのサブプロットを作成します。 - log(|I|)-V曲線(暗電流と光電流)。 - 線形J-V曲線(順方向と逆方向)。RsとRshの接線、Ish(0)点を表示。 - ndiode-V曲線と代表点。 - 光起電力出力(-J vs V)。MPP, Voc, Jsc点を表示。
- パラメータ:
dark_sweeps -- (list[tuple[numpy.ndarray, numpy.ndarray]]): 暗電流測定のI-Vスイープデータのリスト。
light_sweeps -- (list[tuple[numpy.ndarray, numpy.ndarray]]): 光照射測定のI-Vスイープデータのリスト。
S -- (float): デバイスの面積 (cm^2)。
light_metrics -- (dict): 光照射下のI-Vデータから計算された光起電力性能指標。
dark_params -- (dict, optional): 暗電流I-Vデータから推定された初期パラメータ。Rs/Rshの接線表示に使用。デフォルトはNone。
light_params -- (dict, optional): 光照射I-Vデータから推定された初期パラメータ。I0/IPVの表示に使用。デフォルトはNone。
outfile -- (str, optional): プロットを保存するファイルパス。Noneの場合、画面に表示します。デフォルトはNone。
T -- (float, optional): 温度 (K)。ndiode曲線の計算に使用。デフォルトは300.0。
- 戻り値:
matplotlib.figure.Figure: 作成されたMatplotlib Figureオブジェクト。
- pvanalyze.print_args_and_derived(args, E_use=None, P0_use=None)[ソース]
解析されたコマンドライン引数と派生値を標準出力に表示します。
- パラメータ:
args -- (argparse.Namespace): 解析された引数オブジェクト。
E_use -- (float): 使用されるフォトンエネルギー (eV)。
P0_use -- (float or None): 使用される入射光パワー密度 (W/cm^2)。
- 戻り値:
なし
- pvanalyze.pv_metrics_from_iv(V, I, S)[ソース]
I-Vデータから太陽電池の主要な性能指標(Voc, Jsc, FF, Pmaxなど)を計算します。
- パラメータ:
V -- (numpy.ndarray): 電圧データ (V)。
I -- (numpy.ndarray): 電流データ (A)。
S -- (float): 電極面積 (cm^2)。
- 戻り値:
- dict: 以下の主要な太陽電池性能指標を含む辞書。
"Voc_V" (float): 開放電圧 (V)。
"Jsc_A_cm2" (float): 短絡電流密度 (A/cm^2)。
"Jsc_mA_cm2" (float): 短絡電流密度 (mA/cm^2)。
"Vop_V" (float): 最大出力動作電圧 (V)。
"Jop_A_cm2" (float): 最大出力動作電流密度 (A/cm^2)。
"Jop_mA_cm2" (float): 最大出力動作電流密度 (mA/cm^2)。
"Pmax_W_cm2" (float): 最大出力電力密度 (W/cm^2)。
"Pmax_mW_cm2" (float): 最大出力電力密度 (mW/cm^2)。
"FF" (float): 曲線因子。
- pvanalyze.quantum_efficiencies(F0, A_abs, JPV_A_cm2, Jsc_A_cm2)[ソース]
量子効率(EQEとIQE)を計算します。
- 詳細説明:
入射フォトンフラックス、吸収率、光電流(JPV)、短絡電流密度(Jsc)に基づいて、 生成効率と収集効率を評価します。
- パラメータ:
F0 -- (float or None): 入射フォトンフラックス (cm^-2 s^-1)。Noneまたは0の場合はNaNを返します。
A_abs -- (float or None): 特定のエネルギーにおける吸収率。NoneまたはNaNの場合はIQEをNaNとします。
JPV_A_cm2 -- (float): 光電流密度 (A/cm^2)。
Jsc_A_cm2 -- (float): 短絡電流密度 (A/cm^2)。
- 戻り値:
- dict: 計算された量子効率。
"EQE_gen" (float): 生成外部量子効率。
"IQE_gen" (float): 生成内部量子効率。
"EQE" (float): 外部量子効率。
"IQE" (float): 内部量子効率。
- pvanalyze.read_alpha_from_excel(infile)[ソース]
Excelファイルから吸収スペクトル(alpha)データを読み込みます。
- 詳細説明:
`save_alpha_to_excel`関数によって保存された形式のExcelファイルを想定しています。 `alpha_spectrum`シートから波長、R、Tr、A、alphaのデータを抽出します。
- パラメータ:
infile -- (str): 読み込むExcelファイルのパス。
- 戻り値:
- dict: 波長、反射率、透過率、吸収率、吸収係数を含む辞書。
"wl_nm" (numpy.ndarray): 波長 (nm)。
"R" (numpy.ndarray): 反射率。
"Tr" (numpy.ndarray): 透過率。
"A" (numpy.ndarray): 吸収率。
"alpha_cm^-1" (numpy.ndarray): 吸収係数 (cm^-1)。
- pvanalyze.read_data(infile, xmin=None, xmax=None, ndataskip=0)[ソース]
指定されたCSVファイルからI-Vデータを読み込みます。
- 詳細説明:
ファイル内のメタデータ(記録時間、データ名)を抽出し、電圧と電流のデータポイントをパースします。 複数のスイープを検出し、それぞれをリストに分割します。
- パラメータ:
infile -- (str): 読み込むCSVファイルのパス。
xmin -- (float, optional): X軸(電圧)の最小値。これより小さい値はスキップされます。デフォルトはNone。
xmax -- (float, optional): X軸(電圧)の最大値。これより大きい値はスキップされます。デフォルトはNone。
ndataskip -- (int, optional): データポイントをスキップする間隔。0の場合、スキップしません。デフォルトは0。
- 戻り値:
xs_list (list[numpy.ndarray]): 各スイープのX軸(電圧)データのリスト。 ys_list (list[numpy.ndarray]): 各スイープのY軸(電流)データのリスト。 inf (dict): ファイルから抽出されたメタデータ。
- pvanalyze.read_optical_spectrum(infile)[ソース]
指定されたテキストファイルから光学スペクトルデータ(反射率Rまたは透過率T)を読み込みます。
- 詳細説明:
ファイル内のタブ区切りまたはスペース区切りのデータをパースし、 波長とスペクトル値のペアを抽出します。 重複する波長を処理し、波長順にソートします。
- パラメータ:
infile -- (str): 読み込む光学スペクトルファイルのパス。
- 戻り値:
wl (numpy.ndarray): 波長 (nm)。 val (numpy.ndarray): スペクトル値 (RまたはTのパーセンテージ)。 info (dict): ファイルから抽出されたメタデータ(ファイル名、ラベル、Y軸単位など)。
- pvanalyze.save_alpha_to_excel(optical, outfile_xlsx, meta=None)[ソース]
吸収スペクトルデータをExcelファイルに保存します。
- 詳細説明:
`alpha_spectrum`というシートにフォトンエネルギー、波長、R、Tr、A、alphaのデータを書き込みます。 `summary`シートには膜厚やファイル名、平均値などのメタデータを保存します。
- パラメータ:
optical -- (dict): `analyze_optical`関数から返された光学データ辞書。
outfile_xlsx -- (str): 保存するExcelファイルのパス。
meta -- (dict, optional): 保存する追加のメタデータ。デフォルトはNone。
- 戻り値:
なし
- pvanalyze.smooth_polyfit(y, window_points=5, poly_order=3)[ソース]
多項式フィッティングを用いたSavitzky-Golay風の平滑化をデータに適用します。
- 詳細説明:
各データポイントを中心に指定されたウィンドウ内のデータに対して多項式フィッティングを行い、 中心点の値を予測することで平滑化を行います。
- パラメータ:
y -- (numpy.ndarray): 平滑化するY軸データ。
window_points -- (int, optional): フィッティングに使用するウィンドウ内のデータポイント数。奇数である必要があります。デフォルトは5。
poly_order -- (int, optional): 多項式フィッティングの次数。デフォルトは3。
- 戻り値:
ys (numpy.ndarray): 平滑化されたY軸データ。