In a digital recording system, sound is stored and manipulated as a stream of discrete numbers, each number representing the air pressure at a particular time. The numbers are generated by a microphone connected to a circuit called an ANALOG TO DIGITAL CONVERTER, or ADC. Each number is called a SAMPLE, and the number of samples taken per second is the SAMPLE RATE. Ultimately, the numbers will be converted back into sound by a DIGITAL TO ANALOG CONVERTER or DAC, connected to a loudspeaker.
Fig. 1 The digital signal chain Figure 1 shows the components of a digital system. Notice that the output of the ADC and the input of the DAC consists of a bundle of wires. These wires carry the numbers that are the result of the analog to digital conversion. The numbers are in the binary number system in which only two characters are used, 1 and 0. (The circuitry is actually built around switches which are either on or off.) The value of a character depends on its place in the number, just as in the familiar decimal system. Here are a few equivalents: BINARY DECIMAL 0=0 1=1 10=2 11=3 100=4 1111=15 1111111111111111=65535 Each digit in a number is called a BIT, so that last number is sixteen bits long in its binary form. If we wrote the second number as 0000000000000001, it would be sixteen bits long and have a value of 1. Word Size The number of bits in the number has a direct bearing on the fidelity of the signal. Figure 2 illustrates how this works. The number of possible voltage levels at the output is simply the number of values that may be represented by the largest possible number (no "in between" values are allowed). If there were only one bit in the number, the ultimate output would be a pulse wave with a fixed amplitude and more or less the frequency of the input signal. If there are more bits in the number the waveform is more accurately traced, because each added bit doubles the number of possible values. The distortion is roughly the percentage that the least significant bit represents out of the average value. Distortion in digital systems increases as signal levels decrease, which is the opposite of the behavior of analog systems.
Fig. 2 Effect of word size The number of bits in the number also determines the dynamic range. Moving a binary number one space to the left multiplies the value by two (just as moving a decimal number one space to the left multiplies the value by ten), so each bit doubles the voltage that may be represented. Doubling the voltage increases the power available by 6 dB, so we can see the dynamic range available is about the number of bits times 6 dB. Sample Rate The rate at which the numbers are generated is even more important than the number of bits used. Figure 3. illustrates this. If the sampling rate is lower than the frequency we are trying to capture, entire cycles will be missed, and the decoded result would be too low in frequency and might not resemble the proper waveform at all. This kind of mistake is called aliasing. If the sampling rate were exactly the frequency of the input, the result would be a straight line, because the same spot on the waveform would be measured each time. This can happen even if the sampling rate is twice the frequency of the input if the input is a sine or similar waveform. The sampling rate must be greater than twice the frequency measured for accurate results. (The mathematical statement of this is the Nyquist Theorem.) This implies that if we are dealing with sound, we should sample at least 40,000 times per second.
Fig. 3 Effects of low sample rates The Nyquist rate (twice the frequency of interest) is the lowest allowable sampling rate. For best results, sampling rates twice or four times this should be used. Figure 4 shows how the waveform improves as the sampling rate is increased.
Fig. 4 Effect of increasing sample rate Even at high sample rates, the output of the system is a series of steps. A Fourier analysis of this would show that everything belonging in the signal would be there along with a healthy dose of the sampling rate and its harmonics. The extra junk must be removed with a low pass filter that cuts off a little higher than the highest desired frequency. (An identical filter should be placed before the ADC to prevent aliasing of any unsuspected ultrasonic content, such as radio frequency interference.) If the sampling rate is only twice the frequency of interest, the filters must have a very steep characteristic to allow proper frequency response and satisfactorily reject the sampling clock. Such filters are difficult and expensive to build. Many systems now use a very high sample rate at the output in order to simplify the filters. The extra samples needed to produce a super high rate are interpolated from the recorded samples. By the way, the circuits that generate the sample rate must be exceedingly accurate. Any difference between the sample rate used for recording and the rate used at playback will change the pitch of the music, just like an off speed analog tape. Also, any unsteadiness or jitter in the sample clock will distort the signal as it is being converted from or to analog form. Recording Digital Data Once the waveform is faithfully transformed into bits, it is not easy to record. The major problem is finding a scheme that will record the bits fast enough. If we sample at 44,100 hz, with a sixteen bit word size, in stereo, we have to accommodate 1,411,200 bits per second. This seems like a lot, but it is within the capabilities of techniques developed for video recording. (In fact, the first digital audio systems were built around VCRs. 44.1 khz was chosen as a sample rate because it worked well with them.) To record on tape, a very high speed is required to keep the wavelength of a bit at manageable dimensions. This is accomplished by moving the head as well as the tape, resulting in a series of short tracks across the tape at a diagonal. On a Compact Disc, the bits are microscopic pits burned into the plastic by a laser.The stream of pits spirals just like the groove on a record, but is played from the inside out.To read the data, light from a gentler laser is reflected off the surface of the plastic (from the back: the plastic is clear.) into a light detector. The pits disrupt this reflection and yield up the data. In either case, the process is helped by avoiding numbers that are hard to detect, like 00001000. That example is difficult because it will give just a single very short electrical spike. If some numbers are unusable, a larger maximum (more bits) must be available to allow recording the entire set. On tape, twenty bits are used to record each sixteen bit sample, on CDs, twenty-eight bits are used. Error Correction Even with these techniques, the bits are going to be physically very small, and it must be assumed that some will be lost in the process. A single bit can be very important (suppose it represents the sign of a large number!), so there has to be a way of recovering lost data. Error correction is really two problems; how to detect an error, and what to do about it.
Fig. 5 Effects of data errors The most common error detection method is parity computation. An extra bit is added to each number which indicates whether the number is even or odd. When the data is read off the tape, if the parity bit is inappropriate, something has gone wrong. This works well enough for telephone conversations and the like, but does not detect serious errors very well. In digital recording, large chunks of data are often wiped out by a tape dropout or a scratch on the disk. Catching these problems with parity would be a matter of luck. To help deal with large scale data loss, some mathematical computation is run on the numbers, and the result is merged with the data from time to time. This is known as a Cyclical Redundancy Check Code or CRCC. If a mistake turns up in this number, an error has occurred since the last correct CRCC was received. Once an error is detected, the system must deal gracefully with the problem. To make this possible, the data is recorded in a complex order. Instead of word two following word one, as you might expect, the data is interleaved, following a pattern like: words 1,5,9,13,17,21,25,29,2,6,10,14,18,22,26,30,3,7,15,19,27 etc. With this scheme, you could lose eight words, but they would represent several isolated parts of the data stream, rather than a large continuous chunk of waveform. When a CRC indicates a problem, the signal can be fixed. For minor errors, the CRCC can be used to replace the missing numbers exactly. If the problem is more extensive, the system can use the previous and following words to reconstruct a passable imitation of the missing one. One of the factors that makes up the price difference in various digital systems is the sophistication available to reconstruct missing data. The Benefits of Being Digital You may be wondering about the point of all of this, if it turns out that a digital system is more complex than the equivalent analog circuit. Digital circuits are complex, but very few of the components must be precise; most of the circuitry merely responds to the presence or absence of current. Improving performance is usually only a matter of increasing the word size or the sample rate, which is achieved by duplicating elements of the circuit. It is possible to build analog circuits that match digital performance levels, but they are very expensive and require constant maintenance. The bottom line is that good digital systems are cheaper than good analog systems. Digital devices usually require less maintenance than analog equipment. The electrical characteristics of most circuit elements change with time and temperature, and minor changes slowly degrade the performance of analog circuits. Digital components either work or don't, and it is much easier to find a chip that has failed entirely than one that is merely 10% off spec. Many analog systems are mechanical in nature, and simple wear can soon cause problems. Digital systems have few moving parts, and such parts are usually designed so that a little vibration or speed variation is not important. In addition, digitally encoded information is more durable than analog information, again because circuits are responding only to the presence or absence of something rather than to the precise characteristics of anything. As you have seen, it is possible to design digital systems so that they can actually reconstruct missing or incorrect data. You can hear every little imperfection on an LP, but minor damage is not audible with a CD. The aspect of digital sound that is most exciting to the electronic musician is that any numbers can be converted into sound, whether they originated at a microphone or not. This opens up the possibility of creating sounds that have never existed before, and of controlling those sounds with a precision that is simply not possible with any other technique. For further study, I recommend Principles of Digital Audio by Ken C Pohlmann, published by McGraw-Hill inc ISBN number0-07-050469-5. Peter Elsea 1996
Nowadays, when you watch TV or listen to a CD, you'd be forgiven for taking the high quality of the audio and video for granted. It seems a long time since we played warped, scratched and dusty vinyl records, or struggled to watch Match of the Day through a blizzard of atmospheric 'snow'. Today's digital technology reproduces to a high degree the images which were captured at the filming location or the sound recorded in the studio. This Entry introduces a branch of mathematics which underpins modern communication technology and ensures that, among other things, the television pictures we watch and the recorded sounds we hear are of optimum quality. It's known as coding theory. Going Digital
These days we use digital technology to record, communicate and replay. The analogue or real-life signals are converted into long strings of binary digits when they are recorded, stored and communicated, and then converted back into an analogue signal when played back to the viewer or listener. One of the benefits of using binary numbers is that we can use some very clever mathematics to check whether the signals are correct at each stage of the process, and, in many cases, where it isn't we can automatically correct them. In practice, it's a very complicated business, and the actual methods used would be far beyond the scope of this Entry. However, we'll examine one of the principles involved, and by using simple examples we'll describe the mathematics behind one type of binary code, and how errors can be automatically detected and corrected. Each digital signal consists of a series of numbers. In the case of a CD, for example, each number might indicate the sound level at one particular point in time along one of the stereo channels. The signal is read by a laser which scans the binary information burnt into the microscopic indentations in the track of the disc. If the track is at a particular depth at a given point, it reads 0, whereas if it's indented (known as a pit1), then it reads 1. In the course of playing the entire CD, the laser will detect many millions of these numbers. Let's say that each number we read can have one of 16 values at any point in time (in fact, standard compact disc technology uses a more complex and entirely different coding system, which we'll mention later). In binary, these values will be represented by the numbers 0000, 0001, 0010, through to 1111, ie the decimal values 0 to 15). Binary digit is abbreviated to 'bit', so we call this a 4-bit message. Now, consider the binary number 1001, representing a value of 9. This could represent, for example, the sound level on a Nigel Kennedy CD through the left-hand stereo channel at exactly 1 minute and 14 seconds into his rendition of the third movement of 'Spring' from Vivaldi's Four Seasons. What happens if there's an error when we read it? Maybe the CD is slightly warped, or there's a minute manufacturing fault in the track depth, or maybe someone jogs the CD player at that moment. If there's just a small error, then one of the bits of our number will be misread a 0 will be represented as a 1 or a 1 as a 0 in our binary message. Depending on which bit was incorrect, our number 1001 could be read by the CD player as any of the following: 0001, 1101, 1011 or 1000. But the trouble is, these are still valid numbers in our set. Instead of 9, they represent 1, 13, 11 or 8 respectively. Our CD player can't know that anything is wrong - it would just process it as if the violinist had played a sound according to level 13, say, rather than level 9 at that point, and so this would corrupt the signal we hear. In practice, a single error wouldn't usually be noticeable to the listener, but in some cases it might be heard as a small 'pop' or crackle on the soundtrack. With lots of errors throughout the recording, however, we would notice a deterioration in sound quality, not unlike the familiar effects of dust or scratches on a vinyl LP. So, if an error occurs with this code, the CD player can't tell, as any error condition is the same as another valid number in our code. In order to tell if there's an error, we need to add some additional information to our message. Error Detection The most simple way is to add an extra bit to the end of the code number - a check bit - and choose its value according to a rule. For example, we might say that every word in our code has to have an even number of 1s. So 0000 would have a 0 appended to the end (giving it zero 1s in total), 0001 would have a 1 appended (making two 1s in total), and so on. Our new code looks like this:
Message bits Check bit Codeword 0000 0 00000 0001 1 00011 0010 1 00101 0011 0 00110 0100 1 01001 0101 0 01010 0110 0 01100 0111 1 01111 1000 1 10001 1001 0 10010 1010 0 10100 1011 1 10111 1100 0 11000 1101 1 11011 1110 1 11101 1111 0 11110 The first four digits of each codeword are our original message, and each complete codeword has an even number of 1s, or, as mathematicians would say, has even parity. Now, see what happens if an error occurs in one bit. No matter where it occurs, it invalidates our rule for the check bit. It will change a 0 into a 1 or a 1 into a 0, and we end up with an odd number of 1s as a result. So we know if there's an error and we can programme our equipment to check for this condition and take appropriate action. In the case of some communication systems, when we detect an error, we might ask for the signal to be retransmitted. For the CD player, however, this isn't possible. The music would sound very strange and we'd lose a fair amount of rhythm if we asked the laser to go back and read each error again. If it were a manufacturing fault causing the error, then the laser may never be able to read the correct value in any case. All is not lost, though. All we need is a clever way to not only detect an error but to make an informed guess as to what the correct value might have been. In the case of the previous code, we may know that something is wrong, but it's not possible to tell which bit was in error. If we receive the message 10101, say, containing three 1s, then we know there's an error, but, assuming only one bit was in error, the intended message may have been any of five values: 00101, 11101, 10001, 10111 or 10100 (in decimal: 2, 14, 8, 11 or 10) . We don't know which one of these is correct. Error Correction and Hamming Codes For automatic error correction we need to add more check bits. We'll illustrate this using one common set of codes used for 4-bit messages, where three check bits are appended, making each into a 7-bit codeword. These are known as Hamming codes, named after American mathematician Richard Hamming (1915 - 98). There are many ways to encode the check bits. In the following example, we'll derive them according to these three rules: 1. The first, second, fourth and fifth bits have even parity 2. The first, third, fourth and sixth bits have even parity 3. The second, third, fourth and seventh bits have even parity This allows us to construct the following code. The columns show the binary number which is our message, the check bits we add to it, as calculated by the above rules, and the final codeword which we would transmit (and hopefully receive). Message bits Check bits Codeword 0000 000 0000000 0001 111 0001111 0010 011 0010011 0011 100 0011100 0100 101 0100101 0101 010 0101010 0110 110 0110110 0111 001 0111001 1000 110 1000110 1001 001 1001001 1010 101 1010101 1011 010 1011010 1100 011 1100011 1101 100 1101100 1110 000 1110000 1111 111 1111111 The reason why this code is clever is a property known as the minimum distance of the code. Unlike our earlier code where an error in one bit merely turned it into another valid codeword, each of these codewords in a Hamming code differs from any other codeword by at least three bits. If there is an error in any one of the seven bits, then we can identify the nearest codeword which is only one bit different from it. If we received the code 1010111, say, then this isn't a valid codeword in our list. If we search through the allowable codes, we can see it's only one bit different from 1010101, so it's reasonable if we correct it to this. As the minimum distance of our code is three bits, we know there is no other codeword which is only one bit different. Automating the Error Correction Process In the case of our Hamming code example, we can automate this process using a neat bit of mathematics. It involves a bit of modulo-2 matrix multiplication. Now, we appreciate that maths doesn't float everyone's boat, so if you really don't want to see the clever bit, look away now. Remember those rules we used to construct our Hamming Code? We first need to write them in the form of a binary matrix. There is one row for each rule, and a column for each bit of the code. We will therefore have three rows and seven columns. Each cell has a 1 if the rule checks that bit and 0 if it doesn't. In our example, our first rule was that the first, second, fourth and fifth bits would have even parity, so the first row is 1101100, and so on. Our completed parity check matrix looks like this: 1 1 0 1 1 0 0 1 0 1 1 0 1 0 0 1 1 1 0 0 1 This is where the matrix multiplication comes in. If we multiply our received message by this matrix, it returns a three-bit result which identifies one of the columns of the parity check matrix. The column it matches with is the bit which is in error. So, using the received code 1010111 once again, we perform the following multiplication: 1 1 0 1 1 0 0 1 0 1 1 0 1 0 0 1 1 1 0 0 1
X 2
1 0 1 0 1 1 1
= 0 1 0
The result 010 is the sixth column of our parity check matrix, indicating that the sixth bit of the received message 1010111 is in error. When we correct this bit, we transform the message into the nearest valid codeword, 1010101. If we multiply every codeword we receive by the parity matrix and then correct the bit indicated by the result, then we will automatically convert the received message into a string of the nearest valid codewords. This corrects every codeword which has no more than one error in it. Multiple Errors The Hamming (7,4) code isn't capable of correcting more than one error bit, but other coding mechanisms exist which do. The more errors we wish to detect, the more check bits we have to use and the longer our message becomes as a result. There is a trade-off between the efficiency or rate of a code ie what proportion of the code is the actual message and the error-correcting ability of it. Different codes are suitable for different applications. In the case of a CD, we would wish to make the code as efficient as we can, so that we can store as much real data on the disk as possible. The precision manufacturing process ensures that errors are not widespread, and any clusters of localised errors, perhaps indicating a pressing defect or a scratch, are minimised by a process of interleaving the numbers such that that data from the same logical location are spread out across different physical locations of the disk. On the other hand, consider the example of a space probe sending back photographs from a distant planet. This will transmit a weak signal, one which will be susceptible to many errors caused by background noise. This application lends itself to a coding system which corrects multiple errors, ensuring that the received picture is as high a quality as possible. It will necessarily be an inefficient code, however, with maybe five or six times as many parity check bits as message bits, and it will take far longer to transmit as a result. Back to those CDs In practice, compact discs don't use Hamming codes; they use something known as a Reed-Solomon code2. This code is too complex to describe here, but it has the advantage of being applicable to the problem of detecting and correcting long bursts of errors, as may be caused by a scratched CD.