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
9#define LEAF_INC_LEAF_WDF_H_9#define LEAF_INC_LEAF_WDF_H_
10 10
11 11
12
13//---
14//WDF resistor
15
12typedef struct _tWDFresistor16typedef struct _tWDFresistor
13{17{
14 float port_resistance;18 float port_resistance;
@@ -21,8 +25,81 @@ typedef struct _tWDFresistor · 6 unmodified lines
21void tWDFresistor_init(tWDFresistor* const r, float electrical_resistance);25void tWDFresistor_init(tWDFresistor* const r, float electrical_resistance);
22float tWDFresistor_getPortResistance(tWDFresistor* const r);26float tWDFresistor_getPortResistance(tWDFresistor* const r);
23void tWDFresistor_setIncidentWave(tWDFresistor* const r, float incident_wave);27void tWDFresistor_setIncidentWave(tWDFresistor* const r, float incident_wave);
28float tWDFresistor_getReflectedWave(tWDFresistor* const r);
24float tWDFresistor_getVoltage(tWDFresistor* const r);29float tWDFresistor_getVoltage(tWDFresistor* const r);
25float tWDFresistor_getCurrent(tWDFresistor* const r);30float tWDFresistor_getCurrent(tWDFresistor* const r);
26 31
27 32
33
34//---
35//WDF resistive source
36typedef 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
46void tWDFresistiveSource_init(tWDFresistiveSource* const r, float electrical_resistance, float source_voltage);
47float tWDFresistiveSource_getPortResistance(tWDFresistiveSource* const r);
48void tWDFresistiveSource_setIncidentWave(tWDFresistiveSource* const r, float incident_wave);
49float tWDFresistiveSource_getReflectedWave(tWDFresistiveSource* const r);
50float tWDFresistiveSource_getVoltage(tWDFresistiveSource* const r);
51float tWDFresistiveSource_getCurrent(tWDFresistiveSource* const r);
52void tWDFresistiveSource_setSourceVoltage(tWDFresistiveSource* const r, float source_voltage);
53
54
55//---
56//WDF capacitor
57typedef 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
68void tWDFcapacitor_init(tWDFcapacitor* const r, float electrical_capacitance, float sample_rate);
69float tWDFcapacitor_getPortResistance(tWDFcapacitor* const r);
70void tWDFcapacitor_setIncidentWave(tWDFcapacitor* const r, float incident_wave);
71float tWDFcapacitor_getReflectedWave(tWDFcapacitor* const r);
72float tWDFcapacitor_getVoltage(tWDFcapacitor* const r);
73float tWDFcapacitor_getCurrent(tWDFcapacitor* const r);
74
75//---
76//WDF series adaptor
77typedef 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
96void tWDFseriesAdaptor_init(tWDFseriesAdaptor* const r, tWDFresistor* const rL, tWDFcapacitor* const rR);
97float tWDFseriesAdaptor_getPortResistance(tWDFseriesAdaptor* const r);
98void tWDFseriesAdaptor_setIncidentWaves(tWDFseriesAdaptor* const r, float incident_wave);
99float tWDFseriesAdaptor_getReflectedWave(tWDFseriesAdaptor* const r);
100float tWDFseriesAdaptor_getVoltage(tWDFseriesAdaptor* const r);
101float tWDFseriesAdaptor_getCurrent(tWDFseriesAdaptor* const r);
102
103
104
28#endif /* LEAF_INC_LEAF_WDF_H_ */105#endif /* LEAF_INC_LEAF_WDF_H_ */
LEAF/Src/leaf-WDF.c+129−1
@@ -6,6 +6,9 @@ · 5 unmodified lines
6 */6 */
7 7
8 8
9#include "../Inc/leaf-WDF.h"
10
11//WDF resistor
9void tWDFresistor_init(tWDFresistor* const r, float electrical_resistance)12void tWDFresistor_init(tWDFresistor* const r, float electrical_resistance)
10{13{
11 r->port_resistance = electrical_resistance;14 r->port_resistance = electrical_resistance;
@@ -22,11 +25,136 @@ void tWDFresistor_setIncidentWave(tWDFresistor* const r, float incident_wave) · 10 unmodified lines
22{25{
23 r->incident_wave = incident_wave;26 r->incident_wave = incident_wave;
24}27}
28float tWDFresistor_getReflectedWave(tWDFresistor* const r)
29{
30 r->reflected_wave = 0.0f;
31 return r->reflected_wave;
32}
25float tWDFresistor_getVoltage(tWDFresistor* const r)33float tWDFresistor_getVoltage(tWDFresistor* const r)
26{34{
27 return ((r->incident_wave * 0.5f) + (r->reflected_wave * 0.5f));35 return ((r->incident_wave * 0.5f) + (r->reflected_wave * 0.5f));
28}36}
29float tWDFresistor_getCurrent(tWDFresistor* const r)37float tWDFresistor_getCurrent(tWDFresistor* const r)
30{38{
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
45void 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}
54float tWDFresistiveSource_getPortResistance(tWDFresistiveSource* const r)
55{
56 return r->port_resistance;
57}
58void tWDFresistiveSource_setIncidentWave(tWDFresistiveSource* const r, float incident_wave)
59{
60 r->incident_wave = incident_wave;
61}
62float tWDFresistiveSource_getReflectedWave(tWDFresistiveSource* const r)
63{
64 r->reflected_wave = r->source_voltage;
65 return r->reflected_wave;
66}
67float tWDFresistiveSource_getVoltage(tWDFresistiveSource* const r)
68{
69 return ((r->incident_wave * 0.5f) + (r->reflected_wave * 0.5f));
70}
71float tWDFresistiveSource_getCurrent(tWDFresistiveSource* const r)
72{
73 return (((r->incident_wave * 0.5f) - (r->reflected_wave * 0.5f)) * r->port_conductance);
74}
75void tWDFresistiveSource_setSourceVoltage(tWDFresistiveSource* const r, float source_voltage)
76{
77 r->source_voltage = source_voltage;
78}
79
80
81//WDF capacitor
82
83void 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}
93float tWDFcapacitor_getPortResistance(tWDFcapacitor* const r)
94{
95 return r->port_resistance;
96}
97void tWDFcapacitor_setIncidentWave(tWDFcapacitor* const r, float incident_wave)
98{
99 r->incident_wave = incident_wave;
100 r->memory = r->incident_wave;
101}
102float tWDFcapacitor_getReflectedWave(tWDFcapacitor* const r)
103{
104 r->reflected_wave = r->memory;
105 return r->reflected_wave;
106}
107float tWDFcapacitor_getVoltage(tWDFcapacitor* const r)
108{
109 return ((r->incident_wave * 0.5f) + (r->reflected_wave * 0.5f));
110}
111float 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
118void 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}
137float tWDFseriesAdaptor_getPortResistance(tWDFseriesAdaptor* const r)
138{
139 return r->port_resistance_up;
140}
141void 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
149float tWDFseriesAdaptor_getReflectedWave(tWDFseriesAdaptor* const r)
150{
151 return (-1.0f * (tWDFresistor_getReflectedWave(r->rL) + tWDFcapacitor_getReflectedWave(r->rR)));
152}
153float tWDFseriesAdaptor_getVoltage(tWDFseriesAdaptor* const r)
154{
155 return ((r->incident_wave_up * 0.5f) + (r->reflected_wave_up * 0.5f));
156}
157float tWDFseriesAdaptor_getCurrent(tWDFseriesAdaptor* const r)
158{
159 return (((r->incident_wave_up * 0.5f) - (r->reflected_wave_up * 0.5f)) * r->port_conductance_up);
32}160}

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