{"id":100,"date":"2008-08-07T23:33:30","date_gmt":"2008-08-08T04:33:30","guid":{"rendered":"http:\/\/www.circuitdesign.info\/?p=100"},"modified":"2020-11-02T20:43:30","modified_gmt":"2020-11-03T02:43:30","slug":"a-simple-sigma-delta-loop","status":"publish","type":"post","link":"https:\/\/www.circuitdesign.info\/blog\/2008\/08\/a-simple-sigma-delta-loop\/","title":{"rendered":"A simple sigma-delta loop"},"content":{"rendered":"\n<p>In <a rel=\"noreferrer noopener\" href=\"http:\/\/www.circuitdesign.info\/?p=95\" target=\"_blank\">my post on Quantization<\/a>, I noted that quantization noise degrades the performance of analog-to-digital converters (ADC\u2019s). One very effective method of reducing quantization noise over narrow (but increasingly wider) bands is the <em>Sigma-Delta<\/em> technique.<\/p>\n\n\n\n<p>Consider the block diagram shown below:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"384\" src=\"https:\/\/www.circuitdesign.info\/blog\/wp-content\/uploads\/2008\/08\/scan0056a.jpg\" alt=\"\" class=\"wp-image-96\" srcset=\"https:\/\/www.circuitdesign.info\/blog\/wp-content\/uploads\/2008\/08\/scan0056a.jpg 640w, https:\/\/www.circuitdesign.info\/blog\/wp-content\/uploads\/2008\/08\/scan0056a-300x180.jpg 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/figure>\n\n\n\n<p>This loop attempts to subtract the error induced by the embedded ADC (called the <em>quantizer<\/em>). Of course, this error isn\u2019t available until it\u2019s too late. The error <strong><em>e<\/em><\/strong> is not available until after the input to the quantizer <strong><em>u<\/em><\/strong> passes through the quantizer\u2014at which point, it\u2019s too late to correct the quantizer input <strong><em>u<\/em><\/strong>. So, instead, we use the prior error (which is available): The input <em><strong>u<\/strong><\/em> to the embedded ADC (called the quantizer) is subtracted from the quantizer output <strong><em>y<\/em><\/strong> to obtain the error e. This value is saved in a memory element (z<sup>-1<\/sup>) to modify the input <strong><em>x<\/em><\/strong> on the next cycle.<\/p>\n\n\n\n<p>This loop attempts to subtract the error induced by the embedded ADC (called the <em>quantizer<\/em>). Of course, this error isn\u2019t available until it\u2019s too late. The error <strong><em>e<\/em><\/strong> is not available until after the input to the quantizer <strong><em>u<\/em><\/strong> passes through the quantizer\u2014at which point, it\u2019s too late to correct the quantizer input <strong><em>u<\/em><\/strong>. So, instead, we use the prior error (which is available): The input <em><strong>u<\/strong><\/em> to the embedded ADC (called the quantizer) is subtracted from the quantizer output <strong><em>y<\/em><\/strong> to obtain the error e. This value is saved in a memory element (z<sup>-1<\/sup>) to modify the input <strong><em>x<\/em><\/strong> on the next cycle.<\/p>\n\n\n\n<p>We find that the output Y is composed of (in the <em>z<\/em>-domain):<\/p>\n\n\n\n<p>$$ Y + X + (1-z^{-1})E $$<\/p>\n\n\n\n<p>So, the output <em>Y<\/em> contains <em>X<\/em> plus a filtered version of the error <em>E.<\/em> The value (1-z<sup>-1<\/sup>) is called the noise transfer function (NTF), since it tells us how much (versus no sigma-delta loop) the noise is transferred to the output. A frequency-domain plot is shown below:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"384\" src=\"https:\/\/www.circuitdesign.info\/blog\/wp-content\/uploads\/2008\/08\/scan0056b.jpg\" alt=\"\" class=\"wp-image-98\" srcset=\"https:\/\/www.circuitdesign.info\/blog\/wp-content\/uploads\/2008\/08\/scan0056b.jpg 640w, https:\/\/www.circuitdesign.info\/blog\/wp-content\/uploads\/2008\/08\/scan0056b-300x180.jpg 300w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/figure>\n\n\n\n<p>One can see that near dc, the noise is greatly suppressed. However, near Fs\/2, it is actually enhanced. This makes intuitive sense: we used the previous estimate of the error to correct the input. If the error is constant (dc), this estimate is good; we have suppressed the noise. However, if the error is alternating (a sinusoid at Fs\/2), this estimate is exactly the opposite of what we want; we have actually increased the noise.<\/p>\n\n\n\n<p>This also brings out another feature of sigma-delta loops: the total amount of noise is neither increased nor decreased. The loop simply \u201cshifts\u201d it higher in frequency. This is why sigma-delta loops are called sigma delta <em>modulators<\/em>\u2014they appear to modulate (shift in frequency) the noise.<\/p>\n\n\n\n<p>In addition, the loop has another benefit: the memory element holds a state that depends not merely on the input, but (rather chaotically) on the quantization error itself. As a result, we don\u2019t see periodic behavior in the quantization error when we have a periodic input. As a result, we see less harmonic distortion in the quantization error, and the quantization error appears more like a white noise (which is then filtered by the NTF). This whitening is more desirable than dither, which increases the total amount of noise (quantization noise + dither noise).<\/p>\n\n\n\n<p>The NTF in this case appeared as a first-order high-pass filter. If more delay elements were added (nth order low-pass filter) in the feedback, the NTF would be an nth-order high-pass filter. Furthermore, this error-feedback topology is usually only used in a digital implementation of the loop (rather than a switched-capacitor\/analog implementation). The reason is that in the analog domain, the subtraction <em><strong>y <\/strong>&#8211; <strong>u<\/strong><\/em> is costly. However, in the digital domain it is cheap (actually, free).<\/p>\n\n\n\n<p>While it is intuitive to feedback the error, any loop which suppresses the error for low-frequencies will be equally as effective. These topologies are not as intuitively obvious, but work just as well. I\u2019ll present the alternate analog topology in a future post.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In my post on Quantization, I noted that quantization noise degrades the performance of analog-to-digital converters (ADC\u2019s). One very effective method of reducing quantization noise over narrow (but increasingly wider) bands is the Sigma-Delta technique. Consider the block diagram shown below: This loop attempts to subtract the error induced by the embedded ADC (called the [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3],"tags":[],"class_list":["post-100","post","type-post","status-publish","format-standard","hentry","category-analog-pro"],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/poCEy-1C","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.circuitdesign.info\/blog\/wp-json\/wp\/v2\/posts\/100","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.circuitdesign.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.circuitdesign.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.circuitdesign.info\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.circuitdesign.info\/blog\/wp-json\/wp\/v2\/comments?post=100"}],"version-history":[{"count":5,"href":"https:\/\/www.circuitdesign.info\/blog\/wp-json\/wp\/v2\/posts\/100\/revisions"}],"predecessor-version":[{"id":1196,"href":"https:\/\/www.circuitdesign.info\/blog\/wp-json\/wp\/v2\/posts\/100\/revisions\/1196"}],"wp:attachment":[{"href":"https:\/\/www.circuitdesign.info\/blog\/wp-json\/wp\/v2\/media?parent=100"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.circuitdesign.info\/blog\/wp-json\/wp\/v2\/categories?post=100"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.circuitdesign.info\/blog\/wp-json\/wp\/v2\/tags?post=100"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}