History

added more WDF stuff

Jeff Snyder committed 7 years ago

Commit f0d8ded1 parent 31c7e632 files · +206 −1Browse files

Unified · Split

2 files
  1. LEAF/Inc/leaf-WDF.h +77 −0
  2. LEAF/Src/leaf-WDF.c +129 −1
LEAF/Inc/leaf-WDF.h+77−0
@@ -9,6 +9,10 @@ · 8 unmodified lines
99 #define LEAF_INC_LEAF_WDF_H_
1010
1111
12+
13+//---
14+//WDF resistor
15+
1216 typedef struct _tWDFresistor
1317 {
1418 float port_resistance;
@@ -21,8 +25,81 @@ typedef struct _tWDFresistor · 6 unmodified lines
2125 void tWDFresistor_init(tWDFresistor* const r, float electrical_resistance);
2226 float tWDFresistor_getPortResistance(tWDFresistor* const r);
2327 void tWDFresistor_setIncidentWave(tWDFresistor* const r, float incident_wave);
28+float tWDFresistor_getReflectedWave(tWDFresistor* const r);
2429 float tWDFresistor_getVoltage(tWDFresistor* const r);
2530 float tWDFresistor_getCurrent(tWDFresistor* const r);
2631
2732
33+
34+//---
35+//WDF resistive source
36+typedef struct _tWDFresistiveSource
37+{
38+ float port_resistance;
39+ float port_conductance;
40+ float electrical_resistance;
41+ float incident_wave;
42+ float reflected_wave;
43+ float source_voltage;
44+} tWDFresistiveSource;
45+
46+void tWDFresistiveSource_init(tWDFresistiveSource* const r, float electrical_resistance, float source_voltage);
47+float tWDFresistiveSource_getPortResistance(tWDFresistiveSource* const r);
48+void tWDFresistiveSource_setIncidentWave(tWDFresistiveSource* const r, float incident_wave);
49+float tWDFresistiveSource_getReflectedWave(tWDFresistiveSource* const r);
50+float tWDFresistiveSource_getVoltage(tWDFresistiveSource* const r);
51+float tWDFresistiveSource_getCurrent(tWDFresistiveSource* const r);
52+void tWDFresistiveSource_setSourceVoltage(tWDFresistiveSource* const r, float source_voltage);
53+
54+
55+//---
56+//WDF capacitor
57+typedef struct _tWDFcapacitor
58+{
59+ float port_resistance;
60+ float port_conductance;
61+ float electrical_capacitance;
62+ float incident_wave;
63+ float reflected_wave;
64+ float sample_rate;
65+ float memory;
66+} tWDFcapacitor;
67+
68+void tWDFcapacitor_init(tWDFcapacitor* const r, float electrical_capacitance, float sample_rate);
69+float tWDFcapacitor_getPortResistance(tWDFcapacitor* const r);
70+void tWDFcapacitor_setIncidentWave(tWDFcapacitor* const r, float incident_wave);
71+float tWDFcapacitor_getReflectedWave(tWDFcapacitor* const r);
72+float tWDFcapacitor_getVoltage(tWDFcapacitor* const r);
73+float tWDFcapacitor_getCurrent(tWDFcapacitor* const r);
74+
75+//---
76+//WDF series adaptor
77+typedef struct _tWDFseriesAdaptor
78+{
79+ float port_resistance_up;
80+ float port_resistance_left;
81+ float port_resistance_right;
82+ float port_conductance_up;
83+ float port_conductance_left;
84+ float port_conductance_right;
85+ float incident_wave_up;
86+ float incident_wave_left;
87+ float incident_wave_right;
88+ float reflected_wave_up;
89+ float reflected_wave_left;
90+ float reflected_wave_right;
91+ float gamma_zero;
92+ tWDFresistor* rL;
93+ tWDFcapacitor* rR;
94+} tWDFseriesAdaptor;
95+
96+void tWDFseriesAdaptor_init(tWDFseriesAdaptor* const r, tWDFresistor* const rL, tWDFcapacitor* const rR);
97+float tWDFseriesAdaptor_getPortResistance(tWDFseriesAdaptor* const r);
98+void tWDFseriesAdaptor_setIncidentWaves(tWDFseriesAdaptor* const r, float incident_wave);
99+float tWDFseriesAdaptor_getReflectedWave(tWDFseriesAdaptor* const r);
100+float tWDFseriesAdaptor_getVoltage(tWDFseriesAdaptor* const r);
101+float tWDFseriesAdaptor_getCurrent(tWDFseriesAdaptor* const r);
102+
103+
104+
28105 #endif /* LEAF_INC_LEAF_WDF_H_ */
LEAF/Src/leaf-WDF.c+129−1
@@ -6,6 +6,9 @@ · 5 unmodified lines
66 */
77
88
9+#include "../Inc/leaf-WDF.h"
10+
11+//WDF resistor
912 void tWDFresistor_init(tWDFresistor* const r, float electrical_resistance)
1013 {
1114 r->port_resistance = electrical_resistance;
@@ -22,11 +25,136 @@ void tWDFresistor_setIncidentWave(tWDFresistor* const r, float incident_wave) · 10 unmodified lines
2225 {
2326 r->incident_wave = incident_wave;
2427 }
28+float tWDFresistor_getReflectedWave(tWDFresistor* const r)
29+{
30+ r->reflected_wave = 0.0f;
31+ return r->reflected_wave;
32+}
2533 float tWDFresistor_getVoltage(tWDFresistor* const r)
2634 {
2735 return ((r->incident_wave * 0.5f) + (r->reflected_wave * 0.5f));
2836 }
2937 float tWDFresistor_getCurrent(tWDFresistor* const r)
3038 {
31− return (((r->incident_wave * 0.5f) - (r->reflected_wave * 0.5f)) / r->port_conductance);
39+ return (((r->incident_wave * 0.5f) - (r->reflected_wave * 0.5f)) * r->port_conductance);
40+}
41+
42+
43+
44+///----WDF resistive source
45+void tWDFresistiveSource_init(tWDFresistiveSource* const r, float electrical_resistance, float source_voltage)
46+{
47+ r->port_resistance = electrical_resistance;
48+ r->port_conductance = 1.0f / electrical_resistance;
49+ r->electrical_resistance = electrical_resistance;
50+ r->incident_wave = 0.0f;
51+ r->reflected_wave = 0.0f;
52+ r->source_voltage = source_voltage;
53+}
54+float tWDFresistiveSource_getPortResistance(tWDFresistiveSource* const r)
55+{
56+ return r->port_resistance;
57+}
58+void tWDFresistiveSource_setIncidentWave(tWDFresistiveSource* const r, float incident_wave)
59+{
60+ r->incident_wave = incident_wave;
61+}
62+float tWDFresistiveSource_getReflectedWave(tWDFresistiveSource* const r)
63+{
64+ r->reflected_wave = r->source_voltage;
65+ return r->reflected_wave;
66+}
67+float tWDFresistiveSource_getVoltage(tWDFresistiveSource* const r)
68+{
69+ return ((r->incident_wave * 0.5f) + (r->reflected_wave * 0.5f));
70+}
71+float tWDFresistiveSource_getCurrent(tWDFresistiveSource* const r)
72+{
73+ return (((r->incident_wave * 0.5f) - (r->reflected_wave * 0.5f)) * r->port_conductance);
74+}
75+void tWDFresistiveSource_setSourceVoltage(tWDFresistiveSource* const r, float source_voltage)
76+{
77+ r->source_voltage = source_voltage;
78+}
79+
80+
81+//WDF capacitor
82+
83+void tWDFcapacitor_init(tWDFcapacitor* const r, float electrical_capacitance, float sample_rate)
84+{
85+ r->port_resistance = 1.0f / (sample_rate * electrical_capacitance); //based on trapezoidal discretization
86+ r->port_conductance = (1.0f / r->port_resistance);
87+ r->electrical_capacitance = electrical_capacitance;
88+ r->incident_wave = 0.0f;
89+ r->reflected_wave = 0.0f;
90+ r->sample_rate = sample_rate;
91+ r->memory = 0.0f;
92+}
93+float tWDFcapacitor_getPortResistance(tWDFcapacitor* const r)
94+{
95+ return r->port_resistance;
96+}
97+void tWDFcapacitor_setIncidentWave(tWDFcapacitor* const r, float incident_wave)
98+{
99+ r->incident_wave = incident_wave;
100+ r->memory = r->incident_wave;
101+}
102+float tWDFcapacitor_getReflectedWave(tWDFcapacitor* const r)
103+{
104+ r->reflected_wave = r->memory;
105+ return r->reflected_wave;
106+}
107+float tWDFcapacitor_getVoltage(tWDFcapacitor* const r)
108+{
109+ return ((r->incident_wave * 0.5f) + (r->reflected_wave * 0.5f));
110+}
111+float tWDFcapacitor_getCurrent(tWDFcapacitor* const r)
112+{
113+ return (((r->incident_wave * 0.5f) - (r->reflected_wave * 0.5f)) * r->port_conductance);
114+}
115+
116+
117+// WDF series
118+void tWDFseriesAdaptor_init(tWDFseriesAdaptor* const r, tWDFresistor* const rL, tWDFcapacitor* const rR)
119+{
120+ r->rL = rL;
121+ r->rR = rR;
122+ r->port_resistance_left = tWDFresistor_getPortResistance(rL);
123+ r->port_resistance_right = tWDFcapacitor_getPortResistance(rR);
124+ r->port_resistance_up = r->port_resistance_left + r->port_resistance_right;
125+ r->port_conductance_up = 1.0f / r->port_resistance_up;
126+ r->port_conductance_left = 1.0f / r->port_resistance_left;
127+ r->port_conductance_right = 1.0f / r->port_resistance_right;
128+ r->incident_wave_up = 0.0f;
129+ r->incident_wave_left = 0.0f;
130+ r->incident_wave_right = 0.0f;
131+ r->reflected_wave_up = 0.0f;
132+ r->reflected_wave_left = 0.0f;
133+ r->reflected_wave_right = 0.0f;
134+
135+ r->gamma_zero = 1.0f / (r->port_resistance_right + r->port_resistance_left);
136+}
137+float tWDFseriesAdaptor_getPortResistance(tWDFseriesAdaptor* const r)
138+{
139+ return r->port_resistance_up;
140+}
141+void tWDFseriesAdaptor_setIncidentWaves(tWDFseriesAdaptor* const r, float incident_wave)
142+{
143+ float gamma_left = r->port_resistance_left * r->gamma_zero;
144+ float gamma_right = r->port_resistance_right * r->gamma_zero;
145+ tWDFresistor_setIncidentWave(r->rL, (-1.0f * gamma_left * incident_wave) + ((1.0f - gamma_left) * tWDFresistor_getReflectedWave(r->rL)) - (gamma_left * tWDFcapacitor_getReflectedWave(r->rR)));
146+ tWDFcapacitor_setIncidentWave(r->rR, (-1.0f * gamma_right * incident_wave) + ((-1.0f * gamma_right) * tWDFresistor_getReflectedWave(r->rL)) + (1.0f - gamma_right * tWDFcapacitor_getReflectedWave(r->rR)));
147+}
148+
149+float tWDFseriesAdaptor_getReflectedWave(tWDFseriesAdaptor* const r)
150+{
151+ return (-1.0f * (tWDFresistor_getReflectedWave(r->rL) + tWDFcapacitor_getReflectedWave(r->rR)));
152+}
153+float tWDFseriesAdaptor_getVoltage(tWDFseriesAdaptor* const r)
154+{
155+ return ((r->incident_wave_up * 0.5f) + (r->reflected_wave_up * 0.5f));
156+}
157+float tWDFseriesAdaptor_getCurrent(tWDFseriesAdaptor* const r)
158+{
159+ return (((r->incident_wave_up * 0.5f) - (r->reflected_wave_up * 0.5f)) * r->port_conductance_up);
32160 }

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t