| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> HLS FIR低通滤波器的实现 -> 正文阅读 |
|
[人工智能]HLS FIR低通滤波器的实现 |
低通滤波器的实现: ????????其中 x(n)为输入信号, h(n)为 FIR 滤波系数, y(n)为经过滤波后的输出信号,N为滤波器的抽头系数,N-1表示滤波器阶数。滤波器在FPGA中实现原理如下图,我们可以看出,其主要是由累加法器与乘法器构成。其思路就是将输入依次延迟一拍与其相应的滤波器系数相乘,然后将输出。 ?? ?2:首先低通滤波器的参数我们用软件实现的,我们只需要进行一系列的设置就行了,然后将数据保存。我们滤波器的软件是''Filter Solutions 2011'',该软件的使用特别简单,我们只需要将滤波的参数进行设置,然后将滤波器的抽头系数进行保存,就行了。 3:将其数据导入matlab ,然后保存下来(这样做只是为了方便放入我们的hls的数组中) 4:进入hls进行滤波器的程序设计。在这里我就只是简单记录下其思路,然后具体代码我会贴在后面。滤波器就是一个系统,就是输入一个函数,经过滤波后输出一个函数,所以我们的函数的参数就只有一个输入,一个输出。该函数的思路就是为了为了实现乘法与累加。我们设计的是一个64阶的滤波器,所以会有64个相应的系数,前面的''Filter Solutions 2011''软件保存的系数就是其滤波器的系数。下面是代码,这里的是算法代码,并没有进行约束优化 这是.c代码
?这是其对应的头文件,.h代码
?5:接下来我们用再写一个testbench,进行仿真测试,其实只需要给与对应的激励就可以了,这里我们就直接产生两个正弦信号,然后进行合成,再输入到我们的滤波器函数,最后进行联合仿真,查看波形,看输出的波形是否完整。下面是testbench的程序
程序中我们产生正弦波可以直接用c语言中math.h。正弦信号形式y= sin(2*pi*f*t),采样即y(n)= sin(2*pi*f*t/fs),我这里第一个是用的8点,相当于一个周期内采8个点,而我们的时钟周期用的是100M。所以相当于输出的正弦波频率位100M/8 = 12.5M,而我们用C语言表示就是用模8,8点就可以得出一个完整的正弦波。程序中我们产生1个12.5M,0.78125M两个频率的正弦波,然后相加。可以看出我们的程序中都乘以了一个AM,AM = 100;因为标准正弦波的幅度的-1~1,我们乘以一个系数,进行放大,并进行强制类型转换。 6:最后进行联合仿真,进入modesim查看波形,波形如下: 可以看出滤波效果还是很好的(留下的信号就是原混频信号的包络),剩下了低频型号。高频信号别滤除了。 7:在此基础上又进行高通,带通的测试结果如下 高通 ? 带通:与低通了很相似,效果不是很好。 ? 总结:本次还是学习到了很多的知识,学习到了几种波形的产生,并且进行了相应的滤波,还是比较有成就感,如果上述有问题,欢迎大家指出,如果大家需要这些的程序,或者需要''Filter Solutions 2011''这些都可以进行留言。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 6:27:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |