使用FIR滤波器实现音频滤波实验指南.docx
《使用FIR滤波器实现音频滤波实验指南.docx》由会员分享,可在线阅读,更多相关《使用FIR滤波器实现音频滤波实验指南.docx(16页珍藏版)》请在冰豆网上搜索。
使用FIR滤波器实现音频滤波实验指南
DSPBuilder入门与使用FIR滤波器实现音频滤波
--DSPBuilder应用实例
主要内容
1.设计要求
2.AudioADC/DAC配置
3.FIR滤波器的设计
4.QuartusII工程对DSPBuilder模块的调用
一、设计要求
(1)原始音乐(夹带2KHz的啸叫声)由电脑的媒体播放器播放后,经音频线连到CycloneIIEP2C70DSPDevelopmentBoard(以下简称DSP开发板)的LINEIN音频输入口,DSP开发板上音频codec对模拟音频进行采样得到数字化音频;
(2)在DSP开发平台上设计FIR滤波器滤除原始音乐中的单音啸叫得到较理想的音乐,并通过DSP开发板上音频codec进行DAC转换,通过耳机收听音乐效果。
二、AudioADC/DAC配置
主要步骤:
(1)在DE2_default工程上修改
(2)从Bypass模式切换到DAC模式
第一步:
修改I2C_AV_Config.v
在修改工程之前,下载原来的程序,用计算机播放器播放音乐并连到DE2的LINEIN输入端,用耳机可以听到效果。
但是这个声音并没有经过ADC和DAC,因此并需进行修改,否则无法测试滤波器的效果。
修改方法:
A_PATH_CTRL:
LUT_DATA<=16'h08F8;将8改为0
SAMPLE_CTRL:
LUT_DATA<=16'h1002;将2改为0
改完后结果如下图所示:
图1修改I2C_AV_Config.v
此时编译工程,将不能再听到LINEIN输入的音乐,说明修改生效了。
第二步:
Step2:
修改AUDIO_DAC.v
(1)增加两个输入fir_in_data和fir_out_data,前者为fir滤波器的输入数据,也是ADC采样后的数据,后者是fir滤波器滤波后的数据。
具体代码为:
input[DATA_WIDTH-1:
0]fir_out_data;
input[DATA_WIDTH-1:
0]fir_in_data;
图2增加两个输入
(2)fir_in_data为ADC采样后的输出,现将其连入。
图3将FLASH_Out改为fir_in_data
第三步:
Step3:
修改DE2_Default.v
主要内容
(1)将ADC采集的数据进行串并转换得到并行数据
(2)将并行数据送给fir_in_data
(3)ADC采集后的数据是双通道的,只需将左声道或右声道送给fir_in_data
(1)串并转换
将以下代码加入到系统顶层文件DE2_Default.v
//////////////////////////////addedbysunshine(begin)
reg[3:
0]count_ADC_l=0;
reg[3:
0]count_ADC_r=0;
reg[15:
0]fir_in_data_l=0;
reg[15:
0]fir_in_data_r=0;
reg[15:
0]ADC_data_l=0;
reg[15:
0]ADC_data_r=0;
wire[15:
0]fir_out_data;
/////ADCdataserialtopararrel
always@(posedgeAUD_BCLK)
begin
if(AUD_ADCLRCK)
begin
ADC_data_l[~count_ADC_l[3:
0]]<=AUD_ADCDAT;
count_ADC_l<=count_ADC_l+1;
if(count_ADC_l==15)
begin
fir_in_data_r<=ADC_data_r;
count_ADC_r<=0;
end
end
else
begin
ADC_data_r[~count_ADC_r[3:
0]]<=AUD_ADCDAT;
count_ADC_r<=count_ADC_r+1;
if(count_ADC_r==15)
begin
fir_in_data_l<=ADC_data_l;
count_ADC_l<=0;
end
end
end
//////////////////////////////addedbysunshine(end)
图4串并转换
(2)AUDIO_DAC重新连接
⏹AUDIO_DAC增加了两个输入fir_in_data和fir_out_data(已在第二步完成)
⏹将串并转换的数据送给fir_in_data,如下图所示
图5重新对Audio_DAC进行元件例化
至此,我们将ADC和DAC都已连接好。
此时可以听到电脑播放器播放的音乐了。
三、FIR滤波器的设计
(1)启动FDATool(两种方式)
1CommandWindow
在命令窗口输入fdatool:
2通过菜单项打开
具体位置:
Start->Toolboxes->FilterDesign->FilterDesign&analysisTool(fdatool)
3设置滤波参数
①设置参数为:
带阻FIR滤波器,阶数128,汉明窗
采样频率48KHz,fc1=1980Hz,fc2=2020Hz
②点击DesignFilter
此时出现滤波器频响曲线,注意参数的配置一定要符合滤波器性能要求,在要滤除的频率处,衰减至少10db以上,这样效果才够好。
得到滤波器系数
③设计完后导出滤波参数(点击Export)
将滤波器参数导入工作区,名字默认为Num,直接点击Export
(2)将滤波参数保存为文本文件
将系数用记事本保存,这里记为coeff_116.txt
4、FIR模型的建立
(1)完成上述操作,然后打开Simulink,调用FIR的IPCORE
①具体位置:
SimulinkAlteraDSPBuilderMegaCoreFunctionsfir_compiler_v9_0
②双击model中的fir模块进行设置,第一步Step1parameterize。
③Step1EditCoefficientSetImportedCoefficientSet
选择对应的滤波器配置文件(coeff_116.txt)后
ApplyOK
④之后的界面,参数如下:
点击finish
⑤然后点击Step2生成(Generate)
(2)导入音频文件
处理结果导出到workspace,再转存成文件
(3)在工程目录下生成VHDL及QuartusII工程