【DSP实验】实验 5 数字信号处理算法实验(6 学时)

实验 5 数字信号处理算法实验(6 学时)

一、实验目的

1 .掌握 FIR 滤波的 DSP 实现方法。

2 .掌握 IIR 滤波的 DSP 实现方法。

3 .掌握 FFT 滤波的 DSP 实现方法。

二. 实验设备

PC 机一台,操作系统为 Windows,安装 VisualDSP++5.1.2 软件, ADSP-21489 EZ-Board 一套。

三. 实验内容

1.FIR 滤波器的 DSP 实现

(1)用 MATLAB 设计一个 FIR 滤波器,将滤波器系数导出;

(2)在 ADSP-21489 EZ-Board 上,打开一个声音直通 DSP 工程(点进点出或块进块出都可 以),参照 VisualDSP++50_21k_rtl_man.rev1.4.pdf 文件中的 fir 函数的例程实现对输入 声音信号滤波。(注:采用 Vector-Valued 的_SIMDSHARC_模式)
2. IIR 滤波器的 DSP 实现

(1)用 MATLAB 设计一个 IIR 滤波器,将滤波器系数导出;

(2)在 ADSP-21489 EZ-Board 上,打开一个声音直通 DSP 工程(点进点出或块进块出都可 以),参照 VisualDSP++50_21k_rtl_man.rev1.4.pdf 文件中的 IIR 函数的例程实现对输入 声音信号滤波。(注:采用 Vector-Valued 的_SIMDSHARC_模式)
3.FFT 的 DSP 实现

在 ADSP-21489 EZ-Board 上,打开一个声音直通 DSP 工程(点进点出或块进块出都可以), 参照 VisualDSP++50_21k_rtl_man.rev1.4.pdf 文件中的 cfft 和 ifft 函数的例程实现对输入 声音信号先进行 FFT,然后再做 IFFT,取 IFFT 的实部输出。
4.在 ADSP-21489 EZ-Board 上用重叠相加法实现 FIR 滤波。

五.实验报告要求
1、整理各个实验内容的步骤、实验结果。

2、分析实验现象。

3、实验体会、注意事项。

实验结果:
1.FIR 滤波器的 DSP 实现
(1)用 MATLAB 设计一个 FIR 滤波器,将滤波器系数导出;
我们使用fdatool进行滤波器系数的设计,使用布莱克曼窗进行滤波器设计,滤波器阶数为101阶,采样率fs为48000,截止频率fc为700。fdatool设计图如下:
在这里插入图片描述
并使用以下代码给滤波器系数加逗号,代码如下所示:

1.	for i=1:length(Num2)  
2.	    fprintf(fid,'%.20f,\n',Num2(i));  
3.	end  

生成的fir.dat文件:

1.	0.00568750305027048140,  
2.	0.00774540094529890120,  
3.	0.01337382127122300000,  
4.	0.02249088980140157400,  
5.	0.03450987404398568600,  
6.	0.04839034972138992600,  
7.	0.06275905339139202500,  
8.	0.07608440510070656200,  
9.	0.08687990466444219000,  
10.	0.09390659445716430200,  
11.	0.09634440710545078000,  
12.	0.09390659445716430200,  
13.	0.08687990466444219000,  
14.	0.07608440510070656200,  
15.	0.06275905339139202500,  
16.	0.04839034972138992600,  
17.	0.03450987404398568600,  
18.	0.02249088980140157400,  
19.	0.01337382127122300000,  
20.	0.00774540094529890120,  
21.	0.00568750305027048140,  
                  图5-3 fir.dat文件的数据

(2)在 ADSP-21489 EZ-Board 上,打开一个声音直通 DSP 工程(点进点出或块进块出都可以),参照 VisualDSP++50_21k_rtl_man.rev1.4.pdf 文件中的 fir 函数的例程实现对输入声音信号滤波。(注:采用 Vector-Valued 的_SIMDSHARC_模式)
具体的DSP实现代码如下:
blockProcess_audio.c
①初始化:系数、输入输出数组

1.	#include "ADDS_21489_EzKit.h"  
2.	#include <filter.h>  
3.	#include <stdio.h>  
4.	#define TAPS 21  
5.	#define SAMPLES 256  
6.	//FIR输入输出、系数设置  
7.	float input[SAMPLES];  
8.	float output[SAMPLES];  
9.	float pm coeffs[TAPS]={  
10.	                       #include"fir.dat"  
11.	                       };   
12.	int Firstflag=0;  
13.	float fir_state1[TAPS+1];  
14.	float fir_state2[TAPS+1];  
1.	void process_audioBlocks()  
2.	{  
3.	      
4.	    int i;  
5.	   // FIR  
6.	    if(Firstflag==0)  
7.	    {  
8.	      for (i = 0; i < TAPS+1; i++)  
9.	      {  
10.	        fir_state1[i] = 0;    
11.	        fir_state2[i] = 0;   
12.	      }                 
13.	       Firstflag=1;  
14.	    }  
15.	       
16.	      fir (fBlockA.Rx_R1, fBlockA.Tx_R1, coeffs, fir_state1, SAMPLES, TAPS);  
17.	      fir (fBlockA.Rx_L1, fBlockA.Tx_L1, coeffs, fir_state2, SAMPLES, TAPS);  
18.	}  

通过对同一首歌的前10秒,在实时硬件仿真的情况下,通过对memcopy()和fir()函数的注释切换,通过人耳听音对比直通和FIR滤波后的效果,发现声音有明显的区别,为了进一步正确验证,我们将其都进行了录音。

实验效果:
在这里插入图片描述

完整的实验代码工程、实验报告如下:
https://download.csdn.net/download/weixin_39589455/18655952

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别出BUG求求了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值