# How is a PCM byte converted to a voltage level?

16-bit signed PCM would have possible values of ~-32,000 to ~+32,000. How is this value converted to a voltage level for the speaker?

If a DAC outputs 5VAC, the values would be ~+-5v. How is the binary value, such as 1101101011011101, converted to a voltage level?

• so is your question "How does a DAC work?" there are two main designs that i am aware of: R-2R ladder and the sigma-delta. – robert bristow-johnson Jun 15 '16 at 6:22
• The answer depends on the gain or gain setting of the DAC, which can be arbitrarily configured or programmed on some DACs. Also on the linearity and DC offset of the DAC, which are usually specified with some non-zero tolerance. – hotpaw2 Jun 15 '16 at 13:47
• Hi, would you mind accepting the answer? Unless it is not meeting your requirements, then please comment. Thanks – jojek Jun 29 '16 at 16:24

There are quite a few different DAC topologies with different properties. The typical tradeoff is between resolution and speed and power usage -- higher speed means lower resolution, and higher resolution means higher power usage.

The simplest DAC is arguably the string DAC or Kelvin divider. If you consider the 3-bit DAC above, you can see that every possible value representable by 3 bits has a corresponding voltage level in the string. As indicated, you decode the 3-bit word to a switch a voltage level to the output, turning off all the others. For example, if you have the word 010, you turn on the 3rd switch, and if you have 101, you turn on the 6th.

You can extend this string to have $2^{16} = 65 536$ levels, but this make a very large circuit, and is not feasible in practice. The more compact R-2R ladder is then a better option, although a pure 16-bit R-2R ladders will have very high requirements for component tolerances. A combined string and R-2R topology is quite common for 16-bit.

For audio, the so-called $\Delta-\Sigma$ modulator is quite popular. In this case the output is switched, and averaging in the form of a low-pass filter is used to generate the desired levels.