1 00:00:00,530 --> 00:00:02,980 Consider the problem of using voltages 2 00:00:02,980 --> 00:00:06,380 to represent the information in a black-and-white image. 3 00:00:06,380 --> 00:00:10,400 Each (x,y) point in the image has an associated intensity: 4 00:00:10,400 --> 00:00:14,610 black is the weakest intensity, white the strongest. 5 00:00:14,610 --> 00:00:16,740 An obvious voltage-based representation 6 00:00:16,740 --> 00:00:20,730 would be to encode the intensity as a voltage, say 0V for black, 7 00:00:20,730 --> 00:00:23,560 1V for white, and some intermediate voltage 8 00:00:23,560 --> 00:00:26,620 for intensities in-between. 9 00:00:26,620 --> 00:00:29,210 First question: how much information is there 10 00:00:29,210 --> 00:00:31,510 at each point in the image? 11 00:00:31,510 --> 00:00:34,710 The answer depends on how well we can distinguish intensities 12 00:00:34,710 --> 00:00:37,490 or, in our case, voltages. 13 00:00:37,490 --> 00:00:40,450 If we can distinguish arbitrarily small differences, 14 00:00:40,450 --> 00:00:43,880 then there’s potentially an infinite amount of information 15 00:00:43,880 --> 00:00:45,920 in each point of the image. 16 00:00:45,920 --> 00:00:48,690 But, as engineers, we suspect there’s a lower-bound 17 00:00:48,690 --> 00:00:51,420 on the size of differences we can detect. 18 00:00:51,420 --> 00:00:53,720 To represent the same amount of information that can be 19 00:00:53,720 --> 00:00:57,100 represented with N bits, we need to be able to distinguish 20 00:00:57,100 --> 00:01:00,500 a total 2^N voltages in the range of 0V to 1V. 21 00:01:00,500 --> 00:01:04,900 For example, for N = 2, we’d need to be able to distinguish 22 00:01:04,900 --> 00:01:07,190 between four possible voltages. 23 00:01:07,190 --> 00:01:10,550 That doesn’t seem too hard — an inexpensive volt-meter would 24 00:01:10,550 --> 00:01:17,310 let us easily distinguish between 0V, 1/3V, 2/3V and 1V. 25 00:01:17,310 --> 00:01:20,290 In theory, N can be arbitrarily large. 26 00:01:20,290 --> 00:01:23,460 In practice, we know it would be quite challenging to make 27 00:01:23,460 --> 00:01:26,260 measurements with, say, a precision of 1-millionth 28 00:01:26,260 --> 00:01:29,000 of a volt and probably next to impossible 29 00:01:29,000 --> 00:01:32,940 if we wanted a precision of 1-billionth of a volt. 30 00:01:32,940 --> 00:01:36,000 Not only would the equipment start to get very expensive 31 00:01:36,000 --> 00:01:38,290 and the measurements very time consuming, 32 00:01:38,290 --> 00:01:41,190 but we’d discover that phenomenon like thermal noise 33 00:01:41,190 --> 00:01:44,090 would confuse what we mean by the instantaneous voltage 34 00:01:44,090 --> 00:01:46,170 at a particular time. 35 00:01:46,170 --> 00:01:49,540 So our ability to encode information using voltages 36 00:01:49,540 --> 00:01:51,700 will clearly be constrained by our ability 37 00:01:51,700 --> 00:01:53,770 to reliably and quickly distinguish 38 00:01:53,770 --> 00:01:56,670 the voltage at particular time. 39 00:01:56,670 --> 00:01:59,190 To complete our project of representing a complete image, 40 00:01:59,190 --> 00:02:02,270 we’ll scan the image in some prescribed raster order — 41 00:02:02,270 --> 00:02:05,610 left-to-right, top-to-bottom — converting intensities 42 00:02:05,610 --> 00:02:07,610 to voltages as we go. 43 00:02:07,610 --> 00:02:09,509 In this way, we can convert the image 44 00:02:09,509 --> 00:02:12,720 into a time-varying sequence of voltages. 45 00:02:12,720 --> 00:02:15,280 This is how the original televisions worked: 46 00:02:15,280 --> 00:02:17,590 the picture was encoded as a voltage waveform that 47 00:02:17,590 --> 00:02:19,670 varied between the representation for black 48 00:02:19,670 --> 00:02:21,610 and that for white. 49 00:02:21,610 --> 00:02:23,130 Actually the range of voltages was 50 00:02:23,130 --> 00:02:25,320 expanded to allow the signal to specify 51 00:02:25,320 --> 00:02:28,940 the end of the horizontal scan and the end of an image, 52 00:02:28,940 --> 00:02:31,680 the so-called sync signals. 53 00:02:31,680 --> 00:02:34,250 We call this a “continuous waveform” to indicate that it 54 00:02:34,250 --> 00:02:37,190 can take on any value in the specified range at a particular 55 00:02:37,190 --> 00:02:39,110 point in time. 56 00:02:39,110 --> 00:02:42,040 Now let’s see what happens when we try to build a system 57 00:02:42,040 --> 00:02:45,380 to process this signal. 58 00:02:45,380 --> 00:02:48,800 We’ll create a system using two simple processing blocks. 59 00:02:48,800 --> 00:02:51,730 The COPY block reproduces on its output whatever 60 00:02:51,730 --> 00:02:54,130 voltage appears on its input. 61 00:02:54,130 --> 00:02:58,640 The output of a COPY block looks the same as the original image. 62 00:02:58,640 --> 00:03:01,830 The INVERTING block produces a voltage of 1-V 63 00:03:01,830 --> 00:03:04,160 when the input voltage is V, i.e., 64 00:03:04,160 --> 00:03:07,630 white is converted to black and vice-versa. 65 00:03:07,630 --> 00:03:09,680 We get the negative of the input image 66 00:03:09,680 --> 00:03:12,800 after passing it through an INVERTING block. 67 00:03:12,800 --> 00:03:15,510 Why have processing blocks? 68 00:03:15,510 --> 00:03:17,810 Using pre-packaged blocks is a common way 69 00:03:17,810 --> 00:03:19,660 of building large circuits. 70 00:03:19,660 --> 00:03:22,310 We can assemble a system by connecting the blocks one 71 00:03:22,310 --> 00:03:24,550 to another and reason about the behavior 72 00:03:24,550 --> 00:03:26,860 of the resulting system without having 73 00:03:26,860 --> 00:03:30,170 to understand the internal details of each block. 74 00:03:30,170 --> 00:03:32,800 The pre-packaged functionality offered by the blocks 75 00:03:32,800 --> 00:03:35,050 makes them easy to use without having to be 76 00:03:35,050 --> 00:03:37,820 an expert analog engineer! 77 00:03:37,820 --> 00:03:40,520 Moreover, we would expect to be able to wire up 78 00:03:40,520 --> 00:03:42,780 the blocks in different configurations 79 00:03:42,780 --> 00:03:44,780 when building different systems and be 80 00:03:44,780 --> 00:03:46,920 able to predict the behavior of each system 81 00:03:46,920 --> 00:03:49,970 based on the behavior of each block. 82 00:03:49,970 --> 00:03:52,720 This would allow us to build systems like tinker toys, 83 00:03:52,720 --> 00:03:56,410 simply by hooking one block to another. 84 00:03:56,410 --> 00:03:59,040 Even a programmer who doesn’t understand the electrical 85 00:03:59,040 --> 00:04:02,200 details could expect to build systems that perform some 86 00:04:02,200 --> 00:04:05,120 particular processing task. 87 00:04:05,120 --> 00:04:08,090 The whole idea is that there’s a guarantee of predictable 88 00:04:08,090 --> 00:04:09,350 behavior: 89 00:04:09,350 --> 00:04:11,250 If the components work and we hook them up 90 00:04:11,250 --> 00:04:13,990 obeying whatever the rules are for connecting blocks, 91 00:04:13,990 --> 00:04:18,160 we would expect the system to work as intended. 92 00:04:18,160 --> 00:04:21,940 So, let’s build a system with our COPY and INVERTING blocks. 93 00:04:21,940 --> 00:04:24,920 Here’s an image processing system using a few instances 94 00:04:24,920 --> 00:04:26,070 each block. 95 00:04:26,070 --> 00:04:29,340 What do we expect the output image to look like? 96 00:04:29,340 --> 00:04:32,670 Well, the COPY blocks don’t change the image and there are 97 00:04:32,670 --> 00:04:35,780 an even number of INVERTING blocks, so, in theory, 98 00:04:35,780 --> 00:04:39,960 the output image should be identical to the input image. 99 00:04:39,960 --> 00:04:42,890 But in reality, the output image isn’t a perfect copy 100 00:04:42,890 --> 00:04:43,590 of the input. 101 00:04:43,590 --> 00:04:47,060 It’s slightly fuzzy, the intensities are slightly off 102 00:04:47,060 --> 00:04:50,300 and it looks like sharp changes in intensity have been smoothed 103 00:04:50,300 --> 00:04:54,750 out, creating a blurry reproduction of the original. 104 00:04:54,750 --> 00:04:57,320 What went wrong? 105 00:04:57,320 --> 00:04:59,990 Why doesn’t theory match reality? 106 00:04:59,990 --> 00:05:03,810 Perhaps the COPY and INVERTING blocks don’t work correctly? 107 00:05:03,810 --> 00:05:06,250 That’s almost certainly true, in the sense that they don’t 108 00:05:06,250 --> 00:05:10,400 precisely obey the mathematical description of their behavior. 109 00:05:10,400 --> 00:05:13,790 Small manufacturing variations and differing environmental 110 00:05:13,790 --> 00:05:16,590 conditions will cause each instance of the COPY block 111 00:05:16,590 --> 00:05:19,950 to produce not V volts for a V-volt input, 112 00:05:19,950 --> 00:05:23,840 but V+epsilon volts, where epsilon represents the amount 113 00:05:23,840 --> 00:05:26,700 of error introduced during processing. 114 00:05:26,700 --> 00:05:29,280 Ditto for the INVERTING block. 115 00:05:29,280 --> 00:05:32,650 The difficulty is that in our continuous-value representation 116 00:05:32,650 --> 00:05:37,240 of intensity, V+epsilon is a perfectly correct output value, 117 00:05:37,240 --> 00:05:40,243 just not for a V-volt input! 118 00:05:40,243 --> 00:05:42,410 In other words, we can’t tell the difference between 119 00:05:42,410 --> 00:05:45,770 a slightly corrupted signal and a perfectly valid signal 120 00:05:45,770 --> 00:05:48,900 for a slightly different image. 121 00:05:48,900 --> 00:05:52,200 More importantly — and this is the real killer — the errors 122 00:05:52,200 --> 00:05:55,560 accumulate as the encoded image passes through the system 123 00:05:55,560 --> 00:05:58,050 of COPY and INVERTING blocks. 124 00:05:58,050 --> 00:05:59,970 The larger the system, the larger 125 00:05:59,970 --> 00:06:03,010 the amount of accumulated processing error. 126 00:06:03,010 --> 00:06:05,060 This doesn’t seem so good. 127 00:06:05,060 --> 00:06:06,930 It would be awkward, to say the least, 128 00:06:06,930 --> 00:06:10,650 if we had to have rules about how many computations could 129 00:06:10,650 --> 00:06:12,640 be performed on encoded information 130 00:06:12,640 --> 00:06:17,452 before the results became too corrupted to be usable. 131 00:06:17,452 --> 00:06:18,910 You would be correct if you thought 132 00:06:18,910 --> 00:06:20,590 this meant that the theory we used 133 00:06:20,590 --> 00:06:24,470 to describe the operation of our system was imperfect. 134 00:06:24,470 --> 00:06:27,460 We’d need a very complicated theory indeed to capture all 135 00:06:27,460 --> 00:06:30,300 the possible ways in which the output signal could differ from 136 00:06:30,300 --> 00:06:32,830 its expected value. 137 00:06:32,830 --> 00:06:35,230 Those of us who are mathematically minded might 138 00:06:35,230 --> 00:06:37,970 complain that “reality is imperfect”. 139 00:06:37,970 --> 00:06:40,210 This is going a bit far though. 140 00:06:40,210 --> 00:06:42,960 Reality is what it is and, as engineers, 141 00:06:42,960 --> 00:06:45,660 we need to build our systems to operate reliably 142 00:06:45,660 --> 00:06:47,730 in the real world. 143 00:06:47,730 --> 00:06:50,190 So perhaps the real problem lies in how we 144 00:06:50,190 --> 00:06:53,080 chose to engineer the system. 145 00:06:53,080 --> 00:06:55,030 In fact, all of the above are true! 146 00:06:55,030 --> 00:06:57,900 Noise and inaccuracy are inevitable. 147 00:06:57,900 --> 00:07:01,320 We can’t reliably reproduce infinite information. 148 00:07:01,320 --> 00:07:04,160 We must design our system to tolerate some amount of error 149 00:07:04,160 --> 00:07:07,120 if it is to process information reliably. 150 00:07:07,120 --> 00:07:10,300 Basically, we need to find a way to notice that errors have been 151 00:07:10,300 --> 00:07:13,020 introduced by a processing step and restore 152 00:07:13,020 --> 00:07:15,350 the correct value before the errors have a chance 153 00:07:15,350 --> 00:07:16,790 to accumulate. 154 00:07:16,790 --> 00:07:19,920 How to do that is our next topic.