今天小编要和大家分享的是模拟技术相关信息,接下来我将从浅谈移动平均滤波器C实现设计,数字滤波器这几个方面来介绍。

模拟技术相关技术文章浅谈移动平均滤波器C实现设计数字滤波器

模拟技术相关技术文章浅谈移动平均滤波器C实现设计

学习一样东西,个人建议须从三个维度进行:What Why How

这里的内容主要参考胡广书编写的《《数字信号处理导论》》7.5.1节,加了一些自己的理解。

提到平均滤波器,做过单片机应用开发的朋友,马上能想到将一些采样数据进行加和求平均。诚然如此,从其时域数学描述而言也很直观:

其中 代表当前测量值,对于单片机应用而言,可以是当前ADC的采样值或者当前传感器经过一系列处理的物理量(比如在工业控制领域中的温度、压力、流量等测量值),而 表示上一次的测量值,以此类推, 则是前第N-1次测量值。

为了揭示其更深层次的机理,这里用Z传递函数将上述公式进一步描述:

对于傅立叶变换而言:

Z变换的本质是拉普拉斯变换的离散化形式, ,令 ,则

令 ,则

所以,平均滤波器的频率响应为:

幅频相频响应分析

利用下面的python代码,来分析一下

# encoding: UTF-8

fromscipy.optimize importnewton

fromscipy.signal importfreqz, dimpulse, dstep

frommath importsin, cos, sqrt, pi

importnumpy asnp

importmatplotlib.pyplot asplt

importsys

reload(sys)

sys.setdefaultencoding( ‘utf8’)

#函数用于计算移动平均滤波器的截止频率

defget_filter_cutoff(N, **kwargs):

func = lambdaw: sin(N*w/ 2) - N/sqrt( 2) * sin(w/ 2)

deriv = lambdaw: cos(N*w/ 2) * N/ 2- N/sqrt( 2) * cos(w/ 2) / 2

omega_0 = pi/N # Starting condition: halfway the first period of sin

returnnewton(func, omega_0, deriv, **kwargs)

#设置采样率

sample_rate = 200#Hz

N = 7

# 计算截止频率

w_c = get_filter_cutoff(N)

cutoff_freq = w_c * sample_rate / ( 2* pi)

# 滤波器参数

b = np.ones(N)

a = np.array([N] + [ 0]*(N -1))

#频率响应

w, h = freqz(b, a, worN= 4096)

#转为频率

w *= sample_rate / ( 2* pi)

#绘制波特图

plt.subplot( 2, 1, 1)

plt.suptitle( “Bode”)

#转换为分贝

plt.plot(w, 20* np.log10(abs(h)))

plt.ylabel( ‘Magnitude [dB]’)

plt.xlim( 0, sample_rate / 2)

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查