History

added resistance port changing

Jeff Snyder committed 7 years ago

Commit 4fa07021 parent f0d8ded3 files · +28 −5Browse files

Unified · Split

3 files
  1. LEAF/Inc/leaf-WDF.h +3 −1
  2. LEAF/Src/leaf-WDF.c +24 −4
  3. LEAF/leaf.h +1 −0
LEAF/Inc/leaf-WDF.h+3−1
@@ -24,6 +24,7 @@ typedef struct _tWDFresistor · 23 unmodified lines
2424
2525 void tWDFresistor_init(tWDFresistor* const r, float electrical_resistance);
2626 float tWDFresistor_getPortResistance(tWDFresistor* const r);
27+void tWDFresistor_setElectricalResistance(tWDFresistor* const r, float electrical_resistance);
2728 void tWDFresistor_setIncidentWave(tWDFresistor* const r, float incident_wave);
2829 float tWDFresistor_getReflectedWave(tWDFresistor* const r);
2930 float tWDFresistor_getVoltage(tWDFresistor* const r);
@@ -95,7 +96,8 @@ typedef struct _tWDFseriesAdaptor · 65 unmodified lines
9596
9697 void tWDFseriesAdaptor_init(tWDFseriesAdaptor* const r, tWDFresistor* const rL, tWDFcapacitor* const rR);
9798 float tWDFseriesAdaptor_getPortResistance(tWDFseriesAdaptor* const r);
98−void tWDFseriesAdaptor_setIncidentWaves(tWDFseriesAdaptor* const r, float incident_wave);
99+void tWDFseriesAdaptor_setPortResistances(tWDFseriesAdaptor* const r);
100+void tWDFseriesAdaptor_setIncidentWave(tWDFseriesAdaptor* const r, float incident_wave);
99101 float tWDFseriesAdaptor_getReflectedWave(tWDFseriesAdaptor* const r);
100102 float tWDFseriesAdaptor_getVoltage(tWDFseriesAdaptor* const r);
101103 float tWDFseriesAdaptor_getCurrent(tWDFseriesAdaptor* const r);
LEAF/Src/leaf-WDF.c+24−4
@@ -17,6 +17,12 @@ void tWDFresistor_init(tWDFresistor* const r, float electrical_resistance) · 16 unmodified lines
1717 r->incident_wave = 0.0f;
1818 r->reflected_wave = 0.0f;
1919 }
20+void tWDFresistor_setElectricalResistance(tWDFresistor* const r, float electrical_resistance)
21+{
22+ r->port_resistance = electrical_resistance;
23+ r->port_conductance = 1.0f / electrical_resistance;
24+ r->electrical_resistance = electrical_resistance;
25+}
2026 float tWDFresistor_getPortResistance(tWDFresistor* const r)
2127 {
2228 return r->port_resistance;
@@ -82,7 +88,7 @@ void tWDFresistiveSource_setSourceVoltage(tWDFresistiveSource* const r, float so · 59 unmodified lines
8288
8389 void tWDFcapacitor_init(tWDFcapacitor* const r, float electrical_capacitance, float sample_rate)
8490 {
85− r->port_resistance = 1.0f / (sample_rate * electrical_capacitance); //based on trapezoidal discretization
91+ r->port_resistance = 1.0f / (sample_rate * 2.0f * electrical_capacitance); //based on trapezoidal discretization
8692 r->port_conductance = (1.0f / r->port_resistance);
8793 r->electrical_capacitance = electrical_capacitance;
8894 r->incident_wave = 0.0f;
@@ -134,16 +140,30 @@ void tWDFseriesAdaptor_init(tWDFseriesAdaptor* const r, tWDFresistor* const rL, · 45 unmodified lines
134140
135141 r->gamma_zero = 1.0f / (r->port_resistance_right + r->port_resistance_left);
136142 }
143+
144+void tWDFseriesAdaptor_setPortResistances(tWDFseriesAdaptor* const r)
145+{
146+ r->port_resistance_left = tWDFresistor_getPortResistance(r->rL);
147+ r->port_resistance_right = tWDFcapacitor_getPortResistance(r->rR);
148+ r->port_resistance_up = r->port_resistance_left + r->port_resistance_right;
149+ r->port_conductance_up = 1.0f / r->port_resistance_up;
150+ r->port_conductance_left = 1.0f / r->port_resistance_left;
151+ r->port_conductance_right = 1.0f / r->port_resistance_right;
152+ r->gamma_zero = 1.0f / (r->port_resistance_right + r->port_resistance_left);
153+}
154+
137155 float tWDFseriesAdaptor_getPortResistance(tWDFseriesAdaptor* const r)
138156 {
139157 return r->port_resistance_up;
140158 }
141−void tWDFseriesAdaptor_setIncidentWaves(tWDFseriesAdaptor* const r, float incident_wave)
159+void tWDFseriesAdaptor_setIncidentWave(tWDFseriesAdaptor* const r, float incident_wave)
142160 {
143161 float gamma_left = r->port_resistance_left * r->gamma_zero;
144162 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)));
163+ float left_wave = tWDFresistor_getReflectedWave(r->rL);
164+ float right_wave = tWDFcapacitor_getReflectedWave(r->rR);
165+ tWDFresistor_setIncidentWave(r->rL, (-1.0f * gamma_left * incident_wave) + ((1.0f - gamma_left) * left_wave) - (gamma_left * right_wave));
166+ tWDFcapacitor_setIncidentWave(r->rR, (-1.0f * gamma_right * incident_wave) + ((-1.0f * gamma_right) * left_wave) + ((1.0f - gamma_right) * right_wave));
147167 }
148168
149169 float tWDFseriesAdaptor_getReflectedWave(tWDFseriesAdaptor* const r)
LEAF/leaf.h+1−0
@@ -58,6 +58,7 @@ · 57 unmodified lines
5858 #include "./Inc/leaf-crusher.h"
5959 #include "./Inc/leaf-wavefolder.h"
6060 #include "./Inc/leaf-tables.h"
61+#include "./Inc/leaf-WDF.h"
6162
6263 #endif
6364

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