首页 > 其他分享 >滤波器设计

滤波器设计

时间:2024-07-10 17:53:05浏览次数:3  
标签:FIR 滤波器 plt IIR 频率响应 np 设计

1. 数字滤波器类型

1.1 FIR滤波器(有限冲激响应滤波器)
FIR滤波器的输出只依赖于当前和过去有限个输入样本,其冲激响应在有限时间内结束。FIR滤波器的优点包括:

线性相位特性
固定长度的滤波器系数
总是稳定的
FIR滤波器的基本形式为:

其中,
h[k] 是滤波器系数,
x[n] 是输入信号,
y[n] 是输出信号。
1.2 IIR滤波器(无限冲激响应滤波器)
IIR滤波器的输出依赖于当前和过去的输入样本以及过去的输出样本,其冲激响应在无限时间内延续。IIR滤波器的优点包括:
滤波器阶数较低,计算复杂度低
可以实现特定频率响应
IIR滤波器的基本形式为:

其中,
a[k] 和 b[k] 是滤波器系数,
x[n] 是输入信号,
y[n] 是输出信号。

2. 滤波器设计方法

2.1 FIR滤波器设计方法
窗函数法: 通过设计理想滤波器的频率响应,然后应用窗函数截断冲激响应。
频率采样法: 直接在频域采样,然后使用逆DFT得到时域滤波器系数。
最小平方误差法: 通过优化使得滤波器的频率响应逼近理想频率响应。
2.2 IIR滤波器设计方法
双线性变换法: 将模拟滤波器转换为数字滤波器。
脉冲响应不变法: 将模拟滤波器的冲激响应离散化,得到数字滤波器。
匹配z变换法: 通过匹配模拟滤波器和数字滤波器的极点和零点,设计数字滤波器。
3. FIR滤波器设计示例
以下是使用Python和SciPy库设计FIR低通滤波器的示例代码:

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import firwin, freqz

# 采样率和滤波器参数
fs = 1000  # 采样率
cutoff = 200  # 截止频率
numtaps = 101  # 滤波器阶数

# 设计FIR低通滤波器
h = firwin(numtaps, cutoff, fs=fs)

# 计算频率响应
w, h_freq = freqz(h, worN=8000)

# 绘制滤波器冲激响应
plt.figure(figsize=(12, 6))

plt.subplot(2, 1, 1)
plt.plot(h)
plt.title('FIR滤波器冲激响应')
plt.xlabel('样本点')
plt.ylabel('幅度')

# 绘制频率响应
plt.subplot(2, 1, 2)
plt.plot(0.5 * fs * w / np.pi, np.abs(h_freq), 'b')
plt.title('FIR滤波器频率响应')
plt.xlabel('频率 (Hz)')
plt.ylabel('幅度')
plt.grid()

plt.tight_layout()
plt.show()

4. IIR滤波器设计示例
以下是使用Python和SciPy库设计IIR低通滤波器的示例代码:

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import butter, lfilter, freqz

# 采样率和滤波器参数
fs = 1000  # 采样率
cutoff = 200  # 截止频率
order = 4  # 滤波器阶数

# 设计IIR低通滤波器
b, a = butter(order, cutoff / (0.5 * fs), btype='low')

# 计算频率响应
w, h = freqz(b, a, worN=8000)

# 绘制频率响应
plt.figure(figsize=(12, 6))

plt.subplot(2, 1, 1)
plt.plot(0.5 * fs * w / np.pi, np.abs(h), 'b')
plt.title('IIR滤波器频率响应')
plt.xlabel('频率 (Hz)')
plt.ylabel('幅度')
plt.grid()

# 绘制零极点图
plt.subplot(2, 1, 2)
z, p, k = tf2zpk(b, a)
plt.scatter(np.real(z), np.imag(z), marker='o', label='Zeros')
plt.scatter(np.real(p), np.imag(p), marker='x', label='Poles')
plt.title('IIR滤波器零极点图')
plt.xlabel('实部')
plt.ylabel('虚部')
plt.grid()
plt.legend()

plt.tight_layout()
plt.show()

标签:FIR,滤波器,plt,IIR,频率响应,np,设计
From: https://www.cnblogs.com/mxh010211/p/18293135

相关文章

  • 设计模式使用场景实现示例及优缺点(创建型模式——单例模式、建造者模式、原型模式)
    创建型模式单例模式(SingletonPattern)单例模式(SingletonPattern)在Java中的使用场景与在其他编程语言中类似,其主要目的是确保一个类只有一个实例,并提供一个全局的访问点。以下是单例模式的一些常见使用场景及详细讲解:使用场景控制资源的使用:数据库连接池:数据库连接是......
  • 设计模式使用场景实现示例及优缺点(结构型模式——代理模式、外观模式)
    结构型模式代理模式(ProxyPattern)代理模式(ProxyPattern)是一种结构型设计模式,它通过引入一个代理对象来控制对另一个对象的访问。这个代理对象可以为被代理的对象提供额外的功能,例如访问控制、延迟初始化、日志记录、或网络访问等。适用场景远程代理:为一个对象在不同......
  • springboot公寓租赁系统-计算机毕业设计源码03822
    目 录摘要1绪论1.1研究背景与意义1.2选题背景1.3论文结构与章节安排2 公寓租赁系统系统分析2.1可行性分析2.1.1技术可行性分析2.1.2经济可行性分析2.1.3法律可行性分析2.2系统功能分析2.2.1功能性分析2.2.2非功能性分析2.3系统用例分......
  • Day3| 203.移除链表元素 & 707.设计链表 & 206.反转链表
    前两天发烧了,这几天没更的后续会补齐链表结构如下classListNode{intval;ListNodenext;ListNode(){}ListNode(intval){this.val=val;}ListNode(intval,ListNodenext){this.val=val;this.next......
  • Java计算机毕业设计生鲜仓储管理系统(开题+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着生鲜电商的蓬勃发展和消费者对食品新鲜度、安全性的日益重视,生鲜仓储管理成为了保障供应链顺畅与产品质量的关键环节。然而,传统的生鲜仓储管理模......
  • 基于springboot+layui+thymeleaf的学生成绩管理系统设计与实现(源码+SQL+使用说明)
    本项目适合做计算机相关专业的毕业设计,课程设计,技术难度适中、工作量比较充实。完整资源获取点击下载完整资源1、资源项目源码均已通过严格测试验证,保证能够正常运行;2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通;3、本项目比较适合计算......
  • 基于SpringBoot + SpringCloud+ElasticSear的在线教育管理系统设计与实现(MySQL、Mongo
    本项目适合做计算机相关专业的毕业设计,课程设计,技术难度适中、工作量比较充实。完整资源获取点击下载完整资源1、资源项目源码均已通过严格测试验证,保证能够正常运行;2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通;3、本项目比较适合计算......
  • 单机版的食品管理系统设计与实现GUI图形界面(学之余版权所有)
    单机版的食品管理系统设计与实现摘要:本论文旨在设计并实现一个单机版的食品管理系统。通过使用Java语言和相关技术,以食品管理为核心功能,实现了用户登录、食品浏览、新增、删除和修改等操作。该系统可以分为管理员和非管理员两类用户,管理员拥有对食品进行增删改查的权限,而非......
  • 【STM32项目】基于Stm32搞怪盒子的设计(完整工程资料)
    基于stm32搞怪的盒子设计前言:最近我看到一个极具创意的搞怪盒子,设计得相当有意思。作为一个热衷于电子DIY的狂热爱好者,怎能错过这样一个有趣的项目呢?于是,我决定亲自动手,设计一个属于自己的、独一无二的搞怪盒子。下面是我设计的详细过程和思路,希望能够为你带来一些启发。......
  • 基于FPGA的千兆以太网设计(1)----大白话解释什么是以太网
    1、什么是以太网?        还记得初学以太网的时候,我就被一大堆专业名词给整懵了:什么以太网,互联网,MAC,IP,局域网,万维网,网络分层模型····等等等等。慢着!我学的不是以太网吗?怎么出来这么一大堆东西?        啊!以太网究竟是什么?别急,我接下来就尽量用通俗的大白话......