示例#1
0
def test_model_io():
    # get example data
    data = np.genfromtxt('./data/exampleData.csv', delimiter=',')

    frequencies = data[:, 0]
    Z = data[:, 1] + 1j * data[:, 2]

    randles = CustomCircuit(initial_guess=[.01, .005, .1, .005, .1, .001, 200],
                            circuit='R_0-p(R_1,C_1)-p(R_1,C_1)-W_1/W_2')
    randles.fit(frequencies, Z)

    print(randles)

    model_export(randles, './test_io.json')
    randles2 = model_import('./test_io.json')
    print(randles2)

    assert randles == randles2
示例#2
0
def test_CustomCircuit():

    initial_guess = [.01, .005, .1, .005, .1, .001, 200]
    custom_string = 'R0-p(R1,C1)-p(R2,C2)-W1'
    custom_circuit = CustomCircuit(initial_guess=initial_guess,
                                   circuit=custom_string)

    # check get_param_names()
    print(custom_circuit.get_param_names())
    assert custom_circuit.get_param_names() == \
        ['R0', 'R1', 'C1', 'R2', 'C2', 'W1_0', 'W1_1']

    # check _is_fit()
    assert not custom_circuit._is_fit()

    initial_guess = [.01, .005, .1]
    custom_string = 'R_0-p(R_1,C_1)'
    custom_circuit = CustomCircuit(initial_guess=initial_guess,
                                   circuit=custom_string,
                                   name='Test')

    line = '\n-------------------------------\n'
    assert str(custom_circuit) == line + \
        'Circuit: Test\n' + \
        'Circuit string: R_0-p(R_1,C_1)\n' + \
        'Fit: False\n' + line + \
        'Initial guesses:\n' + \
        '\tR_0 = 1.00e-02\n' + \
        '\tR_1 = 5.00e-03\n' + \
        '\tC_1 = 1.00e-01\n'

    # check that it rejects improper inputs
    # enforcing the length of initial_guess
    try:
        initial_guess = [.01, .005, .1, .005, .1, .001, 200]
        custom_string = 'R_0-p(R_1,E_1/E_2)-p(R_1,C_1)-W_1/W_2'
        custom_circuit = CustomCircuit(initial_guess=initial_guess,
                                       circuit=custom_string)
    except (AssertionError):
        pass
    else:
        raise Exception('unhandled error occurred')

    return
示例#3
0
def test_CustomCircuit():

    initial_guess = [.01, .005, .1, .005, .1, .001, 200]
    custom_string = 'R0-p(R1,C1)-p(R2,C2)-W1'
    custom_circuit = CustomCircuit(initial_guess=initial_guess,
                                   circuit=custom_string)

    # check get_param_names()
    full_names, all_units = custom_circuit.get_param_names()
    assert full_names == ['R0', 'R1', 'C1', 'R2', 'C2', 'W1_0', 'W1_1']
    assert all_units == ['Ohm', 'Ohm', 'F', 'Ohm', 'F', 'Ohm', 'sec']

    # check _is_fit()
    assert not custom_circuit._is_fit()

    initial_guess = [.01, .005, .1]
    custom_string = 'R0-p(R1,C1)'
    custom_circuit = CustomCircuit(initial_guess=initial_guess,
                                   circuit=custom_string,
                                   name='Test')

    assert str(custom_circuit) == \
        '\nName: Test\n' + \
        'Circuit string: R0-p(R1,C1)\n' + \
        'Fit: False\n' + \
        '\nInitial guesses:\n' + \
        '     R0 = 1.00e-02 [Ohm]\n' + \
        '     R1 = 5.00e-03 [Ohm]\n' + \
        '     C1 = 1.00e-01 [F]\n'

    # check that it rejects improper inputs
    # enforcing the length of initial_guess
    try:
        initial_guess = [.01, .005, .1, .005, .1, .001, 200]
        custom_string = 'R0-p(R1,E1)-p(R1,C1)-W1'
        custom_circuit = CustomCircuit(initial_guess=initial_guess,
                                       circuit=custom_string)
    except (AssertionError):
        pass
    else:
        raise Exception('unhandled error occurred')

    return
示例#4
0
def get_fitting_data(data, model, guess):

    if model == "randles":
        circuit = Randles(initial_guess=guess)
    else:
        # circuit = Randles(initial_guess=[.01, .005, .1, .001, 200])
        circuit = CustomCircuit(initial_guess=guess,
                                      circuit=model)
    columns = ['freq/Hz', 'Re(Z)/Ohm', '-Im(Z)/Ohm']

    frequencies = data["freq/Hz"].values
    Z = data['Re(Z)/Ohm'].values - 1j * data['-Im(Z)/Ohm'].values

    instance_of_impedance_lib = circuit.fit(frequencies, Z)
    print(instance_of_impedance_lib)
    param_names = instance_of_impedance_lib.get_param_names()
    param_values = instance_of_impedance_lib.parameters_
    param_error = instance_of_impedance_lib.conf_

    # f_pred = np.logspace(5, -2)
    circuit_fit = circuit.predict(frequencies)

    return circuit_fit, param_names, param_values, param_error
示例#5
0
 if n == 000:
     break
 if n != 0:
     # READ EXPERIM ENT
     data = np.genfromtxt('Impedance -' + str(n) + '.z',
                          skip_header=123,
                          delimiter='')
     data = data[:52]
     frequencies = data[:, 0]
     Z = data[:, 4] + 1j * data[:, 5]
     frequencies = frequencies[np.imag(Z) < 0]
     Z = Z[np.imag(Z) < 0]
     ############## FIG. B
     circuitB = 'R0-p(E, R1-p(C1,R2,W1))'
     initial_guessB = [1, 1, 1, 1000, 1, 100, 1, 1]
     circuitB = CustomCircuit(circuitB, initial_guess=initial_guessB)
     circuitB.fit(frequencies, Z)
     circuitB.parameters_
     print("Схема Б", circuitB)
     P = [
         -1 * n,
         m.log10(circuitB.parameters_[3]),
         m.log10(circuitB.parameters_[4]),
         m.log10(circuitB.parameters_[5])
     ]
     # ФИТТИНГ
     Z_fitB = circuitB.predict(frequencies)
     # Погрешность
     res_meas_real = (Z - circuitB.predict(frequencies)).real / np.abs(Z)
     res_meas_imag = (Z - circuitB.predict(frequencies)).imag / np.abs(Z)
     # ploting
示例#6
0
    #while measuring the EIS we do not want flow
    actions.pump_off()
    time.sleep(2)

    eis_exp = actions.eis(start_freq, end_freq, points, blockd=blockd)

    Zreal, Zimag, Zfreq = eis_exp['data']
    Z = np.array(Zreal) + 1j * np.array(Zimag)
    frequencies = np.array(Zfreq)

    #do both a randles and custom fit and check which one works better
    randles = Randles(initial_guess=[.01, .005, .1, .001, 200])
    RRC = CustomCircuit(circuit='R0-p(R1,C1)',
                        initial_guess=[
                            np.percentile(Z.real, 5),
                            np.percentile(Z.real, 95), 10**-5
                        ])

    #fit them
    res_randles = randles.fit(frequencies, Z)
    res_rrc = RRC.fit(frequencies, Z)

    exp_results[sno] = {
        'pulse_params': {
            'centers': centers,
            'pots': pots,
            'widths': widths
        },
        'eis_params': {
            'start_freq': start_freq,
示例#7
0
    del connection
pstat.SetCell(GamryCOM.CellOff)
pstat.Close()

import matplotlib.pyplot as plt
plt.scatter(np.array(Zreal),-np.array(Zimag),c=np.log(Zfreq))
plt.colorbar()
plt.axis('equal')
plt.show()


from impedance.circuits import CustomCircuit
frequencies = np.array(Zfreq)
Z = np.array(Zreal)+1j*np.array(Zimag)
circuit = 'R0-p(R1,C1)'
guess = [np.min(Z.real),np.max(Z.real),10**-6]
circuit_mod = CustomCircuit(circuit,initial_guess=guess)
circuit_mod.fit(frequencies, Z)

Z_fit = circuit_mod.predict(frequencies)

import matplotlib.pyplot as plt
from impedance.plotting import plot_nyquist

fig, ax = plt.subplots()
plot_nyquist(ax, frequencies, Z, fmt='o')
plot_nyquist(ax, frequencies, Z_fit, fmt='-')

plt.legend(['Data', 'Fit'])
plt.show()