定点量化误差python仿真.零极点(1)

本文通过Python仿真探讨定点量化误差对二阶数字滤波器的影响。量化位数从4位到8位变化,展示了量化位数较少时系统严重失真,极点移出单位圆,频率响应丧失;而随着位数增加,性能接近理想状态。
摘要由CSDN通过智能技术生成

定点量化误差python仿真.零极点(1)

原文:https://blog.csdn.net/forlsy/article/details/44347917

在算法仿真中,由于是全精度的计算,曲线往往比较理想。但在把算法写入硬件时,由于资源限制,必须要进行量化。由此带来的误差,将在本节用零极点,以及下一节用频率响应进行演示。

系统为二阶的数字滤波器,方程为:

H(z) = b / a

其中,b = 0.05,a = 1 + 1.7*z^-1 + 0.745*z^-2

N为量化位数,可以任意设置。N越多,误差越小,当然消耗的硬件资源也会随之增加。

下面是量化bit为4位和8位时的情况。可以看到,当量化bit为4时,系统严重失真。极点跑到了单位圆外面,导致频率响应不存在了;而8bit量化时,量化后的性能接近量化前的理想情况。

 

代码如下:

 

 
  1. import matplotlib.pyplot as plt

  2. import numpy as np

  3. from scipy import signal

  4. from matplotlib.patches import Circle

  5.  
  6. N = 8 # quantization bits

  7. Fs = 1000 # sampling frequency

  8. a = np.array([1, 1.7, 0.745]) # denominator

  9. b = np.array([0.05, 0, 0]) # numerator

  10.  
  11. # z zero, p pole, k gain

  12. z1, p1, k1 = signal.tf2zpk(b,a) # zero, pole and gain

  13.  
  14. c = np.vstack((a,b))

  15. Max = (abs(c)).max() #find the largest value

  16. a = a / Max #normalization

  17. b = b / Max

  18.  
  19. Ra = (a * (2**((N-1)-1))).astype(int) # quantizan and truncate

  20. Rb = (b * (2**((N-1)-1))).astype(int)

  21. z2, p2, k2 = signal.tf2zpk(Rb,Ra)

  22.  
  23. fig, ax = plt.subplots()

  24. circle = Circle(xy = (0.0, 0.0), radius = 1, alpha = 0.9, facecolor = 'white')

  25. ax.add_patch(circle)

  26. for i in p1:

  27. ax.plot(np.real(i),np.imag(i), 'bx') #pole before quantization

  28. for i in z1:

  29. ax.plot(np.real(i),np.imag(i),'bo') #zero before quantization

  30. for i in p2:

  31. ax.plot(np.real(i),np.imag(i), 'rx') #pole after quantization

  32. for i in z2:

  33. ax.plot(np.real(i),np.imag(i),'ro') #zero after quantization

  34.  
  35.  
  36. ax.set_xlim(-1.8,1.8)

  37. ax.set_ylim(-1.2,1.2)

  38. ax.grid()

  39. ax.set_title("%d bit quantization" %N)

  40. plt.show()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值