基于脉冲响应不变法的IIR滤波器设计与MATLAB实现

news2025/2/4 6:54:57

一、设计原理

脉冲响应不变法是一种将模拟滤波器转换为数字滤波器的经典方法。其核心思想是通过对模拟滤波器的冲激响应进行等间隔采样来获得数字滤波器的单位脉冲响应。

设计步骤

  1. 确定数字滤波器性能指标

  2. 将数字指标转换为等效的模拟滤波器指标

  3. 设计对应的模拟滤波器

  4. 将模拟滤波器转换为数字滤波器

二、MATLAB实现关键函数

  • butter(): 巴特沃斯滤波器设计

  • impinvar(): 脉冲响应不变法转换

  • freqz(): 数字滤波器频率响应分析

  • impz(): 数字滤波器脉冲响应分析

三、完整实现代码

%% IIR滤波器设计 - 脉冲响应不变法
clc; clear; close all;

% 设计参数
Fs = 1000;          % 采样频率(Hz)
Fc = 100;           % 截止频率(Hz)
N = 4;              % 滤波器阶数

% 数字滤波器指标
Omega_c = 2*pi*Fc;  % 模拟截止角频率(rad/s)
T = 1/Fs;           % 采样间隔

% 设计模拟巴特沃斯滤波器
[bs, as] = butter(N, Omega_c, 's');

% 脉冲响应不变法转换
[bz, az] = impinvar(bs, as, Fs);

% 频率响应分析
figure;
freqz(bz, az, 1024, Fs);
title('数字滤波器频率响应');

% 脉冲响应对比
t = 0:T:0.1;
ha = impulse(tf(bs, as), t);
hd = impz(bz, az, length(t));

figure;
plot(t, ha, 'r', t, hd, 'b--');
legend('模拟滤波器','数字滤波器');
xlabel('时间(s)'); ylabel('幅度');
title('脉冲响应对比');
grid on;

% 幅频特性对比
[hs, ws] = freqs(bs, as, 1024);
[hz, wz] = freqz(bz, az, 1024);

figure;
subplot(2,1,1);
semilogx(ws/(2*pi), 20*log10(abs(hs)), 'r');
hold on;
semilogx(wz*Fs/(2*pi), 20*log10(abs(hz)), 'b');
xlabel('频率(Hz)'); ylabel('幅度(dB)');
title('幅频特性对比');
legend('模拟','数字');
axis([1 Fs/2 -100 5]);
grid on;

subplot(2,1,2);
semilogx(ws/(2*pi), unwrap(angle(hs)), 'r');
hold on;
semilogx(wz*Fs/(2*pi), unwrap(angle(hz)), 'b');
xlabel('频率(Hz)'); ylabel('相位(rad)');
title('相频特性对比');
grid on;

四、代码解析

  1. 参数设置

    • 采样频率Fs = 1000Hz

    • 截止频率Fc = 100Hz

    • 4阶巴特沃斯滤波器

  2. 设计流程

    • 先设计模拟巴特沃斯滤波器

    • 使用impinvar函数进行数字转换

    • 对比分析模拟/数字滤波器的频率响应和时域特性

五、运行结果分析

  1. 频率响应

    • 数字滤波器在100Hz处呈现-3dB衰减

    • 阻带衰减特性与模拟滤波器基本一致

    • 高频段出现混叠效应(脉冲响应不变法固有特性)

  2. 时域特性

    • 数字滤波器脉冲响应与模拟滤波器采样值良好匹配

    • 验证了脉冲响应不变法的时域等价性

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2291664.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RabbitMQ快速上手及入门

概念 概念: publisher:生产者,也就是发送消息的一方 consumer:消费者,也就是消费消息的一方 queue:队列,存储消息。生产者投递的消息会暂存在消息队列中,等待消费者处理 exchang…

自动化构建-make/Makefile 【Linux基础开发工具】

文章目录 一、背景二、Makefile编译过程三、变量四、变量赋值1、""是最普通的等号2、“:” 表示直接赋值3、“?” 表示如果该变量没有被赋值,4、""和写代码是一样的, 五、预定义变量六、函数**通配符** 七、伪目标 .PHONY八、其他常…

响应式编程与协程

响应式编程与协程的比较 响应式编程的弊端虚拟线程Java线程内核线程的局限性传统线程池的demo虚拟线程的demo 响应式编程的弊端 前面用了几篇文章介绍了响应式编程,它更多的使用少量线程实现线程间解耦和异步的作用,如线程的Reactor模型,主要…

智能小区物业管理系统推动数字化转型与提升用户居住体验

内容概要 在当今快速发展的社会中,智能小区物业管理系统的出现正在改变传统的物业管理方式。这种系统不仅仅是一种工具,更是一种推动数字化转型的重要力量。它通过高效的技术手段,将物业管理与用户居住体验紧密结合,无疑为社区带…

从Proxmox VE开始:安装与配置指南

前言 Proxmox Virtual Environment (Proxmox VE) 是一个开源的虚拟化平台,基于Debian Linux,支持KVM虚拟机和LXC容器。它提供了一个强大的Web管理界面,方便用户管理虚拟机、存储、网络等资源。Proxmox VE广泛应用于企业级虚拟化、云计算和开…

【C++】B2115 密码翻译

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目解析💯1. 老师的做法代码实现:思路解析: 💯2. 我的做法代码实现:思路分析: 💯3. 老师…

Leetcode—598. 区间加法 II【简单】

2025每日刷题&#xff08;206&#xff09; Leetcode—598. 区间加法 II 实现代码 class Solution { public:int maxCount(int m, int n, vector<vector<int>>& ops) {int ans m * n;int x ops.size();if(ops.empty()) {return ans;}int xm ops[0][0], ym …

OpenCV:图像轮廓

目录 简述 1. 什么是图像轮廓&#xff1f; 2. 查找图像轮廓 2.1 接口定义 2.2 参数说明 2.3 代码示例 2.4 运行结果 3. 绘制图像轮廓 3.1 接口定义 3.2 参数说明 3.3 代码示例 3.4 运行结果 4. 计算轮廓周长 5. 计算轮廓面积 6. 示例&#xff1a;计算图像轮廓的面…

文字显示省略号

多行文本溢出显示省略号

Cosmos - 世界模型开发平台

文章目录 一、关于 Cosmos主要特点模型家族 二、使用示例1、推理2、后训练 许可证和联系方式 一、关于 Cosmos NVIDIA Cosmos是开发者第一的世界基础模型平台&#xff0c;旨在帮助物理AI开发者更好、更快地构建他们的物理AI系统。宇宙包含 预训练模型&#xff0c;可通过拥抱脸…

图像分割中根据mask的ROI,去除mask和image中没有勾画ROI层数以外的图像

在分割任务中&#xff0c;一个患者有很多层图像&#xff0c;但是勾画的ROI仅有那么几层。我想去除ROI以外层数的那些没用的图像。这里以一个36张图像的nii格式数据为例 查看一下mask文件中有多少个非0图像 import nibabel as nib import numpy as np# 加载 .nii 文件 file_pat…

全栈开发:使用.NET Core WebAPI构建前后端分离的核心技巧(一)

目录 cors解决跨域 依赖注入使用 分层服务注册 缓存方法使用 内存缓存使用 缓存过期清理 缓存存在问题 分布式的缓存 cors解决跨域 前后端分离已经成为一种越来越流行的架构模式&#xff0c;由于跨域资源共享(cors)是浏览器的一种安全机制&#xff0c;它会阻止前端应用…

springboot使用rabbitmq

使用springboot创建rabbitMQ的链接。 整个项目结构如下&#xff1a; 1.maven依赖 <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>3.4.1</version> </dependency>application.y…

Linux——ext2文件系统(二)

Linux——ext2文件系统 ext2文件系统宏观认识一、磁盘分区与格式化二、块组&#xff08;Block Group&#xff09;结构三、文件系统特性 文件名与目录名与inode一、inode的作用原理二、文件与目录名与inode的关系 路径一&#xff0c;路径解析二&#xff0c;路径缓存三&#xff0…

如何让DeepSeek恢复联网功能?解决(由于技术原因,联网搜索暂不可用)

DeekSeek提示&#xff1a;&#xff08;由于技术原因&#xff0c;联网搜索暂不可用&#xff09; 众所周知&#xff0c;因为海外黑客的ddos攻击、僵尸网络攻击&#xff0c;deepseek的联网功能一直处于宕机阶段&#xff0c;但是很多问题不联网出来的结果都还是2023年的&#xff0c…

python的ruff简单使用

Ruff 是一个用 Rust 编写的高性能 Python 静态分析工具和代码格式化工具。它旨在提供快速的代码检查和格式化功能&#xff0c;同时支持丰富的配置选项和与现有工具的兼容性。ruff是用rust实现的python Linter&Formatter。 安装&#xff1a; conda install -c conda-forge…

【漫话机器学习系列】077.范数惩罚是如何起作用的(How Norm Penalties Work)

范数惩罚的作用与原理 范数惩罚&#xff08;Norm Penalty&#xff09; 是一种常用于机器学习模型中的正则化技术&#xff0c;它的主要目的是控制模型复杂度&#xff0c;防止过拟合。通过对模型的参数进行惩罚&#xff08;即在损失函数中加入惩罚项&#xff09;&#xff0c;使得…

LLMs之OpenAI o系列:OpenAI o3-mini的简介、安装和使用方法、案例应用之详细攻略

LLMs之OpenAI o系列&#xff1a;OpenAI o3-mini的简介、安装和使用方法、案例应用之详细攻略 目录 相关文章 LLMs之o3&#xff1a;《Deliberative Alignment: Reasoning Enables Safer Language Models》翻译与解读 LLMs之OpenAI o系列&#xff1a;OpenAI o3-mini的简介、安…

Notepad++消除生成bak文件

设置(T) ⇒ 首选项... ⇒ 备份 ⇒ 勾选 "禁用" 勾选禁用 就不会再生成bak文件了 notepad怎么修改字符集编码格式为gbk 如图所示

后台管理系统通用页面抽离=>高阶组件+配置文件+hooks

目录结构 配置文件和通用页面组件 content.config.ts const contentConfig {pageName: "role",header: {title: "角色列表",btnText: "新建角色"},propsList: [{ type: "selection", label: "选择", width: "80px&q…