2025电赛G题-发挥部分-参数自适应FIR滤波器

(1)测评现场提供由RLC元件(各1个)组成的“未知模型电路”。 按照图3所示,探究装置连接该电路的输入和输出端口,对该电路进行 自主学习、建模(不可借助外部测试设备),2分钟内完成学习建模,显 示“未知模型电路”的滤波类型。 图3 学习、建模

(2)学习建模完成后,断开探究装置和“未知模型电路”的端口连接,将信号发生器接入探究装置和“未知模型电路”的输入端口(探究装置输入 电阻不小于100kΩ),如图4所示。探究装置能根据信号发 生器的输出信号推理生成与“未知模型电路”相同的输出信 号。要求探究装置和“未知模型电路”的输出信号相比波形 无失真、在示波器上能连续同频稳定显示(相位无要求), 两者峰峰值相对误差绝对值不大于10%。

        信号发生器的输出为频率1kHz~50kHz(步长200Hz)、 图4 装置与未知模型电路输出比对 峰峰值2V的周期信号,类型分别为:正弦波、矩形波(占空比10%~50%、步长5%)和其他 周期信号。 

        该部分核心功能为对电路进行自主学习、建模。并且要学习的电路对于不同频率的输入有着不同的响应。因此,可以使用参数自适应的FIR滤波器来实现该功能。

计算 FIR(有限脉冲响应)滤波器参数是设计 FIR 滤波器的核心步骤,其目标是确定滤波器的单位脉冲响应系数(即抽头系数),以满足预设的频率响应指标(如通带截止频率、阻带截止频率、通带波纹、阻带衰减等)。以下是详细的计算方法和步骤:

一、FIR 滤波器设计的基本原理

FIR 滤波器的频率响应由其单位脉冲响应 h(n) 决定,表达式为:H(ejω)=∑n=0N−1​h(n)e−jωn
其中,N 是滤波器的阶数(抽头数),ω 是数字角频率(范围 0∼π)。
设计的核心是找到合适的 h(n),使 H(ejω) 逼近理想频率响应。

二、FIR 滤波器参数计算的关键步骤

1. 明确设计指标

首先需确定滤波器的基本参数,包括:

  • 滤波器类型:低通、高通、带通、带阻。
  • 截止频率:通带截止频率 ωp​(或 fp​)、阻带截止频率 ωs​(或 fs​)(需转换为数字频率,公式:ω=2πf/fs​,fs​ 为采样频率)。
  • 通带最大波纹:δp​(允许的通带衰减波动,如 0.1 dB)。
  • 阻带最小衰减:As​(阻带衰减要求,如 60 dB)。
2. 选择设计方法

FIR 滤波器参数计算的主流方法有以下三种,各有适用场景:

(1)窗函数法(最常用)

原理:用理想滤波器的脉冲响应(非因果、无限长)与窗函数(有限长)卷积,得到有限长、因果的 h(n)。
步骤

  1. 确定理想频率响应 Hd​(ejω)(如低通滤波器的理想响应为:∣ω∣≤ωc​ 时为 1,否则为 0)。
  2. 计算理想脉冲响应 hd​(n):通过逆傅里叶变换 hd​(n)=2π1​∫−ππ​Hd​(ejω)ejωndω。
    • 例:理想低通的 hd​(n)=πnsin(ωc​n)​(ωc​ 为截止角频率)。
  3. 选择窗函数(如矩形窗、汉宁窗、汉明窗、布莱克曼窗等),窗函数需满足:
    • 长度 N(需根据过渡带宽和阻带衰减确定,见下文)。
    • 因果性:将 hd​(n) 右移 (N−1)/2 个采样点,得到 h(n)=hd​(n−(N−1)/2)⋅w(n),其中 w(n) 为窗函数。

窗函数选择参考

窗函数过渡带宽(2π/N)阻带最小衰减(dB)适用场景
矩形窗1.821过渡带宽要求严,衰减要求低
汉宁窗6.244平衡过渡带和衰减
汉明窗6.653常用,衰减适中
布莱克曼窗11.074高阻带衰减要求

阶数 N 计算
根据过渡带宽 Δω=ωs​−ωp​,窗函数法的 N≈Δω窗函数过渡带宽系数⋅2π​。

  • 例:汉明窗的过渡带宽系数为 6.6,若 Δω=0.2π,则 N≈6.6×2π/0.2π=66。
(2)频率采样法

原理:在频域对理想频率响应 Hd​(ejω) 进行等间隔采样,通过 IDFT 得到 h(n)。
步骤

  1. 确定采样点数 N(滤波器阶数),在 ωk​=2πk/N(k=0,1,...,N−1)处对 Hd​(ejω) 采样,得到 H(k)。
  2. 为改善过渡带性能,可在通带与阻带之间设置过渡采样点(非 0 非 1 的中间值)。
  3. 计算 h(n)=N1​∑k=0N−1​H(k)ej2πkn/N。

特点:直接控制频域采样点,但过渡带性能较差,需额外优化过渡点。

(3)等波纹优化设计法(切比雪夫逼近法)

原理:通过极小化最大误差(通带和阻带内的波纹均匀分布),使实际频率响应与理想响应的偏差最小。
步骤

  1. 定义逼近区间(通带 [0,ωp​]、阻带 [ωs​,π])和误差权重(阻带误差权重通常更大)。
  2. 利用 Remez 交换算法求解最优 h(n),该算法通过迭代找到极值点,使误差在各区间内达到最大值且符号交替。

特点:相同阶数下性能优于窗函数法,过渡带更窄,阻带衰减更高,但计算更复杂(通常需工具实现)。

其中频率采样法易于实现

发挥部分可以分为两个方向来处理,

对于频率步进要求较高,意味着计算精度高,计算复杂度高(滤波器阶数高于512阶),对此,直接使用傅里叶变换进行滤波处理较为合适。

1.测试出电路的幅频特性曲线(频率步进应与FFT的频率精度保持一致);

2.对输入信号进行傅里叶变换

3.使用幅频特性曲线对信号频谱进行加权处理

4.对处理过后的频谱进行信号重建,使用傅里叶反变换实现


C语言版本 FFT函数
	int NUM = 1 << num;float XI[64] = {0};int i,j,k;      float PLL = Fs / 64;for(i=0;i<NUM;i++) {arr2[i] = arr[(int)(PLL * i)];}for(i=0;i<NUM;i++){XR[i] = (float)arr2[K_VALUE[i]];}int TR, TI, WR, WI;for(int i=0;i<num;i++)            {int B = 1<<i;                  for(int j=0;j<B;j++)            {int p=j*(1<<(num-i-1));       //旋转因子的系数for(int k=j;k<NUM;k=k+2*B){TR= XR[k];TI=XI[k];WR= XR[k+B]*COS_VALUE[p]+XI[k+B]*SIN_VALUE[p];WI=-XR[k+B]*SIN_VALUE[p]+XI[k+B]*COS_VALUE[p];XR[k]=(TR+WR);XI[k]=TI+WI;XR[k+B]=(TR-WR);XI[k+B]=TI-WI;}}}

对于实时性要求较高(滤波器阶数低于512阶),意味着较少的计算量,和较低的频率步进,对此,使用fir滤波器较为合适
通过将幅频特性曲线转换到时域,得到FIR滤波器系数。


C语言版本的FIR滤波器系数计算
/*------------数字指标-------------------*/ double 	Wc1=2*pi*((Transfer_param->fp1+Transfer_param->fst1)/2)/Transfer_param->fs;double	Wc2=2*pi*((Transfer_param->fp2+Transfer_param->fst2)/2)/Transfer_param->fs;double  det_W1=2*pi*abs(Transfer_param->fst1-Transfer_param->fp1)/Transfer_param->fs;           double  det_W2=2*pi*abs(Transfer_param->fst2-Transfer_param->fp2)/Transfer_param->fs;			double 	det_W=det_W1;if((Filter_type==BANDPASSFILTER)||(Filter_type==BANDSTOPFILTER)) {det_W=det_W1>det_W2?det_W2:det_W1;}int n;int N;int window; /*窗函数选择--------------------------------------------------------------------------- */ // 根据衰as减选择窗 switch((int)(Transfer_param->ast/10)){case 2:   //20db N=(int)1.8*pi/det_W;if(N!=1.8*pi/det_W)N++;window=Rectangle;break;	case 3://30db N=(int)6.1*pi/det_W;if(N!=6.1*pi/det_W)N++;window=triangle;break;case 4: //40db N=(int)(6.2*pi/det_W);if(N!=6.2*pi/det_W)N++;window=Hanning;break;case 5 ://50db N=(int)(6.6*pi/det_W);if(N!=6.6*pi/det_W)N++;window=Hamming;break;case 7 ://70dbN=(int)11*pi/det_W;if(N!=11*pi/det_W)N++;window=Blackman;break;default: return 0;	}int const const_N=N;switch(window){case Rectangle:       for(n=0;n<N;n++){win_param[n]=1;  			}break;case triangle:for(n=0;n<N;n++){win_param[n]=1; 	}break;case Hanning:  for(n=0;n<N;n++){win_param[n]=0.5*(1-cos(2*pi*n/(N-1))); 			}break;case Hamming :for(n=0;n<N;n++){win_param[n]=0.54-0.46*cos(2*pi*n/(N-1));}  		break;case Blackman :for(n=0;n<N;n++){win_param[n]=0.42-0.5*cos((4*pi*n/(N-1))-0.08*(4*pi*n/(N-1))); 			}  		break;default:return 0;	}/*计算FIR的传递函数*/ Filter_h.N=N;for(n=0;n<N;n++) {Filter_h.Hn[n] = h_lixiang[n]*win_param[n];}return &Filter_h;	   

另外对于32单片机,实时处理信号较为困难,一般使用乒乓操作对数据进行处理

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

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

相关文章

Linux基础 -- 内核快速向用户态共享内核变量方案之ctl_table

系统化、可直接上手的 /proc/sys sysctl 接口使用文档。内容涵盖&#xff1a;机制原理、适用场景、ctl_table 字段详解、常用解析器&#xff08;proc_handler&#xff09;完整清单与选型、最小样例到进阶&#xff08;范围校验、毫秒→jiffies、字符串、数组、每网络命名空间&a…

【RH124知识点问答题】第3章 从命令行管理文件

1. 怎么理解“Linux中一切皆文件”&#xff1f;Linux是如何组织文件的&#xff1f;&#xff08;1&#xff09;“Linux中一切皆文件”的理解和文件组织&#xff1a;在Linux中&#xff0c;“一切皆文件”指的是Linux将各种设备、目录、文件等都视为文件对象进行管理。这种统一的文…

练习javaweb+mysql+jsp

只是简单的使用mysql、简单的练习。 有很多待完善的地方&#xff0c;比如list的servlet页面&#xff0c;应该判断有没有用户的。 比如list.jsp 应该循环list而不是写死 index.jsp 样式可以再优化一下的。比如按钮就特丑。 本文展示了一个简单的MySQL数据库操作练习项目&#x…

使用Nginx部署前端项目

使用Nginx部署前端项目 一、总述二、具体步骤 2.1解压2.2将原来的html文件夹的文件删除&#xff0c;将自己的静态资源文件放进去&#xff0c;点击nginx.exe文件启动项目2.3查看进程中是否有ngix的两个进程在浏览器中输入“localhost:端口号”即可访问。 2.4端口被占用情况处理 …

【论文学习】KAG论文翻译

文章目录KAG: Boosting LLMs in Professional Domains via Knowledge Augmented Generation摘要1 引言2 方法论2.1 LLM友好型知识表示2.2 互索引机制2.2.1 语义分块2.2.2 带丰富语境的的信息抽取2.2.3 领域知识注入与约束2.2.4 文本块向量与知识结构的相互索引2.3 逻辑形式求解…

24黑马SpringCloud安装MybatisPlus插件相关问题解决

目录 一、前言 二、菜单栏没有Other 三、Config Database里的dburl需要加上时区等配置 一、前言 在学习24黑马SpringCloud的MybatisPlus-12.拓展功能-代码生成器课程时&#xff0c;发现由于IDEA版本不同以及MybatisPlus版本更新会出现与视频不一致的相关问题&#xff0c;本博…

人工智能赋能聚合物及复合材料模型应用与实践

近年来&#xff0c;生成式人工智能&#xff08;包括大语言模型、分子生成模型等&#xff09;在聚合物及复合材料领域掀起革命性浪潮&#xff0c;其依托数据驱动与机理协同&#xff0c;从海量数据中挖掘构效关系、通过分子结构表示&#xff08;如 SMILES、BigSMILES&#xff09;…

MyBatis-Plus3

一、条件构造器和常用接口 1.wapper介绍 MyBatis-Plus 提供了一套强大的条件构造器&#xff08;Wrapper&#xff09;&#xff0c;用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件&#xff0c;无需编写繁琐的 SQL 语句&#xff0c;从而提高开…

GXP6040K压力传感器可应用于医疗/汽车/家电

GXP6040K 系列压力传感器是一种超小型&#xff0c;为设备小型化做出贡献的高精度半导体压力传感器&#xff0c;适用于生物医学、汽车电子、白色家电等领域。采用标准的SOP6 和 DIP6 封装形式&#xff0c;方便用户进行多种安装方式。 内部核心芯片是利用 MEMS&#xff08;微机械…

Android ConstraintLayout 使用详解

什么是 ConstraintLayoutConstraintLayout&#xff08;约束布局&#xff09;是 Android Studio 2.2 引入的一种新型布局&#xff0c;现已成为 Android 开发中最强大、最灵活的布局管理器之一。它结合了 RelativeLayout 的相对定位和 LinearLayout 的线性布局优势&#xff0c;能…

Unity3D数学第三篇:坐标系与变换矩阵(空间转换篇)

Unity3D数学第一篇&#xff1a;向量与点、线、面&#xff08;基础篇&#xff09; Unity3D数学第二篇&#xff1a;旋转与欧拉角、四元数&#xff08;核心变换篇&#xff09; Unity3D数学第三篇&#xff1a;坐标系与变换矩阵&#xff08;空间转换篇&#xff09; Unity3D数学第…

UV安装并设置国内源

文章目录一、UV下载1.官方一键安装2.github下载安装二、更换国内镜像源&#xff08;加速下载&#xff09;方法1&#xff1a;临时环境变量&#xff08;单次生效&#xff09;方法2&#xff1a;永久配置&#xff08;推荐&#xff09;方法3&#xff1a;命令行直接指定源三、验证镜像…

1 前言:什么是 CICD 为什么要学 CICD

什么是 CI/CD 我的资源库网站&#xff1a;https://www.byteooo.cn 在开发阶段&#xff0c;许多编译工具会将我们的源码编译可使用的文件。例如 vue-cli 的项目会被 webpack 打包编译为浏览器的文件&#xff0c;Java 项目会被编译为 .class/jar 文件以供服务器使用。 但是&am…

GitHub 趋势日报 (2025年07月30日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图3579copyparty752supervision664500-AI-Agents-Projects483awesome403prompt-optim…

“非参数化”大语言模型与RAG的关系?

这个问题触及了一个关键的技术细节&#xff0c;两者关系密切&#xff0c;但层面不同&#xff1a; “非参数化”大语言模型是一个更广泛的概念或类别&#xff0c;而RAG&#xff08;Retrieval-Augmented Generation&#xff09;是实现这一概念最主流、最具体的一种技术框架。 您可…

LeetCode Hot 100:15. 三数之和

题目给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。注意&#xff1a;答案中不可以包含重复的三元组。示例 1&…

银行回单识别应用场景剖析

银行回单OCR识别技术通过自动化处理纸质或电子回单中的关键信息&#xff0c;显著提升了金融、企业及个人场景下的数据管理效率。以下是其核心应用场景及价值的详细剖析&#xff1a;一、企业财务场景自动化账务处理对账与记账&#xff1a;OCR自动提取交易日期、金额、账号等信息…

React的介绍和特点

1. React是什么&#xff1f; 1.1. React&#xff1a; 用于构建用户界面的JavaScript库1.2. React的官网文档&#xff1a;https://zh-hans.reactjs.org/ 2. React的特点2.1. 声明式编程&#xff1a; 目前整个大前端开发的模式&#xff1a;Vue、React、Flutter、SwiftUI只需要维护…

内核smmu学习

思考 smmu对外提供功能&#xff0c;设备驱动调用smmu 提供的api来配置页表&#xff0c;那其他设备是如何和smmu交互的&#xff1f;iommu 作为将不同smmu硬件的一个抽象封装&#xff0c;其它设备应该只能看到iommu这个封装层&#xff0c;那么iommu这个子系统是如何进行抽象的&a…

Android Slices:让应用功能在系统级交互中触手可及

引言 在当今移动应用生态中&#xff0c;用户每天要面对数十个甚至上百个应用的选择&#xff0c;如何让自己的应用在关键时刻触达用户&#xff0c;成为开发者面临的重要挑战。Google在Android 9 Pie中引入的Slices技术&#xff0c;正是为了解决这一痛点而生。本文将全面介绍And…