Code:
/* dac.c - bipolar two's complement D/A converter */
double dac(int* b, int B, double R) {
double dac = 0;
b[0] = 1 - b[0];
for (int i=B-1; i>=0; i--) {
dac = 0.5 * (dac + b[i]);
}
dac = R * (dac - 0.5);
b[0] = 1 - b[0];
return dac;
}
Usage:
double R = 10.0;
int B = 4;
int* b = new int[B];
b[0] = 1; b[1] = 0; b[2] = 1; b[3] = 0;
xQ = dac(b, B, R);