In this specific case, I am modelling a delta-sigma analog-to-digital converter with a basic loop in which the output V is fed back with unity gain to be subtracted from the previously sampled input U (discrete time) and this difference is fed to an integrator modelled with the transfer function:

$$G(z) = \frac{z^{-1}}{1- z^{-1}}$$

1st order block diagram

Quantization noise is added in form of error E to the output of the integrator, giving the output V. It follows:


The complete model, however, should be a third-order system in which the output V is fed back with unity gain twice more so that it is once subtracted from the sampled input in the outer loop, this difference is then integrated and fed to the next loop, in which the fed-back output is subtracted again. This new delta enters the second integrator and the same process repeats once more in the inner loop, where the quantization error is added as described in the first lines above. In total there will be 2 identical outer loops and a third inner loop where the quantization is added. In total there will be 3 integrators with transfer function G.

3rd order block diagram with gains for poles

Now I'm interested in the Noise Transfer Function: NTF = V / E. According to my computations:

procedure for ntf NTF with gain unity in all three feedback paths (alpha, beta and gamma are 1) should be equal to:


It follows:


From here, I would like to do two things:

  • Replace the poles z1 = 1, z2 = 1 and z3 = 1 of the NTF with different values. In order to do so, I simply introduced a gain factor in the feedback path of each of the three loops (alpha, beta and gamma as above). This will add three coefficients in the denominator that I can play with.


  • I would also like to replace two of the zeros of the NTF, which are now all equal to 1, with a pair of complex conjugate zeros. This should provide "lower noise around the zeros, at the expense of a less effective shaping at z = 1, thus increasing the usable frequency range".

If I understand correctly, the numerator N(z) of the NTF should be something like this in the end:


My question is: how do I achieve this? What should I add in the model to shift the zeros slightly away from DC?

Just for information: once I have also obtained a pair of complex conjugate zeros, I should solve an optimization problem to find the optimal position of poles and zeros in the NTF for a determinate quantization noise power. So my humble guess is that ideally I should add something as simple as a gain in the model for the zeros, too, so that can adjust the numerator of the NTF, too, and solve for the optimal zeros within certain boundaries.

  • \$\begingroup\$ It would be helpful if there was a block diagram showing the loops. Would you get zeroes if you tapped each memory element \$1/z\$ in the loops and multiplied them with a gain and added the results to get the final output ? Another method is to simply pass the result of your existing system through an FIR filter. FIR filters are some times called all-zero filters. \$\endgroup\$
    – AJN
    Oct 8, 2020 at 14:53
  • \$\begingroup\$ My first intuition is to respond with "zeros of a system cannot be altered with constant feedback". Perhaps dynamic feedback will be your answer. Block diagram helps. \$\endgroup\$ Oct 8, 2020 at 15:01
  • \$\begingroup\$ I don't truly understand where you got NTF(z) from. Could you show us a step-by-step for NTF(z)? The original equation presented in terms of G(z), not already expanded. \$\endgroup\$ Oct 8, 2020 at 15:06
  • 1
    \$\begingroup\$ In this article I searched for implementations where the multiple taps are made from the output (Y(z) in the article, V in your question). Direct form 2 (Transposed version) matches that criteria. But to create numerator polynomials in that form multiple signal taps are required on the input (E in your NTF case), but since E is usually an unknown (noise), I don't think it will work out. However, all the implementations shown in this article represent the same transfer function. contd... \$\endgroup\$
    – AJN
    Oct 9, 2020 at 14:25
  • 1
    \$\begingroup\$ contd... If you can transform your block diagram into one of the other forms where one need not tap signals directly from E, you may be able to create zeroes at desired locations. Since I am not familiar with this type of ADC or its analyses, I am not in a position to give a proper answer. \$\endgroup\$
    – AJN
    Oct 9, 2020 at 14:25

1 Answer 1


One way you can achieve "placeable zeros" is by using a dynamic feedback. As given in the question, this is what you achieved with constant feedback on three loops: $$G(z)=\frac{1}{z-1}$$ $$\text{NTF(z)}=\frac{1}{\left(1+\frac{\alpha}{z-1}\right)\left(1+\frac{\beta}{z-1}\right)\left(1+\frac{\gamma}{z-1}\right)}$$ $$\text{NTF(z)}=\frac{(z-1)^3}{(z-1+\alpha)(z-1+\beta)(z-1+\gamma)}$$

Now see what happens when replacing constant feedback for dynamic feedbacks with pole-zero cancelation: $$A(z)=\alpha\frac{z-1}{z-\lambda_1}$$ $$B(z)=\beta\frac{z-1}{z-\lambda_2}$$ $$C(z)=\gamma\frac{z-1}{z-\lambda_3}$$ $$\text{NTF(z)}=\frac{1}{\left(1+A(z)G(z)\right)\left(1+B(z)G(z)\right)\left(1+C(z)G(z)\right)}$$ $$\text{NTF(z)}=\frac{1}{\left(1+\frac{\alpha}{z-\lambda_1}\right)\left(1+\frac{\beta}{z-\lambda_2}\right)\left(1+\frac{\gamma}{z-\lambda_3}\right)}$$ $$\text{NTF(z)}=\frac{(z-\lambda_1)(z-\lambda_2)(z-\lambda_3)}{(z-\lambda_1+\alpha)(z-\lambda_2+\beta)(z-\lambda_3+\gamma)}$$

With this, you have achieve three real "placeable zeros" at \$\lambda_1,\lambda_2,\lambda_3\$ and three real placeable poles at \$\lambda_1-\alpha,\lambda_2-\beta,\lambda_3-\gamma\$. In order to achieve complex zeros, at least one of the feedback loops would have to be of second order. I also believe you will need only two feedback loops instead of three, but perhaps other arrangements are possible: $$A(z)=0$$ $$B(z)=\beta\frac{z-1}{z-\lambda_1}$$ $$C(z)=\gamma\frac{z-1}{\left(z-\lambda_2e^{j\theta}\right)\left(z-\lambda_2e^{-j\theta}\right)}$$ $$\text{NTF(z)}=\frac{1}{\left(1+0\right)\left(1+\frac{\beta}{z-\lambda_1}\right)\left(1+\frac{\gamma}{\left(z-\lambda_2e^{j\theta}\right)\left(z-\lambda_2e^{-j\theta}\right)}\right)}$$ $$\text{NTF(z)}=\frac{\left(z-\lambda_1\right)\left(z-\lambda_2e^{j\theta}\right)\left(z-\lambda_2e^{-j\theta}\right)}{\left(z-\lambda_1+\beta\right)\left(\left(z-\lambda_2e^{j\theta}\right)\left(z-\lambda_2e^{-j\theta}\right)+\gamma\right)}$$


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.