| @@ -17,6 +17,12 @@ void tWDFresistor_init(tWDFresistor* const r, float electrical_resistance) · 16 unmodified lines |
| 17 | r->incident_wave = 0.0f; | 17 | r->incident_wave = 0.0f; |
| 18 | r->reflected_wave = 0.0f; | 18 | r->reflected_wave = 0.0f; |
| 19 | } | 19 | } |
| | 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 | } |
| 20 | float tWDFresistor_getPortResistance(tWDFresistor* const r) | 26 | float tWDFresistor_getPortResistance(tWDFresistor* const r) |
| 21 | { | 27 | { |
| 22 | return r->port_resistance; | 28 | return r->port_resistance; |
| @@ -82,7 +88,7 @@ void tWDFresistiveSource_setSourceVoltage(tWDFresistiveSource* const r, float so · 59 unmodified lines |
| 82 | | 88 | |
| 83 | void tWDFcapacitor_init(tWDFcapacitor* const r, float electrical_capacitance, float sample_rate) | 89 | void tWDFcapacitor_init(tWDFcapacitor* const r, float electrical_capacitance, float sample_rate) |
| 84 | { | 90 | { |
| 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 |
| 86 | r->port_conductance = (1.0f / r->port_resistance); | 92 | r->port_conductance = (1.0f / r->port_resistance); |
| 87 | r->electrical_capacitance = electrical_capacitance; | 93 | r->electrical_capacitance = electrical_capacitance; |
| 88 | r->incident_wave = 0.0f; | 94 | r->incident_wave = 0.0f; |
| @@ -134,16 +140,30 @@ void tWDFseriesAdaptor_init(tWDFseriesAdaptor* const r, tWDFresistor* const rL, · 45 unmodified lines |
| 134 | | 140 | |
| 135 | r->gamma_zero = 1.0f / (r->port_resistance_right + r->port_resistance_left); | 141 | r->gamma_zero = 1.0f / (r->port_resistance_right + r->port_resistance_left); |
| 136 | } | 142 | } |
| | 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 | |
| 137 | float tWDFseriesAdaptor_getPortResistance(tWDFseriesAdaptor* const r) | 155 | float tWDFseriesAdaptor_getPortResistance(tWDFseriesAdaptor* const r) |
| 138 | { | 156 | { |
| 139 | return r->port_resistance_up; | 157 | return r->port_resistance_up; |
| 140 | } | 158 | } |
| 141 | void tWDFseriesAdaptor_setIncidentWaves(tWDFseriesAdaptor* const r, float incident_wave) | 159 | void tWDFseriesAdaptor_setIncidentWave(tWDFseriesAdaptor* const r, float incident_wave) |
| 142 | { | 160 | { |
| 143 | float gamma_left = r->port_resistance_left * r->gamma_zero; | 161 | float gamma_left = r->port_resistance_left * r->gamma_zero; |
| 144 | float gamma_right = r->port_resistance_right * r->gamma_zero; | 162 | 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))); | 163 | float left_wave = tWDFresistor_getReflectedWave(r->rL); |
| 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))); | 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)); |
| 147 | } | 167 | } |
| 148 | | 168 | |
| 149 | float tWDFseriesAdaptor_getReflectedWave(tWDFseriesAdaptor* const r) | 169 | float tWDFseriesAdaptor_getReflectedWave(tWDFseriesAdaptor* const r) |