基于FPGA的音频信号的FIR滤波(Matlab+Modelsim验证)

1 设计内容

本设计是基于FPGA的音频信号FIR低通滤波,根据要求,采用Matlab对WAV音频文件进行读取和添加噪声信号、FFT分析、FIR滤波处理,并分析滤波的效果。通过Matlab的分析验证滤波效果后,将叠加噪声信号的音频信号输出到txt文件里。然后使用Matlab语言编写滤波器模块和测试模块,通过Modelsim软件读取txt文件的数据,将数据送入滤波模块,最后将滤波的结果输出到txt文件里,最后用Matlab将处理的结果从txt文件读出、显示、FFT分析用Verilog设计的FIR滤波器的处理效果。

2 设计原理

2.1 语音信号概述

语言是人类创造的,是人类区别于其他地球生命的本质特征之一。人类用语言交流的过程可以看成是一个复杂的通信过程,为了获取便于分析和处理的语音信源,必须将在空气中传播的声波转变为包含语音信息并且记载着声波物理性质的模拟(或数字)电信号,即语音信号,因此语音信号就成为语音的表现形式或载体。

语音学和数字信号处理的交叉结合便形成了语音信号处理。语音信号处理是建立在语音学和数字信号处理基础之上的,对语音信号模型进行分析、存储、传输、识别和合成等方面的一门综合性学科。

本设计中,从WAV音频文件用Matlab读取音频信号进行分析、处理。

2.2 数字滤波器原理

若滤波器的输入、输出都是离散时间信号,那么该滤波器的单位冲激响应h(n)也必然是离散的,这种滤波器称为数字滤波器(DF)。数字滤波器实质上是一种运算过程——用来描述离散系统输入与输出关系的差分方程的计算或卷积计算。数字滤波器的实质是用一有限精度算法实现的离散时间线性时不变系统,以完成对信号进行滤波处理的过程。它是数字信号处理的一个重要分支,具有稳定性好、精度高、灵活性强、体积小、质量轻等诸多优点。

根据单位冲激响应h(n)的时间特性分类

(1) 无限冲激响应(IIR)数字滤波器

(2) 有限冲激响应(FIR)数字滤波器

本设计中选择FIR低通滤波器对音频信号进行滤波处理。

FIR滤波器响应(简称FIR)系统的单位脉冲响应h(n)为有限长序列,系统函数H(z)在有限z平面上不存在极点,其运算结构中不存在反馈支路,即没有环路。如果h(n)的长度为N,则它的系统函数和差分方程一般具有如下形式:

FIR滤波器的结果主要有:直接型、级联型、线性相位型。

设计中采用线性相位型,FIR滤波器最主要的特性就是它可以具备线性相位的特性。所谓线性相位特性,是指滤波器对不同频率的正弦波所产生的相移和正弦波的频率成直线关系。因此,在滤波器通带内的信号通过滤波器后,除了由相移特性的斜率决定的延时外,可以不失真地保留通带内的全部信号。这一点很重要,在很多的应用场合都有所需求。

当系统的单位抽样响应h(n)满足下列对称条件时,即

偶对称条件:h(n)=h(N-1-n)0<n<N-1

奇对称条件:h(n)=-h(N-1-n)0<n<N-1

系统的相頻特性是线性的。其对称中心为(N-1)/2。采用线性相位型可以比直接型少用(N-1)/2个乘法器。下图为N为偶数和奇数的情形,a图为N=7, b图为N=6。

图 1 N为偶数和奇数的FIR滤波器结构

3. 设计思路

本设计主要分为两个部分,一个是Matlab的设计验证和音频信号提取,另一个为Modelsim平台上基于Verilog的FIR滤波器的设计和testbench的编写。

Matlab的设计验证和音频信号提取:在MATLAB中,[y,fs,bits]=wavread(‘Blip‘,[N1 N2]);用于读取语音,采样值放在向量y中,fs表示采样频率(Hz),bits表示采样位数。[N1 N2]表示读取的值从N1点到N2点的值。采用此函数对WAV音频信号进行读取,然后对该信号进行FFT分析,再在原始的音频信号上叠加一个6K的正弦波信号,并进行FFT分析。

此过程中需要对叠加了噪声信号的音频信号写入TXT文件作为Modelsim平台的信号源,同时将FIR的抽头参数进行提取,用于Verilog编写FIR滤波器。

在Modelsim平台上,采用Verilog编写线性相位型的FIR滤波器,然后编写testbench代码,testbench的主要功能是提供时钟、复位、信号源,同时将FIR模块的处理结果读出并写入到TXT文件中。

最后将Modelsim处理的结果用Matlab进行分析,并与Matlab处理的结果进行对比。

具体流程如下图:

图 2 本设计的流程

4. 设计过程

4.1 Matlab平台

4.1.1 Matlab读取音频文件

在MATLAB中,[y,fs,bits]=wavread(‘Blip‘,[N1 N2]);用于读取语音,采样值放在向量y中,fs表示采样频率(Hz),bits表示采样位数。[N1 N2]表示读取的值从N1点到N2点的值。

采样频率为100K,读取点数为4096个信号。

4.1.2 叠加噪声信号

叠加一个频率为6K,点数为4096,幅值为0.003的正弦波,并对叠加前后的信号进行FFT分析。

由于读取出来的音频信号幅值很小,由于FPGA处理整数比较方便,所以需要将叠加的噪声的音频信号进行放大,然后将负数转为正整数,最后写入到TXT文件中。

写入的TXT文件如下:

图 3 音频信号的TXT文件

同时,为了将此信号源作为FPGA内部的信号源,还需要将信号数据写入到MIF文件中,然后调用一个ROM模块,存放此数据。在Matlab中将语音信号数据写入MIF文件的代码如下:

产生的MIF文件数据如下:

图 4 MIF文件

4.1.3 FIR滤波

本设计中采用的FIR滤波器为8阶,采样频率为100K,截至频率为6K。

在Matlab中采用fir1函数提取抽头系统,然后将抽头系数和带噪声的音频信号进行卷积,然后对FIR处理的结果进行FFT分析。

提取抽头系数,系数如下:

由于提取的系数为浮点数,所以需要对系数进行移位变换,作为整数用于FPGA设计的FIR滤波器中,然后最后再将处理的结果进行反向移位变换,得取正确的结果。

转换后的系数如下:

4.1.4 分析滤波效果

将叠加噪声前后、FIR处理后的信号进行FFT分析,并显示出来进行对比:

4.1

4.2 Modelsim与QuartusII平台

4.2.1 FIR模块的编写

本设计中FIR模块主要分为信号源模块和FIR滤波器模块,信号源模块采用ROM存储带有噪声信号的语音信号,存储的位宽为8bit,深度为4096。由于采用Altera的FPGA中内嵌有一定数量的M4K块,所以可以直接调用这些模块用于存储信号。

ROM模块中MIF文件存储的信号数据如下:

图 5 ROM模块中的数据

采用线性相位型结构的FIR滤波器进行设计,由此可以将乘法器的个数减少一半,本设计中采用4个乘法器,由于FPGA中内嵌了一定数量的硬件乘法器,由此可以直接调用这些乘法器将抽头参数和信号数据进行乘法运算,以减少逻辑单元的调用和减少一定的延迟。

抽头参数分别为19、65、170、256,是通过将Matlab输出的参数左移10位得到的。

滤波器的结构如下:

由于抽头系数左移了10位,所以在得到最终处理结果后,需要将结果右移10位,如下所示:

FIR模块顶层设计如下:

4.2.2 Testbench编写

Testbench的主要的功能是读取TXT文件中的信号数据,作为FIR滤波模块的信号源,同时将为FIR滤波模块提供时钟和复位信号,最后将FIR滤波模块处理后数据写入到TXT文件中。

5 分析验证

5.1 QUARTUS II设计

在设计完成各个模块和顶层封装之后,通过编译综合。

图 6 综合结果

整体设计的RTL视图如下:

图 7 RTL视图

其中,clk信号为100K,同时也是FIR模块的采样信号。

5.2 Modelsim仿真结果分析

Modelsim仿真结果如下,其中data_in为从txt文件读入的叠加了噪声的语音信号,fir_data为经过FIR滤波处理后输出的信号,由于截至频率为6K,从中可以看出,大部分的噪声信号已被滤除,为了更好的分析处理的结果,将FIR处理的结果写入到TXT文件中,然后用Matlab进行FFT分析。

图 8 Modelsim仿真波形

FIR处理输出的结果如下:

图 9 Modelsim仿真结果数据输出

5.3 Matlab设计分析验证

采用Matlab将原始语音信号、叠加噪声的语音信号、FIR滤波后的信号分别显示如下,从下图可以看出,采用8阶的FIR滤波器可以较好的将噪声信号滤除掉。

图 10 时域图对比

为了更好的地分析信号的频谱,原始语音信号、叠加噪声的语音信号、FIR滤波后的信号的頻谱如下,对比可以更加确定地得出,通过FIR滤波,6K以上的信号基本被滤除掉了,由于10K的噪声信号的频率功能相对较大,FIR滤波器的阶数比较少,10K的噪声信号还是未能完全滤除,不过这个可以通过增加阶数将其完全滤除。

图 11 频谱对比

通过Matlab将Modelsim仿真结果的数据读出,并将处理后的语音信号进行显示,并与原始语音信号对比。

图 12 原始语音、Modelsim仿真的语音信号对比

将原始语音信号、采用Matlab进行 FIR滤波后的信号、Modelsim仿真处理后的语音信号进行FFT分析、对比,结果如下:

图 13 叠加噪声的信号与Modelsim仿真后信号频谱对比

图 14 Matlab滤波效果与Modelsim仿真效果对比

通过以上的分析、验证,采用Verilog设计的FIR滤波器能够实现预定的功能,能过将6K以上的噪声信号基本滤除掉,由于10K的噪声信号幅值较大,所以要完全滤波可以通过增加FIR滤波器的阶数。

时间: 2024-10-26 06:11:41

基于FPGA的音频信号的FIR滤波(Matlab+Modelsim验证)的相关文章

基于FPGA的均值滤波算法实现

我们为了实现动态图像的滤波算法,用串口发送图像数据到FPGA开发板,经FPGA进行图像处理算法后,动态显示到VGA显示屏上,前面我们把硬件平台已经搭建完成了,后面我们将利用这个硬件基础平台上来实现基于FPGA的一系列图像处理基础算法. 椒盐噪声(salt & pepper noise)是数字图像的一个常见噪声,所谓椒盐,椒就是黑,盐就是白,椒盐噪声就是在图像上随机出现黑色白色的像素.椒盐噪声是一种因为信号脉冲强度引起的噪声,产生清楚该噪声的算法也比较简单. 均值滤波的方法将数据存储成3x3的矩阵

基于FPGA的均值滤波算法的实现

前面实现了基于FPGA的彩色图像转灰度处理,减小了图像的体积,但是其中还是存在许多噪声,会影响图像的边缘检测,所以这一篇就要消除这些噪声,基于灰度图像进行图像的滤波处理,为图像的边缘检测做好夯实基础. 椒盐噪声(salt & pepper noise)是数字图像的一个常见噪声,所谓椒盐,椒就是黑,盐就是白,椒盐噪声就是在图像上随机出现黑色白色的像素.椒盐噪声是一种因为信号脉冲强度引起的噪声,产生该噪声的算法也比较简单. 均值滤波的方法将数据存储成3x3的矩阵,然后求这个矩阵.在图像上对目标像素给

基于FPGA的Sobel边缘检测的实现

前面我们实现了使用PC端上位机串口发送图像数据到VGA显示,通过MATLAB处理的图像数据直接是灰度图像,后面我们在此基础上修改,从而实现,基于FPGA的动态图片的Sobel边缘检测.中值滤波.Canny算子边缘检测.腐蚀和膨胀等.那么这篇文章我们将来实现基于FPGA的Sobel边缘检测. 图像边缘:简言之,边缘就是图像灰度值突变的地方,亦即图像在该部分的像素值变化速度非常之快,这就好比在坐标轴上一条曲线有刚开始的平滑突然来个大转弯,在变化出的导数非常大. Sobel算子主要用作边缘检测,在技术

基于FPGA的腐蚀膨胀算法实现

本篇文章我要写的是基于的腐蚀膨胀算法实现,腐蚀膨胀是形态学图像处理的基础,,腐蚀在二值图像的基础上做"收缩"或"细化"操作,膨胀在二值图像的基础上做"加长"或"变粗"的操作.那么什么是二值图像呢?把一幅图片看做成一个二维的数组,那么二值图像是一个只有0和1的逻辑数组,我们前面Sobel边缘检测后的图像输出边缘效果,设置个阈值,大于阈值输出为1,小于阈值输出为0,最后输出就是一幅二维图像了. 上一篇我是直接用MATLAB处理后的

基于FPGA的VGA显示静态图片

终于熬到暑假了,记过三四周的突击带考试,终于为我的大二画上了一个完整的句号,接下来终于可以静心去做自己想做的事情了,前一阵子报了一个线上培训班,学学Sobel边缘检测,之前一直在学习图像处理,但是因为一直看人家的代码,到后来难免有点空虚.所以说自己狠下心来,报了一个线上培训班,重新学习一下,自己设计Sobel边缘检测,势要摆脱抄别人代码的魔咒.所以这次图像显示部分和在彩色条纹中显示一副图片的代码,全部是我自己设计的,虽然不是什么大工程,但是还是满满的成就感,这次用的时间比较久,因为使用的是新板子

基于FPGA的RGB图像转灰度图像算法实现

一.前言 最近学习牟新刚编著<基于FPGA的数字图像处理原理及应用>的第六章直方图操作,由于需要将捕获的图像转换为灰度图像,因此在之前代码的基础上加入了RGB图像转灰度图像的算法实现. 2020-02-29 10:38:40 二.RGB图像转灰度图像算法原理 将彩色图像转换为灰度图像的方法有两种,一个是令RGB三个分量的数值相等.输出后便可以得到灰度图像,另一种是转换为YCbCr格式,将Y分量提取出来,YCbCr格式中的Y分量表示的是图 像的亮度和浓度,所以只输出Y分量,得到图像就是灰度图像.

基于FPGA的跨时钟域信号处理——亚稳态(V3-FPGA学院)

(V3-FPGA学院教你学习FPGA) 基于FPGA的跨时钟域信号处理--亚稳态 基于FPGA的跨时钟域信号处理--亚稳态 什么是亚稳态? 所有数字器件(例如FPGA)的信号传输都会有一定的时序要求,从而保证每 个寄存器将捕获的输入信号正确输出.为了确保可靠的操作,输入寄存器的信号必须在时钟沿的某段时间(寄存器的建立时间Tsu)之前保持稳定,并且持续到时钟沿之后的某段时间(寄存器的保持时间Th)之后才能改变.而该寄存器的输入反映到输出则需要经过一定的延时(时钟到输出的时间Tco).如果数据信号的

基于FPGA的线阵CCD图像测量系统研究——笔记

---恢复内容开始--- 本文是对基于FPGA的线阵CCD图像测量系统研究的阅读笔记 读了前面的摘要依然没有看懂作者要做什么.接着往下读.... 终于看到了一个字眼“基于机器视觉的图像测量技术”,看来我可以在这个方面找找文献了. 不同于大多数光电器件以电流或者电压为传感信号,CCD是以电荷为信号把一副空余分布的图像变为一列按时间域离散分布的电荷信号. 非接触式的快速精确测量 ---恢复内容结束---

基于FPGA的飞机的小游戏

基于FPGA的飞机的小游戏 实验原理 ????该实验主要分为4个模块,采用至上而下的设计方法进行设计.由50M的晶振电路提供时钟源,VGA显示控制模块.图形显示控制模块.移动模块的时钟为25M,由时钟分频电路产生获得.时钟分频模块采用PLL进行设计,由50M时钟进行2分频获得25M时钟. ????移动模块,控制我方飞机和敌方飞机.子弹的移动,移动的速度可以通过时钟的频率进行控制,操作我方飞机的移动和子弹的发射由外部按键进行控制,控制的方式有发射子弹.左移.右移. ????图像显示控制模块,用于控