11.07.2014 Views

Flute acoustics: measurement, modelling and design - School of ...

Flute acoustics: measurement, modelling and design - School of ...

Flute acoustics: measurement, modelling and design - School of ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

APPENDIX B. PROGRAM LISTINGS 295<br />

/*<br />

TransferMatrix.c<br />

By Paul Dickens, 2005<br />

Listing B.26: TransferMatrix.c<br />

Complex transfer matrix library.<br />

Refer to TransferMatrix.h for interface details.<br />

*/<br />

#include <br />

#include "TransferMatrix.h"<br />

TransferMatrix createTransferMatrix(complex A, complex B, complex C,<br />

complex D) {<br />

TransferMatrix m = malloc(size<strong>of</strong>(*m));<br />

m->A = A;<br />

m->B = B;<br />

m->C = C;<br />

m->D = D;<br />

return m;<br />

}<br />

TransferMatrix identitym() {<br />

return createTransferMatrix(one, zero, zero, one);<br />

}<br />

void lmultm(TransferMatrix m, TransferMatrix mult) {<br />

complex A, B, C, D;<br />

A = addz(multz(mult->A, m->A), multz(mult->B, m->C));<br />

B = addz(multz(mult->A, m->B), multz(mult->B, m->D));<br />

C = addz(multz(mult->C, m->A), multz(mult->D, m->C));<br />

D = addz(multz(mult->C, m->B), multz(mult->D, m->D));<br />

m->A = A;<br />

m->B = B;<br />

m->C = C;<br />

m->D = D;<br />

}<br />

void rmultm(TransferMatrix m, TransferMatrix mult) {<br />

complex A, B, C, D;<br />

A = addz(multz(m->A, mult->A), multz(m->B, mult->C));<br />

B = addz(multz(m->A, mult->B), multz(m->B, mult->D));<br />

C = addz(multz(m->C, mult->A), multz(m->D, mult->C));<br />

D = addz(multz(m->C, mult->B), multz(m->D, mult->D));<br />

m->A = A;<br />

m->B = B;<br />

m->C = C;<br />

m->D = D;<br />

}<br />

complex calcZin(TransferMatrix m, complex Zload) {<br />

complex Zin, p1, p2, U1, U2;

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!