-
Notifications
You must be signed in to change notification settings - Fork 0
/
resonance_model.py
112 lines (96 loc) · 4.43 KB
/
resonance_model.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# %% Import libraries
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import get_material_impedance as model
%matplotlib widget
# %% Define variables
# Sweep settings
min_freq = 1e3 # Sweep start frequency (Hz)
max_freq = 110e6 # Sweep end frequency (Hz)
num_points = 20001 # Number of points between start and end
# Material Properties
epsilon_33 = 173 #4000 # Relative dielectric constant
c_33 = 9.85e10 # Elastic stiffness coefficient (N/m^2)
d_33 = 84 #280 # Piezoelectric coefficient (pC/N)
rho = 4520 #5570 # Density (kg/m^3)
delta_m = 0.02 # Mechanical losses
delta_e = 0.08 # Dielectric losses
# Material Geometry
A = 97.022e-6 # Electrode area (m^2)
t = 1.34e-3 # Thickness (m)
fixture_weight = 46.02*9.81
fixture_stress = fixture_weight/ (np.pi*2**2)
e_33 = d_33 * fixture_stress
(freq, Z, f_1) = model.get_impedance(epsilon_33, c_33, e_33, rho, A, t, delta_e, delta_m, min_freq=min_freq, max_freq=max_freq, num_points=num_points)
k = t/A
path = '/Users/paullj/Library/CloudStorage/OneDrive-UniversityofBath/FYP/Experiments/Analysis/Processed Data/k_3_data.csv'
# path = '/Users/paullj/Library/CloudStorage/OneDrive-UniversityofBath/FYP/Experiments/Analysis/Processed Data/bczt_2_data.csv'
df = pd.read_csv(path)
df = df[(df["Frequency"] > min_freq) &
(df["Frequency"] < max_freq)]
# %% Plot results
fig = plt.figure()
plt.axvline(x=f_1, linestyle="-.", color="gray")
plt.plot(freq[1:], Z.real[1:], label="Model Real", linestyle="--", color='#ff8c8e')
plt.plot(df["Frequency"], df["Real Impedance"], label="Real Component", color='#e41a1c', zorder=3)
plt.xscale("log")
plt.legend(loc='lower right', fontsize=10, frameon=False)
plt.xlabel(r"Frequency (Hz)", fontsize=12)
plt.ylabel(f"Impedance (Ω)", fontsize=12)
plt.grid(True, linestyle='dashed', linewidth='0.3',
color='grey', alpha=0.8, zorder=1)
plt.tick_params(direction='in', which='major', length=3,
bottom=True, top=True, left=True, right=True)
plt.tick_params(direction='in', which='minor', length=2,
bottom=True, top=True, left=True, right=True)
# %%
fig = plt.figure()
plt.axvline(x=f_1, linestyle="-.", color="gray", zorder=0)
plt.plot(freq[1:], Z.imag[1:], label="Model Imaginary", linestyle="--", color='#8ce5ff')
plt.plot(df["Frequency"], df["Imaginary Impedance"], label="Imaginary Component", color='#377eb8', zorder=3)
plt.xscale("log")
plt.legend(loc='lower right', fontsize=10, frameon=False)
plt.xlabel(r"Frequency (Hz)", fontsize=12)
plt.ylabel(f"Impedance (Ω)", fontsize=12)
plt.grid(True, linestyle='dashed', linewidth='0.3',
color='grey', alpha=0.8, zorder=1)
plt.tick_params(direction='in', which='major', length=3,
bottom=True, top=True, left=True, right=True)
plt.tick_params(direction='in', which='minor', length=2,
bottom=True, top=True, left=True, right=True)
# %%# %% Define variables
# Sweep settings
min_freq = 2e6 # Sweep start frequency (Hz)
max_freq = 16e6 # Sweep end frequency (Hz)
num_points = 20001 # Number of points between start and end
# Material Properties
epsilon_33 = 790 #4000 # Relative dielectric constant
c_33 = 1.5e11 # Elastic stiffness coefficient (N/m^2)
rho = 7720 #5570 # Density (kg/m^3)
delta_m = 0.015 # Mechanical losses
delta_e = 0.0001 # Dielectric losses
# Material Geometry
A = 460e-6 # Electrode area (m^2)
t = 1.34e-3 # Thickness (m)
fixture_weight = 46.02*9.81
fixture_stress = fixture_weight/ (np.pi*2**2)
e_33 = 19e12
(freq, Z, f_1) = model.get_impedance(epsilon_33, c_33, e_33, rho, A, t, delta_e, delta_m, min_freq=min_freq, max_freq=max_freq, num_points=num_points)
k = t/A
df = df[(df["Frequency"] > min_freq) &
(df["Frequency"] < max_freq)]
fig = plt.figure()
plt.plot(freq[1:], Z.real[1:], label="Model Real", linestyle="--", color='#ff8c8e')
# plt.xscale("log")
plt.yscale("log")
plt.legend(loc='lower right', fontsize=10, frameon=False)
plt.xlabel(r"Frequency (Hz)", fontsize=12)
plt.ylabel(f"Impedance (Ω)", fontsize=12)
plt.grid(True, linestyle='dashed', linewidth='0.3',
color='grey', alpha=0.8, zorder=1)
plt.tick_params(direction='in', which='major', length=3,
bottom=True, top=True, left=True, right=True)
plt.tick_params(direction='in', which='minor', length=2,
bottom=True, top=True, left=True, right=True)
# %%