python实现数字滤波器 IIR FIR

import scipy.signal as signal
import numpy as np
import pylab as pl
import matplotlib.pyplot as plt
import matplotlib

设定滤波器参数 , 创建信号

# 某个均衡滤波器的参数
a = np.array([1.0, -1.947463016918843, 0.9555873701383931])
b = np.array([0.9833716591860479, -1.947463016918843, 0.9722157109523452])

# 44.1kHz, 1秒的频率扫描波
t = np.arange(0, 0.5, 1/44100.0)
x= signal.chirp(t, f0=10, t1 = 0.5, f1=1000.0)

# 直接一次计算滤波器的输出
y = signal.lfilter(b, a, x)
plt.plot(x)
plt.show()
# 将输入信号分为50个数据一组
x2 = x.reshape((-1,50))

# 滤波器的初始状态为0, 长度是滤波器系数长度-1
z = np.zeros(max(len(a),len(b))-1, dtype=np.float)
y2 = [] # 保存输出的列表

for tx in x2:
    # 对每段信号进行滤波,并更新滤波器的状态z
    ty, z = signal.lfilter(b, a, tx, zi=z)
    # 将输出添加到输出列表中
b    y2.append(ty)

# 将输出y2转换为一维数组
y2 = np.array(y2)
y2 = y2.reshape((-1,))

# 输出y和y2之间的误差
print np.sum((y-y2)**2)

# 绘图
pl.plot(t, y, t, y2)
pl.show()

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 17:16:21

python实现数字滤波器 IIR FIR的相关文章

数字信号处理 基础知识 对比回顾

1.非周期序列 非周期序列傅里叶变换FT: 非周期序列傅里叶逆变换IFT: 连续时间信号的傅里叶变换FT: = 连续时间信号的傅里叶逆变换IFT: (t) = 2.非周期序列傅里叶变换FT性质: (1).周期性 (2).线性 FT[a*x(n)+b*y(n)] = a*+b* (3).时移与频移 FT[x(n - a)] = FT[x(n)]* = * FT[] = (4).对称性       x(n) = 共轭对称序列 共轭对称序列的实部是偶函数,虚部是奇函数 eg:      x(n) =

语音信号处理-matlab 【引用】

数字语音是信号的一种,我们处理数字语音信号,也就是对一种信号的处理,那信号是什么呢? 信号是传递信息的函数.离散时间信号——序列——可以用图形来表示. 按信号特点的不同,信号可表示成一个或几个独立变量的函数.例如,图像信号就是空间位置(二元变量)的亮度函数.一维变量可以是时间,也可以是其他参量,习惯上将其看成时间.信号有以下几种: (1)连续时间信号:在连续时间范围内定义的信号,但信号的幅值可以是连续数值,也可以是离散数值.当幅值为连续这一特点情况下又常称为模拟信号.实际上连续时间信号与模拟信号

【转帖】MATLAB对语音信号加随机噪声及去噪程序

MATLAB对语音信号加随机噪声及去噪程序 (2011-01-28 23:26:51) %对语言信号做原始的时域波形分析和频谱分析 [y,fs,bits]=wavread('C:\Documents and Settings\Administrator\桌面\cuocuo.wav'); %  sound(y,fs)      % 回放语音信号 n=length(y)  %选取变换的点数 y_p=fft(y,n);      %对n点进行傅里叶变换到频域 f=fs*(0:n/2-1)/n;   %

七周二次课(1月23日) 10.6 监控io性能 10.7 free命令 10.8 ps命令 10.9 查看网络状态 10.10 linux下抓包

七周二次课(1月23日)10.6 监控io性能10.7 free命令10.8 ps命令10.9 查看网络状态10.10 linux下抓包 =====================================================================================================================================================================================

FIR IIR数字滤波器特点简介

FIR:有限脉冲滤波器,线性较好,用非递归算法,可用FFT,计算速度快,不用四舍五入,适合于对相位敏感的线性应用场合,设计灵活没有现成公式可用. 输出与现在和过去的输入有关. IIR:无限脉冲滤波器,采用递归算法,计算速度慢,,非线性四舍五入可引起误差和震荡,适合于对相位不敏感的线性应用场合,高通 低通 带通 带阻滤波器有现成公式可以利用. 输出不但与现在和过去输入有关,还与过去的输出有关. 原文地址:https://www.cnblogs.com/jieruishu/p/9644534.htm

IIR滤波器和FIR滤波器的区别与联系zz

  -------------------------------------------------------------------------------------------------- 1.两种滤波器都是数字滤波器.根据冲激响应的不同,将数字滤波器分为有限冲激响应(FIR)滤波器和无限冲激响应(IIR)滤波器.对于FIR滤波器,冲激响应在有限时间内衰减为零,其输出仅取决于当前和过去的输入信号值.对于IIR滤波器,冲激响应理论上应会无限持续,其输出不仅取决于当前和过去的输入信号值,

How do I convert an IIR filter into a FIR filter in digital signal processing?

Maybe you were asking if there is some kind of design tool allowing to convert an IIR filter into an FIR filter automatically. There is no such a program. IIRs and FIRs have fundamentally different characteristics. If you are just interested in desig

MATLAB设计不同结构的FIR或IIR滤波器

网上很多教程都是使用MATLAB的FDATool工具设计滤波器,然后将系数导出,放到IP核中,由IP核根据数据速率核主处理时钟来决定滤波器的结构.这种设计方式很方便但是不灵活,有时会碰到这种情况:我们需要一个FIR滤波器,数据速率和主处理时钟速率都很高,甚至一样,且滤波器的阶数又很高,这个时候由IP自己来生成滤波器时,会生成全并行滤波器,会占用大量资源,甚至资源都不够用.此时我们希望能自己决定滤波器的结构,从而达到资源和效率相匹配的目的.高手可以自己动手用HDL语言来实现自己所需结构的滤波器,本

基于FPGA的音频信号的FIR滤波(Matlab+Modelsim验证)

1 设计内容 本设计是基于FPGA的音频信号FIR低通滤波,根据要求,采用Matlab对WAV音频文件进行读取和添加噪声信号.FFT分析.FIR滤波处理,并分析滤波的效果.通过Matlab的分析验证滤波效果后,将叠加噪声信号的音频信号输出到txt文件里.然后使用Matlab语言编写滤波器模块和测试模块,通过Modelsim软件读取txt文件的数据,将数据送入滤波模块,最后将滤波的结果输出到txt文件里,最后用Matlab将处理的结果从txt文件读出.显示.FFT分析用Verilog设计的FIR滤