使用窗函数设计FIR滤波器

2023-10-28

首先,先明白几个概念。通带,阻带,过渡带,通带纹波和阻带纹波分别是什么?看下图,

       范围称为通带,对于允许误差而言,这个范围,称为通带纹波。同样的,对于范围则是阻带,这个范围,称为阻带纹波。中间的黑色部分是过度带。角频率称为通带边缘频率,角频率则被称为阻带起始频率。

       通常的滤波器的设计,都会指明这几个参数,最后设计的滤波器,必须满足这几个参数。当然,这里举得例子是低通滤波器的,高通或者带通,就与之相反了。

2.理想FIR低通滤波器

      首先,先由理想低通滤波器为出发点开始考虑。理想低通滤波器的频响如下所示


       这里的,表示截止频率。

       先由理想的滤波器出发,求其理想滤波器的单位冲击响应。得到了单位冲击响应,也就得到了滤波器的系数。这样,我们就设计出了一个理想的滤波器。这是一个完美的想法,那么开始动手吧,寻找他的单位冲击响应。运用离散时间的傅里叶逆变换,有如下的式子。


       由此,我们得到了一个单位冲击响应的表达式(sinc是辛格函数),到这我们就可以设计出一个理想的滤波器了吗?好吧,让我们再确认一遍。第一,这个式子是离散的。对于单位冲击响应,本来就应该是离散的,没有错,很好,我们距离理想滤波器又近了一步。第二,这个式子所求出的单位冲击响应的个数,很不幸!个数是无限的。到这里,我们基本可以确定了,理想滤波器是实现不了的。

       虽然理想滤波器是实现不了的,但是我们可以退一步,从无限的理想滤波器的单位冲击响应中,在选择一部分冲击响应,构成一个不太理想的,但又达到一定标准的滤波器。我们只能“将就”着使用这个不太理想的滤波器,那么接下来还有一个问题,我们要如何从无限的数列中选择出有限的一部分,从而达到我们的设计要求。

3.窗函数

       首先,我们先考虑最简单的情况。对于理想单位冲击响应而言,其形状大概和一个高斯分布很像(当然,只是很像,n=0时候,单位冲击响应的值最大,由两边慢慢减少。当然,可能也出现负值。)!所以,我们为了能使得滤波器的性能接近理想滤波器,那么,我们选择其最主要的部分,也就是,值较大的部分。其余部分则放弃。根据之前的叙述,我们可以使用如下式子表示。


      这个式子确实可以帮助我们选择一部分有限的数列。而这个式子,被称为矩形窗。可以看出,N越大,性能越街进理想滤波器。这里N称为窗函数的长度。

      这就是我们选定的窗口,然后我们把窗口函数加上,也就是加窗!其实也就一个乘法,如下所示。


  这样,也就完成了一个加窗。

  但是,在实际的实践过程中,很少用矩形窗的。其原因是,矩形窗的阻带衰减不够,仅仅只有21[dB]。于是,各种各样的窗口就被提出了。各有各的特点,在我们所学的初步的设计中,我们就仅仅看阻带衰减就够了。各种窗函数的性能如下。

================================================

      窗函数                       过渡带大小                       阻带衰减                               

================================================

  矩形窗                           1.8π/N                                  21[dB]

  汉宁窗                            6.2π/N                                 44[dB]

  汉明窗                            6.6π/N                                 53[dB]

布莱克曼窗                        11π/N                                 74[dB]


4.用窗函数实现一个FIR滤波器

       以上说了很多有关于窗函数的原理,现在来整理一下设计的步骤。

       1.根据设计的规格,参数要求,我们选择一个适合的窗函数。这里主要我们还是看阻带衰减,阻带衰减要大于给定的值。一般,若没有给定阻带衰减,我们则需要通过通带纹波和阻带纹波去求,如下。


      2.根据要求的通带边缘频率和阻带起始频率,计算过度区的大小,从而计算出窗函数的长度。

      3.最后,根据窗函数和理想滤波器的单位冲击响应,计算出我们所需要的滤波器的单位冲击响应。

      现在,我们来实战一下,假设我们需要设计如下滤波器。

    

       规格中,没有给定阻带衰减,我们只能自己计算。

   

       这里,阻带衰减为40.8[dB],我们选择的窗的阻带衰减不能比这个小,这里其实汉宁窗就可以做到。但我还是选择用汉明窗去做。然后,计算窗长度。


      

        窗长度有了,计算单位冲击响应吧。

  

       这样,我们就得到了一个FIR滤波器。下面是我们计算出来的这个滤波器的单位冲击响应。



    

       5.写在最后的话

       到此,我们“设计”出了一个滤波器,我们也顺利的得出了它的单位脉冲响应。

       但是,滤波器真的可以实现么?真的可以设计出这样一个滤波器么?

       我觉得要拿着这个单位脉冲响应结果,去实际计算一下,才能发现,这样的滤波器是实现不了的!拿教科书上的话来说,这个滤波器是非因果的!


        这个问题的解决方法,和窗函数的FIR设计代码的实现在下一节[数字信号处理]单位冲击响应的频响与FIR的实现代码(C语言)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用窗函数设计FIR滤波器 的相关文章

  • react点击事件控制div盒子的显示隐藏

    index jsx import React Component from react class show extends Component constructor props super props this state cls pa
  • 智慧教室系统--低碳节能管控系统

    随着全球气候变化的日益严重 环保 节能 低碳已经成为各行各业追求的目标 教育行业也不例外 建设低碳 环保的智慧教室已经成为学校和政府的共同关注点 智慧教室系统的解决方案正是基于此 旨在通过AIOT数字化平台 智慧教室和智能管控等技术手段 实

随机推荐

  • list(链表)——STL

    文章目录 list list构造函数 3 list 赋值和交换 list 大小操作 list 插入和删除 list 数据存取 list反转和排序 list 将数据进行链式存储 链表 list 是一种物理存储单元上非连续的存储结构 数据元素的
  • vue 项目动态引入css(sass)文件(判断后加载对应的 sass 文件)

    vue 项目动态引入css文件 preface 问题 解决方案 preface 最新在写后台 管理 应 业务需求 众多菜单业务中 有个菜单需要独立出来给领导使用 改领导有独特喜欢的颜色格调 快速开发 只是做了菜单的权限控制 然后和样式 控制
  • merge sort 一些变种、应用

    1 逆序对数目 分治公式 总的逆序对个数 前半部分逆序对个数 后半部分逆序对个数 merge时候每取一次后半部分的数 累加一次前半部分剩余的数的个数 int countInvertion vector
  • Android系统_SystemUI_android10_添加控制底部导航栏广播

    一 问题背景 在对于我们一些特殊场景 我们可能不想用户能够操作返回 回到主页 因此就需要我们能够灵活控制底部导航栏的状态 二 添加思路 底部导航栏术语叫做NavigationBar 属于SystemUI 跟顶部状态栏StatusBar属于同
  • idea使用debug如何退出循环

    工作中调试难免会遇到循环 特别是循环读取文本内容的时候 10条还可以 万一文本行数有1万多行 难不成还要挨个的进行debug 这里我们可以直接使用idea的debug选项跳出循环 例如下图 如何直接跳出这个while循环 答案是将光标定位到
  • 华清学习阶段总结

    从七月份入学以来 我已经在华清远见学习了3个周左右了 先后遇见了两个讲师 两个讲师以及班主任老师都很负责 不论是在学习上还是在生活上都有他们和同学们相应的及时的帮助与提醒 班上的学习氛围也很好 很多问题在他们的帮助下都能解决 在c基础的上完
  • DEBUG:Ubuntu中无法打开Appimage文件

    DEBUG Ubuntu中无法打开Appimage文件 问题 解决 问题 无法安装此类型的文件 解决 右击文件属性 更改权限
  • 关于Decision in process状态时间变化的解释

    最近自己的文章出现了decision in process时间变化的现象 便上网查了下 觉得以下这个解释是靠谱的 这是编辑部自动发给编辑的提醒邮件引起的状态变化 编辑部一般要求编辑应在decision in process后5个工作日内给作
  • 大语言模型之六- LLM之企业私有化部署架构

    2023年上半年 广泛使用API 如OpenAI 来创建基于大型语言模型 LLM 的基础设施 极大地塑造了软件领域 LangChain 和LlamaIndex在这一趋势中发挥了重要的作用 2023年下半年LLMOps的运维工作流程中微调 或
  • CNStack 虚拟化服务:实现虚拟机和容器资源的共池管理

    背景 容器无疑已经成为新的云计算基础设施 企业私有云平台的建设重心 正在从虚拟化的计算 存储 网络的建设 转向构建以容器 微服务等为核心的云原生平台 不过值得注意的是 企业 IT 系统在进行容器化改造的过程中 由于历史遗留系统 技术债务 内
  • python如何实现excel中vlookup函数的功能

    可以使用 Python 的 pandas 库来实现 Excel 中的 VLOOKUP 函数的功能 首先 需要使用 pandas read excel 函数读取 Excel 文件 然后使用 pandas DataFrame merge 函数将
  • xcode SRCROOT inherited executable_path

    xcode search paths中总是能看到这些宏定义 他们定义了一些常用的路径信息 具体的信息参考官网 https developer apple com library archive documentation Developer
  • LFU算法

    LFU简介 LFU Least Frequently Used 也是一种常见的缓存算法 LFU算法的思想是 如果一个数据在最近一段时间很少被访问到 那么可以认为在将来它被访问的可能性也很小 因此 当空间满时 最小频率访问的数据最先被淘汰 L
  • Flume EmbeddedAgent

    flume flume 二次开发 对EmbeddedAgent的简易改造 动态控制agent 实现启动 关闭等功能 模块结构如下所示 flume parent github地址 1 用途 1 1 本地调试 对flume不是特别熟悉的开发者
  • Ubuntu没网,重启网络服务

    sudo service network manager stop sudo rm var lib NetworkManager NetworkManager state sudo service network manager start
  • ImportError: libcudnn.so.7: cannot open shared object file: No such file or directory解决

    在跑GPU的时候 出现错误 ImportError libcudnn so 7 cannot open shared object file No such file or directory 原因 默认软链的cudnn中没有相应的 lib
  • 接口测试(八)—— 日志收集、全量字段校验、JSON Schema语法

    目录 一 日志收集 1 日志简介 2 日志的级别 3 日志代码实现分析 4 日志使用 二 全量字段校验 1 简介和安装 2 JSON Schema 2 1 入门案例 2 2 校验方式 3 JSON Schema语法 3 1 type关键字
  • 进程绑定中断CPU核和中断号以及设置线程优先级

    绑定进程的CPU核 绑定进程的CPU核 if g processCpuNum CPU ZERO set 清空CPU集合 CPU SET g processCpuNum set 向集合中添加CPU核 这个cpu核指参数输入的整数 比如输入了2
  • vue中的.browserslistrc 文件

    在使用脚手架搭建项目时 会自动生成 browserslistrc文件 该文件只要是 配置兼容浏览器 对于部分配置参数做一些解释 gt 1 代表着全球超过1 人使用的浏览器 last 2 versions 表示所有浏览器兼容到最后两个版本 n
  • 使用窗函数设计FIR滤波器

    首先 先明白几个概念 通带 阻带 过渡带 通带纹波和阻带纹波分别是什么 看下图 范围称为通带 对于允许误差而言 这个范围 称为通带纹波 同样的 对于范围则是阻带 这个范围 称为阻带纹波 中间的黑色部分是过度带 角频率称为通带边缘频率 角频率