dsp带通滤波器设计Word下载.doc
《dsp带通滤波器设计Word下载.doc》由会员分享,可在线阅读,更多相关《dsp带通滤波器设计Word下载.doc(8页珍藏版)》请在冰点文库上搜索。
![dsp带通滤波器设计Word下载.doc](https://file1.bingdoc.com/fileroot1/2023-5/11/0716d97d-8766-4f68-8465-1e1fb6646a22/0716d97d-8766-4f68-8465-1e1fb6646a221.gif)
(3-1)
常用的方法是用有限长度的窗函数w(n)来截取即:
(3-2)
这里窗函数就是矩形序列RN(n),加窗以后对理想低通滤波器的频率响应将产生什么样的影响呢?
根据在时域是相乘关系,在频域则是卷积关系:
(3-3)
其中,为矩形窗谱,是FIR滤波器频率响应。
通过频域卷积过程看的幅度函数H(ω)的起伏现象,可知,加窗处理后,对理想矩形的频率响应产生以下几点影响:
(1)使理想频率特性不连续点处边沿加宽,形成一个过渡带,其宽度等于窗的频率响应的主瓣宽度。
(2)在截止频率的两边的地方即过渡带的两边,出现最大的肩峰值,肩峰的两侧形成起伏振荡,其振荡幅度取决于旁瓣的相对幅度,而振荡的多少,则取决于旁瓣的多少。
(3)改变N,只能改变窗谱的主瓣宽度,改变ω的坐标比例以及改变的绝对值大小,但不能改变主瓣与旁瓣的相对比例(此比例由窗函数的形状决定)。
(4)对窗函数的要求:
a、窗谱主瓣尽可能窄,以获取较陡的过渡带;
b、尽量减小窗谱的最大旁瓣的相对幅度;
即能量集中于主瓣,使肩峰和波纹减小,增大阻带的衰减。
四、带通滤波器设计指标
本次要设计一个FIR带通滤波器,其采样频率fs=30000Hz,通带为3000Hz~5000Hz,即保留频率在3000Hz~5000Hz范围内的信号成分,幅度失真小于1dB;
阻带边界频率为2000Hz和6000Hz,衰减大于40dB。
同时,FIR滤波器的阶数N=32。
五、设计思路及实现步骤
1.使用matlab获得输入信号数据,这里输入信号为f1=1500,f2=4000,f3=7000,采样频率为fs=30000Hz,采样点数为N=256,同时生成输入信号数据文件,matlab的参考程序如下:
clc;
clearall;
f1=1500;
f2=4000;
f3=7000;
fs=30000;
N=256;
T=1/fs;
n=[0:
N-1];
x1=0.08*sin(2*pi*f1*n*T);
x2=0.08*sin(2*pi*f2*n*T);
x3=0.08*sin(2*pi*f3*n*T);
xn=ceil(32768*(x1+x2+x3));
figure
(1);
plot(xn)
figure
(2)
yff=abs(fft(xn));
df=n*(fs/N);
plot(df,yff);
fid=fopen('
indata.inc'
'
w'
);
fprintf(fid,'
.word%5.0f\n'
xn);
fclose(fid);
部分输入信号数据为(共256个采样点):
.word0
.word6097
.word-431
.word1541
.word-1019
.word1
.word-2493
.word-5507
...
2.基于Matlab工具箱Signal中的fir1函数设计FIR带通滤波器,选择Hamming窗函数法,进而获取FIR带通滤波器的系数b,并保存为firin.inc数据文件。
这里FIR滤波器的阶数N=32。
实现代码如下:
w1=3000/15000*2;
w2=5000/15000*2;
b=fir1(32,[w1,w2],'
bandpass'
fp=fopen('
firin.inc'
wt'
fprintf(fp,'
.word%20.0f\n'
b*32768);
fclose(fp);
滤波器系数为:
B0=-4,B1=-0,B2=7,B3=183,B4=-109,B5=-488,B6=328,B7=495,B8=-195,B9=260,
B10=-1180,B11=-1433,B12=4086,B13=1879,B14=-7292,B15=-876,B16=8709,
B17=-876,B18=-7292,B19=1879,B20=4086,B21=-1433,B22=-1180,B23=260,
B24=-195,B25=495,B26=328,B27=-488,B28=-109,B29=183,B30=7,B31=-0,
B32=-4
同时,通过Matlab中的滤波器设计工具fdatool,可以得到满足设计要求的FIR带通滤波器的幅度图如下示(相应设计参数见下图数据):
3.基于CCS2.0配置为C5400后,创建fir工程,将1、2步骤中生成的输入信号数据文件indata.inc和滤波器系数文件firin.inc添加在fir工程所在的文件夹中,然后给工程中添加FIR数字滤波器的汇编程序fir.asm如下:
.mmregs
.globalstart
.defstart,_c_int00
INDEX.set1
KS.set256
.copy"
indata.inc"
firdata.inc"
.data
OUTPUT.space1024
FIR_DP.usect"
FIR_VARS"
0
D_FIN.usect"
1
D_FOUT.usect"
COFFTAB.usect"
FIR_COFF"
N
DATABUF.usect"
FIR_BFR"
BOS.usect"
STACK"
0fh
TOS.usect"
.text
.asgAR0,INDEX_P
.asgAR4,DATA_P
.asgAR5,COFF_P
.asgAR6,INBUF_P
.asgAR7,OUTBUF_P
_c_int00:
Bstart
NOP
start:
STM#COFFTAB,COFF_P
RPT#N-1
MVPD#COFF_FIR,*COFF_P+
STM#INDEX,INDEX_P
STM#DATABUF,DATA_P
RPTZA,#N-1
STLA,*DATA_P+
STM#(DATABUF+N-1),DATA_P
FIR_TASK:
STM#INPUT,INBUF_P
STM#OUTPUT,OUTBUF_P
STM#KS-1,BRC
RPTBDLOOP-1
STM#N,BK
LD*INBUF_P+,A
FIR_FILTER:
STLA,*DATA_P+%
RPTZA,N-1
MAC*DATA_P+0%,*COFF_P+0%,A
STHA,*OUTBUF_P+
LOOP:
EENDBEEND
.end
4.对应以上FIR滤波器的汇编程序编写链接文件fir.cmd如下:
fir.obj
-mfir.map
-ofir.out
MEMORY
{
PAGE0:
ROM1(RIX):
ORIGIN=0080h,LENGTH=1000h
PAGE1:
INTRAM1(RW):
ORIGIN=2400h,LENGTH=0200h
INTRAM2(RW):
ORIGIN=2600h,LENGTH=0100h
INTRAM3(RW):
ORIGIN=2700h,LENGTH=0100h
INTRAM4(RW):
ORIGIN=2800h,LENGTH=0040h
B2B(RW):
ORIGIN=0070h,LENGTH=10h
}
SECTIONS
.text:
{}>
ROM1PAGE0
.data:
INTRAM1PAGE1
FIR_COFF:
INTRAM2PAGE1
FIR_BFR:
INTRAM3PAGE1
FIR_VARS:
INTRAM4PAGE1
.stack:
B2BPAGE1
六、实验结果及截图
1.将程序编译链接无误后加载程序,然后运行程序,然后在入口地址为0x00a0下查看输入信号波形,输入混频信号的时域和频域波形图如下:
图1三种叠加信号的时域波形
图2三种叠加信号的频域图
2.在入口地址为0x2400下查看输出信号波形,下面为输入混频信号经过设计的FIR器滤波后的时域(图3)和频域(图4)波形的输出图像:
图3经FIR滤波器滤波后的信号时域图
图4经FIR滤波器滤波后的信号频域图
七、总结
通过图2与图4的分析比较,可以很清楚地看出,本次设计的FIR滤波器滤可以较好的滤除噪声信号,保留目标信号。
进而说明了该FIR滤波器满足设计要求。
通过本次带通滤波器的设计,我受益匪浅,通过自己亲自动手操作初步掌握了CCS的运行机制。
最开始我只是照着书上的程序原搬硬套,出现了不少错误,然后静下心仔细研究程序后,终于找出了错误的所在根源,经过反复调试,程序终于运行无误,成功的产生了期待的结果。
虽然我在本科学过DSP,但是在老师这学期的细心、认真、不厌其烦地讲授下,让我对DSP以及汇编程序有了一个新的认识,达到了温故知新的效果,谢谢老师!