当前位置: 首页 > news >正文

积分梳状滤波器CIC原理与实现

       CIC(Cascade Intergrator Comb):级联积分梳状滤波器,是由积分器和梳状滤波器级联而得。滤波器系数为1,无需对系数进行存储,只有加法器、积分器和寄存器,资源消耗少,运算速率高,实现简单,可实现高速滤波,常用在输入采样率最高的第一级。

(1)应用背景

CIC滤波器是一种数字信号处理中常用的滤波器结构,主要用于降低采样率。它在应用中有一些特定的背景和优势:

降低采样率: CIC滤波器的主要应用是在数字信号处理系统中降低采样率。通过级联积分器和组合器,CIC滤波器可以有效地实现高通滤波和降采样,从而减少数据量和系统复杂度。

通信系统: 在通信系统中,CIC滤波器通常用于数字解调器和调制器之间,以及数字前端和后端之间,以满足不同模块之间的采样率不匹配问题。

无线通信: CIC滤波器在无线通信系统中也得到广泛应用,特别是在射频接收端,用于滤除不需要的高频信号,并减小信号带宽,从而降低后续处理的计算复杂度。

医疗信号处理: 在医疗领域,CIC滤波器可用于生物传感器和医学图像处理等应用,有助于降低采样率并提高系统效率。

雷达系统: 在雷达系统中,CIC滤波器可以用于对接收到的雷达信号进行预处理,滤除不需要的频率成分,以便后续目标检测和跟踪。

例如,在数字信号处理硬件设计时,如果后级硬件如FPGA的处理速度无法跟上前级ADC的采样速度,则需要对ADC的采样数据进行降速处理,即对采样数据进行抽取(简单的抽取描述就是对其中连续几个点取一个点进行处理)。抽取操作相当于对时域进行压缩,因此在频域会造成频谱做扩展。此外采样信号都是离散的,因此反映在频谱上会产生折叠,可能导致失真和信息丢失。因此需要在抽取前加一级低通抗混叠滤波器,以防止混叠现象的产生。

     抗混叠滤波器一般为低通滤波器,硬件实现时需占用乘法器和加法器资源。而CIC滤波器提供了一种更简单方便的实现方式。

(2)CIC结构

CIC滤波器由两部分组成:积分器和梳状滤波器。

①积分器

积分器是一种用于对信号进行积分操作的电路或数字滤波器。在时域上,积分器的作用类似于对信号进行累积,它对输入信号的样本进行累积,从而生成输出信号。在离散时间中,积分器可以通过差分方程来表示。离散时间积分器的差分方程通常具有以下形式:

y(n)=y(n-1)+x(n)

其中,y(n)是输出信号,x(n)是输入信号,n是离散时间的样本索引。这表示输出信号是输入信号的当前样本值与前一时刻输出信号值的累积和。对于离散时间,积分器的系统响(传递函数)应为(z变换推导):

H_1(z)=1/(1-z^{-1})

积分器在信号处理中有多种应用,包括:

滤波: 积分器可以用作滤波器,特别是对于低频信号的滤波,因为它对高频信号具有较强的响应。

信号处理: 积分器可用于对信号进行平滑处理,从而去除高频噪声。

控制系统: 在控制系统中,积分器经常用于实现积分控制,帮助系统对持续误差进行调整。

②梳状滤波器

梳状滤波器(Comb Filter)是一种常见的滤波器结构,其主要特征是在频域上呈现周期性的谱线,形状类似梳子,因此得名。梳状滤波器通常用于处理信号中的周期性成分,对特定频率的信号进行增强或抑制。梳状滤波器方程具有以下形式:

y(n)=x(n)-x(n-D)

其中,y(n) 是滤波器的输出,x(n)是输入信号的当前样本,D 是延迟因子,一般等于抽取或内插的倍数。梳状滤波器的系统响应为:

H_2(z)=1-z^{-D}

梳状滤波器在信号处理中有多种应用,包括:

降采样: 梳状滤波器在CIC结构中通常用于降低采样率。通过引入梳状滤波器,CIC滤波器能够实现有效的降采样操作,从而减小信号的数据量,提高系统的效率。

频谱整形: 梳状滤波器的设计使其在频域上呈现出梳状的响应。这种响应有助于调整信号的频谱特性,对特定频率进行增强或抑制,以满足滤波器设计的要求。

抑制高频噪声: 梳状滤波器的特性使其对高频噪声有一定的抑制作用。在CIC滤波器中,这有助于去除在降采样过程中可能引入的高频噪声成分。

差分运算: 梳状滤波器的实现通常涉及对输入信号进行差分运算,这有助于调整频谱,并对特定频率进行处理。

③CIC滤波器

CIC滤波器是将积分器与梳状滤波器进行级联,因此,CIC滤波器的系统响应可以表示为:

H(z)=H_1(z)*H_2(z)=(1-z^{-D})/(1-z^{-1})

将 z 替换为e^{j\omega},得到CIC滤波器的频域响应为:

|H(e^{j\omega)}|=|\frac{sin(\omega D/2)}{sin(\omega /2)}|

D=16的频响如下图所示

从图中可以看出,CIC滤波器的频谱特性像一把逐渐衰减的梳子。当抽取或内插的倍数远大于1时,第一旁瓣电平相对于主瓣电平的差值几乎是固定的13.46dB。这样小的阻带衰减远不能够满足低通滤波器要求。解决这一问题的方法是对滤波器进行级联,每增加一级滤波器,则旁瓣电平衰减增加13,46dB。

|H(e^{j\omega)}|=|\frac{sin(\omega D/2)}{sin(\omega /2)}|^N

采用5级CIC滤波器级联的频响如下所示:

增加滤波器级联数目可以解决旁瓣电平衰减小的问题,但是会带来通带衰减大的问题,并且在实现时会消耗更多的资源。 在CIC滤波器实现的设计过程中,通过对参数D和N的选择来在指定频率范围提供足够的通带特性。

④CIC滤波器补偿

CIC滤波器的优点明显,然而多级CIC的通带比较窄,为了克服这个缺点,一般有两种解决方法,
1)使用CIC进行初步降低,后续在使用半带滤波器或FIR滤波器进行级联使用。
2)利用补偿滤波器对通带内进行补偿,补偿滤波器的设计方法就是设计一个在通带内频率响应为CIC滤波器频率响应倒数的滤波器,将两个滤波器级联后,可以实现通带内频率响应平稳。

(3)升采样与降采样

升采样是在原两个采样点之间插入零(内插),然后进行低通滤波。采样率的增加使信号频谱周期性延拓的周期也增加,因此出现了多余的镜像信号,低通滤波器的作用是滤除镜像信号。下图是二级CIC升采样滤波器。

降采样是先进行低通滤波,然后再进行抽取。抽取后信号频谱的周期延拓的周期将减少,如果过渡抽取将导致无法满足奈奎斯特采样定律,出现频谱混叠,或者干扰进入带内,低通滤波器的加入是为了避免出现频谱混叠及干扰。下图是二级CIC降采样滤波器。

(4)CIC滤波器设计

设计CIC滤波器时需要考虑多个因素,以确保滤波器能够满足特定应用的需求。以下是设计CIC滤波器时的一些重要考虑因素:

降采样因子(Decimation Factor): 降采样因子决定了CIC滤波器用于降低采样率的程度。选择适当的降采样因子需要考虑系统的信号特性和要求。

梳状滤波器的延迟因子: CIC滤波器中的梳状滤波器引入了延迟因子,通常表示为 �M。选择合适的延迟因子影响着滤波器的频率响应和性能。

积分器的阶数: CIC滤波器包括级联的积分器和梳状滤波器。积分器的阶数会影响滤波器的频率响应,更高阶的积分器通常能够提供更陡峭的滤波特性。

过渡带宽度: 过渡带宽度是指在频率响应中从通带到阻带的过渡带的宽度。选择适当的过渡带宽度取决于对滤波器性能的要求,以及过渡带宽度与滤波器阶数的平衡。

折叠频率: CIC滤波器的设计需要考虑折叠频率,以确保在降采样过程中不引入不必要的频谱混叠。

硬件实现的复杂度: CIC滤波器通常在硬件中实现,因此设计时需要考虑硬件的复杂度和资源占用。较低的硬件复杂度有助于在嵌入式系统等资源受限的环境中使用。

幅度平坦度: 幅度平坦度表示在通带内滤波器对不同频率的响应是否保持平坦。在某些应用中,对于不同频率的信号需要保持一致的幅度响应。

实时性能: 如果CIC滤波器用于实时系统,如通信系统,实时性能是关键考虑因素。低群延迟和高处理速度可能是设计时需要优化的指标。

相关文章:

积分梳状滤波器CIC原理与实现

CIC(Cascade Intergrator Comb):级联积分梳状滤波器,是由积分器和梳状滤波器级联而得。滤波器系数为1,无需对系数进行存储,只有加法器、积分器和寄存器,资源消耗少,运算速率高&#…...

【项目管理】CMMI-原因分析与解决过程(CAR)

概述: “原因分析与解决”通过预防缺陷或者问题的引入以及识别并适当纳入优秀过程性能的原因,改进质量与生产率。 目录 1、文档结构 2、原因分析与解决过程域包括如下活动 3、选择需要加以分析的结果(启动条件) 4、过程活动与实践对照表 5、实例 1、…...

【设计模式】文件目录管理是组合模式吗?

组合模式是什么? 组合模式是一种将对象组合成树形结构以表示"部分-整体"的层次结构的设计模式。它使得用户对单个对象和组合对象的使用具有一致性。 组合模式在什么情况下使用? 当你发现你需要在代码中实现树形数据结构,让整体-部…...

利用appium自动控制移动设备并提取数据

安装appium-python-client模块并启动已安装好的环境 安装appium-python-client模块 在window的虚拟环境下执行pip install appium-python-client 启动夜神模拟器,进入夜神模拟器所在的安装路径的bin目录下,进入cmd终端,使用adb命令建立adb…...

day22_236二叉树最近公共祖先_235二叉搜索树(最近公共祖先_701插入一个节点_450删除一个节点)

文章目录 [236 二叉树的最近公共祖先](https://programmercarl.com/0236.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E8%BF%91%E5%85%AC%E5%85%B1%E7%A5%96%E5%85%88.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE)[235 二叉搜索树的最近公共祖先](https://program…...

OpenSource - 工具管理器easy-manager-tool

文章目录 功能说明运行配置环境配置启动docker部署 项目安全UI展示 Easy-Manager-Tool 打造软件行业首款集成工具,不管你是程序员,测试,运维等都可以使用该软件来提升自己的工作效率。 Easy-Manager-Tool 的诞生是为了解决软件行业众多参与者…...

Laravel7 + easyWeChat 实现微信公众号支付功能

注册服务号,需进行微信认证,此时需缴费 300 元/年,必须是认证成功的服务号才能开通微信支付。 注册微信支付商户号 1、登录 https://pay.weixin.qq.com/index.php/core/home/login?return_urlhttps%3A%2F%2Fpay.weixin.qq.com%2Findex.php%…...

Linux环境下,针对QT软件工程搭建C++Test单元测试环境的操作指南

文章目录 前言一、安装QT二、安装CTest三、使用QT生成.bdf文件四、创建CTest工程注意事项 前言 CTest是Parasoft公司出品的一款可以针对C/C源代码进行静态分析、单元测试、集成测试的测试工具。本文主要讲解如何在Linux环境下,搭建QT插件版的CTest测试环境。 一、…...

16k+ start 一个开源的的监控系统部署教程

安装条件 Linux或macOS系统 4GB内存 开放 33014、33174、3183端口 1.安装 1、下载源码 首先使用 git 克隆源码到本地 git clone -b main https://github.com/SigNoz/signoz.git && cd signoz/deploy/ 方式1:运行 install.sh 脚本一键安装 ./install.s…...

Mermaid使用教程(绘制各种图)

Mermaid使用教程(绘制各种图) 文章目录 Mermaid使用教程(绘制各种图)简介饼状图简单的例子应用案例 序列图简单案例应用案例另一个应用案例 甘特图简单案例应用案例一个更为复杂的应用案例 Git图简单案例 总结 简介 本文将主要介…...

OpenAI/ChatGPT Plus 支持的虚拟卡有哪些

最近,有关 OpenAI/ChatGPT Plus 需要信用卡的讨论越来越多。在这篇文章中,我将分享一些我在绑定信用卡过程中得到的经验和教训,以及 OpenAI/ChatGPT Plus 支持的卡类型。 不支持的卡 根据 OpenAI 的地区限制,国内和香港的卡都不…...

ARM多核调度器DSU

1. 背景 从A75开始,ARM提出了一个新的多核心管理系统单元,叫做DSU(DynamIQ Shared Unit)。DSU的核心功能是控制CPU内核,使其成簇Cluster使用,簇内每一个核心可以单独开关、调整频率/电压,能效表现更佳,甚至…...

vue解决部署文件缓存方式

问题:系统上线后,除了bug。紧急修复后,发现安卓正常,ios上海市有问题。通过debug后发现,ios上缓存严重。于是想到了打包文件加时间戳的方式来去除缓存。 vue2 配置打包输出文件名方式: const baseUrl &qu…...

游戏开发中的噪声算法

一、噪声 噪声是游戏编程的常见技术,广泛应用于地形生成,图形学等多方面。 那么为什么要引入噪声这个概念呢?在程序中,我们经常使用直接使用最简单的rand()生成随机值,但它的问题在于生成的随机值太“随机”了&#xf…...

CodeReview 小工具

大家开发中有没有遇到一个版本开发的非常杂,开发很多个项目,改动几周后甚至已经忘了自己改了些什么,领导要对代码review的时候,理不清楚自己改过的代码,只能将主要改动的大功能过一遍。这样就很容易造成review遗漏&…...

UE5 C++ Slate独立程序的打包方法

在源码版安装目录内找到已编译通过的xxx.exe,(\Engine\Binaries\Win64\xxx.exe),在需要的位置新建文件夹,拷贝源码版Engine内的Binaries、Content、Shaders文件夹到目标文件夹内,将xxx.exe放入对应位置,删除…...

探索设计模式的魅力:一篇文章让你彻底搞懂建造者模式

建造者模式(Builder Pattern)是一种创建型设计模式,旨在将一个复杂对象的创建过程与其表示分离,使得同样的构建过程可以创建不同的表示形式。 主要角色: 产品(Product):表示正在构建…...

Facebook广告投放指南,如何运营多个Facebook广告账户不被封?

许多卖家做广告投放会选择 Facebook 作为主要的业务和产品推广平台。然而,要在这个竞争激烈的平台上脱颖而出并成功拓宽广告覆盖面并不容易,通常情况下大家会运营多个Facebook广告账号,但是很多人因此遭遇Facebook账号被封的情况,…...

音乐人声分离工具:极简的人声和背景音乐分离工具

项目地址:jianchang512/vocal-separate: an extremely simple tool for separating vocals and background music, completely localized for web operation, using 2stems/4stems/5stems models 这是一个极简的人声和背景音乐分离工具,本地化网页操作&a…...

Go语言基础快速上手

1、Go语言关键字 2、Go数据类型 3、特殊的操作 3.1、iota关键字 Go中没有明确意思上的enum(枚举)定义,不过可以借用iota标识符实现一组自增常亮值来实现枚举类型。 const (a iota // 0b // 1c 100 // 100d // 100 (与上一…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

Ubuntu系统多网卡多相机IP设置方法

目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机,交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息,系统版本:Ubuntu22.04.5 LTS;内核版本…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...

第八部分:阶段项目 6:构建 React 前端应用

现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...