Columns 19 through 26
0.0256 -0.0177 -0.0119 0.0078 0.0048 -0.0029 -0.0018 0.00144
5.2 汇编源程序
采用循环缓冲区实现FIR滤波器的源程序如下: .title \ .mmregs
.def start .bss yn,1
xn .usect \hn .usect \
indata .usect \outdata .usect \
.data fir_coff:
.word 14*32768/10000,-18*32768/10000 .word -29*32768/10000,48*32768/10000 .word 78*32768/10000,-119*32768/10000 .word -177*32768/10000,256*32768/10000 .word 368*32768/10000,-536*32768/10000 .word -821*32768/10000,1452*32768/10000 .word 4484*32768/10000,4484*32768/10000 .word 1452*32768/10000,-821*32768/10000 .word -536*32768/10000,368*32768/10000 .word 256*32768/10000,-177*32768/10000 .word -119*32768/10000,78*32768/10000 .word 48*32768/10000,-29*32768/10000 .word -18*32768/10000,14*32768/10000
.text start:
ssbx frct ;使用小数运算 stm #hn,ar1 ;系数首地址 rpt #39 ;将系数移入循
mvpd fir_coff,*ar1+ ;环缓冲区 stm #-1,ar0
stm #outdata,ar5 stm #indata,ar4 stm #xn+39,ar2
rpt #39 ;将输入数据移入 mvdd *ar4+,*ar2+0% ;循环缓冲区
10
stm #xn+39,ar2 ;指向第一个输入 stm #hn+39,ar3
stm #40,bk ;缓冲区大小40 stm #1024,brc ;块重复1024次 stm #-1,ar0
rptb loop-1 ;块程序重复大小 rptz a,#39 ;计算一个输出 mac *ar2+0%,*ar3+0%,a
sth a,*(yn) ;保存输出 mvkd *(yn),*ar5+
mvdd *ar4+,*ar2+0% ;读进一个输入 loop: nop
b loop
.end
5.3 汇编源程序的连接命令文件
在TMS320VC5402DSP的硬件系统中,用户可使用的程序存储空间:片内0080H~3FFFH,片外48000H~4FFFFH;用户可使用的数据存储空间:片内0080H~3FFFFH,片外4000H~7FFFH。基于TMS320VC5402的资源配置,FIR滤波器源程序的连接命令文件如下: MEMORY
{ PAGE 0:
PARAM: org=1000h len=1000h PAGE 1:
SPRAM org=2060h len=0020h
DARAM: org=2080h len=9f380h }
SECTIONS {
.text :> PARAM PAGE 0 .data :> PARAM PAGE 0 .bss :> SPRAM PAGE 1
xn : align (64) {} > DARAM PAGE 1 hn : align (64) {} > DARAM PAGE 1 indata :> DARAM PAGE 1
outdata :> DARAM PAGE 1 }
6 .FIR滤波器的检验
6.1 利用matlab导出“indata.dat”文件
在matlab中输入下面的程序便可以导出“indata.dat”文件: f12=1000; %/Hz f13=16000; %/Hz
fs=40000; %/采样 Hz
11
N=1000; %数据个数 T=1/fs; %采样周期 n=0:N;
x12=0.7*sin(2*pi*f12*n*T); x13=0.5*sin(2*pi*f13*n*T); x_base=( x12+x13); %待滤波信号波形 figure(1) plot(x_base) %待滤波信号频谱 figure(2)
yff=abs(fft(x_base)) df=n*(fs/N) plot(df,yff)
xout=x_base/max(x_base);%归一化 xto_ccs=round(32767*xout)
fid=fopen('input.dat','w');%打开文件
fprintf(fid,'1651 1 0 0 0\\n');%输出文件头 fprintf(fid,'%d\\n',xto_ccs);%输出 fclose(fid);
6.2 FIR滤波器检验的验证过程
1)进入CCS,编译原文件,生成*.out文件
2)选择File→Load Program→打开D\\lab\\Debug\\fir.out
3) 选择File→Data→Load,在弹出的对话框中选择本实验文件夹下的
indata.dat 文件并打开,在弹出的对话框中输入起始地址indata和长度1024
4)输入完后点击OK,然后选择Debug →Run
5)选择View→Graph→Time/Frequency,通过设置Graph Property Dialog可以查看输入与输出的时域与频域波形,设置的参数和波形截图如下所示:
滤波前的语音信号的时域Graph Property Dialog设置及时域波形图分别如图6、7所示:
12
图6 滤波前语音信号的时域Graph Property Dialog设置参数图
图7 滤波前语音信号的时域波形图
滤波前的语音信号的频域Graph Property Dialog设置及频域波形图分别如图8、9所示:
13
图8 滤波前语音信号的频域Graph Property Dialog设置参数图
图9 滤波前语音信号的频域波形图
滤波后的语音信号的时域Graph Property Dialog设置及时域波形图分别如图10、11所示:
14