DSP与matlab联合设计FIR滤波器.docx

上传人:b****5 文档编号:6657594 上传时间:2023-01-08 格式:DOCX 页数:13 大小:201.67KB
下载 相关 举报
DSP与matlab联合设计FIR滤波器.docx_第1页
第1页 / 共13页
DSP与matlab联合设计FIR滤波器.docx_第2页
第2页 / 共13页
DSP与matlab联合设计FIR滤波器.docx_第3页
第3页 / 共13页
DSP与matlab联合设计FIR滤波器.docx_第4页
第4页 / 共13页
DSP与matlab联合设计FIR滤波器.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

DSP与matlab联合设计FIR滤波器.docx

《DSP与matlab联合设计FIR滤波器.docx》由会员分享,可在线阅读,更多相关《DSP与matlab联合设计FIR滤波器.docx(13页珍藏版)》请在冰豆网上搜索。

DSP与matlab联合设计FIR滤波器.docx

DSP与matlab联合设计FIR滤波器

设计FIR滤波器作业报告

学号:

姓名:

设计FIR滤波器作业报告

本设计主要内容是利用MATLAB验证设计思路并用CCS3.3仿真环境设计一个FIR滤波器,要求滤除给定的叠加正弦波的两个较高频分量。

给定波形函数为:

y=sin(2*pi*100*t)+sin(2*pi*250*t)+sin(2*pi*270*t)。

1.设计思路:

输入信号是频率为100Hz、250HZ、270Hz的合成正弦等幅信号,由于给定的谐波分量最高为270Hz,根据奈奎斯特准则,采样频率应大于最高频率分量的2倍,即大于2*270,故可以以600Hz的采样频率进行采样,即fs=600Hz。

设计了一个截止频率为200Hz的低通滤波器,目的是通过所设计的低通bartlett滤波器将信号源中频率为200Hz以上的信号滤掉,留下频率为100Hz的信号,达到滤波的效果。

利用MATLAB设计合适的滤波器实现滤波,然后得到其滤波器系数在CCS的simulator方式下编写滤波程序,调用波形数据,实现滤波,并观看滤波前后的信号波形图、频谱图,观察滤波达到预期效果。

2.设计过程

1)在MATLAB中进行算法验证

MATLAB语言由于具有数值计算功能、符号计算功能、数据可视化功能、建模仿真可视化功能,使得MATLAB在命题构思、模型建立、仿真研究、假想验证、数据源可视化各环节起着强大的作用。

因此在设计中必须先在MATLAB语言中设计一个FIR滤波器。

本设计采用的是bartlett窗函数。

下面是在MATLAB中设计的27阶FIR型bartlett滤波器程序:

clearall;%请寄存器

clf;%清屏

N=256;%清数据点

fs=600;%采样频率

dt=1/fs;%采样时间间隔

fort=1:

N

f1=250;

f2=100;

f3=270;

y(t)=(sin(2*pi*f1*t*dt)+sin(2*pi*f2*t*dt)+sin(2*pi*f3*t*dt));%产生合成信号

x(t)=round(10000*y(t));%为DSP汇编程序做数据转换

end

figure

(1)

plot(y),title('滤波前的波形图像');

fp=200

fst=250

NL=26

f1=200;

w1=2*pi*f1/fs

window=bartlett(NL+1)%窗函数

n=1:

NL+1

hd=sin(w1*(n-NL/2))./(pi*(n-NL/2));

hd(NL/2)=0.67;

h=hd.*rot90(window)

h1=h*32768;

h2=fft(h,N);%将信号做FFT变换

pyy=h2.*conj(h2);%做功率谱分析

f=(0:

(N/2-1));

fori=1:

N/2-1

f(i)=f(i)*fs/N;

end

figure

(2)

plot(f,pyy(1:

N/2)),title('滤波器的频谱图像');

yy1=filter(h,1,y);%滤波

figure(3)

plot(yy1),title('滤波后的波形图像');

y=fft(y,N);

pyy=y.*conj(y);

f=(0:

(N/2-1));

fori=1:

N/2-1

f(i)=f(i)*fs/N;

end

figure(4)

subplot(1,2,1),plot(f,pyy(1:

N/2)),title('滤波前的波形频谱图像');

y=fft(yy1,N);

pyy=y.*conj(y);

f=(0:

(N/2-1));

fori=1:

N/2-1

f(i)=f(i)*fs/N;

end

subplot(1,2,2),plot(f,pyy(1:

N/2)),title('滤波后的波形频谱图像')

其中采样点为256个,采样频率为600Hz,输入信号为100Hz、250Hz、270Hz的合成信号,设定的截止频率为200Hz,通过FIR滤波器后,期望保留的信号是100Hz的信号,200Hz以上的频率基本被滤掉。

图1是滤波前的图形,图2是滤波后的图形,图3为滤波器频谱图像,图4滤波前后的波形频谱图像。

从这四个图中可以看住原始信号中的频率有100Hz、250Hz、270Hz,经过滤波后200Hz以上的信号成分基本上被滤掉。

只留下100Hz的信号。

图1滤波前波形图像

图2滤波后波形图像

图3滤波器的频谱图像

图4.滤波前后的波形频谱图像

2)在CCS环境的仿真

首先配置处理器项,进入CCStudiov3.3中,编写程序,程序如下:

.mmregs

.reffilter_start

.def_c_int00

K_DATA_SIZE.set256

K_BUFFER_SIZE.set32

K_STACK_SIZE.set256

K_B.set27

K_CIR.setK_BUFFER_SIZE

STACK.usect"stack",K_STACK_SIZE

SYSTEM_STACK.setK_STACK_SIZE+STACK

DATA_DP.usect"filter_vars",0

filterdata.usect"filter_vars",K_DATA_SIZE

bufferdatay.usect"filter_vars",K_BUFFER_SIZE*2

bufferdatax.usect"filter_vars",K_BUFFER_SIZE*2

.data

.globalinputdata

inputdata

.WORD16750,-5878,18090,-26831,6340,-9511,11750,11443

.WORD-6910,0,-16750,5878,5570,9511,0,-7810

.WORD-11750,5878,570,17321,-6910,-5878,-5570,-9511

.WORD23660,-9511,18090,-23198,-570,0,570,23198,-18090

.WORD9511,-23660,9511,5570,5878,6910,-17321,-570

.WORD-5878,11750,7810,0,-9511,-5570,-5878,16750

.WORD0,6910,-11443,-11750,9511,-6340,26831,-18090

.WORD5878,-16750,0,16750,-5878,18090,-26831,6340

.WORD-9511,11750,11443,-6910,0,-16750,5878,5570

.WORD9511,0,-7810,-11750,5878,570,17321,-6910

.WORD-5878,-5570,-9511,23660,-9511,18090,-23198,-570

.WORD0,570,23198,-18090,9511,-23660,9511,5570

.WORD5878,6910,-17321,-570,-5878,11750,7810,0

.WORD-9511,-5570,-5878,16750,0,6910,-11443,-11750

.WORD9511,-6340,26831,-18090,5878,-16750,0,16750

.WORD-5878,18090,-26831,6340,-9511,11750,11443,-6910

.WORD0,-16750,5878,5570,9511,0,-7810,-11750

.WORD5878,570,17321,-6910,-5878,-5570,-9511,23660

.WORD-9511,18090,-23198,-570,0,570,23198,-18090

.WORD9511,-23660,9511,5570,5878,6910,-17321,-570

.WORD-5878,11750,7810,0,-9511,-5570,-5878,16750

.WORD0,6910,-11443,-11750,9511,-6340,26831,-18090

.WORD5878,-16750,0,16750,-5878,18090,-26831,6340

.WORD-9511,11750,11443,-6910,0,-16750,5878,5570

.WORD9511,0,-7810,-11750,5878,570,17321,-6910

.WORD-5878,-5570,-9511,23660,-9511,18090,-23198,-570

.WORD0,570,23198,-18090,9511,-23660,9511,5570

.WORD5878,6910,-17321,-570,-5878,11750,7810,0

.WORD-9511,-5570,-5878,16750,0,6910,-11443,-11750

.WORD9511,-6340,26831,-18090,5878,-16750,0,16750

.WORD-5878,18090,-26831,6340,-9511,11750,11443,-6910

.WORD0,-16750,5878,5570,9511,0,-7810

.text

_c_int00:

.asgAR2,ORIGIN

.asgAR3,INPUT

.asgAR4,FILTER

.asgAR5,OUTPUT

START:

SSBXFRCT

SSBXINTM

LD#DATA_DP,DP

STM#STACK,SP

CALLfilter_start

NOP

NOP

NOP

LOOP

BLOOP

.defh0,h1,h2,h3,h4,h5,h6,h7,h8,h9,h10,h11,h12,h13,h14,h15,h16,h17,h18,h19,h20,h21,h22,h23,h24,h25,h26

.deffilter_start

h0.set0000H

h1.set-003FH

h2.set008AH

h3.set0000H

h4.set-015BH

h5.set01F0H

h6.set0000H

h7.set-03CDH

h8.set056EH

h9.set0000H

h10.set-0D92H

h11.set1DDBH

h12.set4F2AH

h13.set2349H

h14.set-1049H

h15.set0000H

h16.set06C9H

h17.set-04E3H

h18.set0000H

h19.set02B7H

h20.set-0209H

h21.set0000H

h22.set0116H

h23.set-00BEH

h24.set0000H

h25.set0035H

h26.set0000H

.text

filter_start:

STM#K_CIR,BK

STM#1,AR0;设置循环缓冲区的大小和步长

STM#inputdata,ORIGIN

STM#bufferdatax,INPUT

;STM#bufferdatay,FILTER

STM#filterdata,OUTPUT

STM#K_DATA_SIZE-1,BRC;设置快循环计数器

RPTBfilter_end-1

MVDD*ORIGIN+,*INPUT

RPT#K_B-1-1

MAR*INPUT-0%

MPY*INPUT+0%,#h26,B

LDB,A

MPY*INPUT+0%,#h25,B

ADDB,A

MPY*INPUT+0%,#h24,B

ADDB,A

MPY*INPUT+0%,#h23,B

ADDB,A

MPY*INPUT+0%,#h22,B

ADDB,A

MPY*INPUT+0%,#h21,B

ADDB,A

MPY*INPUT+0%,#h20,B

ADDB,A

MPY*INPUT+0%,#h19,B

ADDB,A

MPY*INPUT+0%,#h18,B

ADDB,A

MPY*INPUT+0%,#h17,B

ADDB,A

MPY*INPUT+0%,#h16,B

ADDB,A

MPY*INPUT+0%,#h15,B

ADDB,A

MPY*INPUT+0%,#h14,B

ADDB,A

MPY*INPUT+0%,#h13,B

ADDB,A

MPY*INPUT+0%,#h12,B

ADDB,A

MPY*INPUT+0%,#h11,B

ADDB,A

MPY*INPUT+0%,#h10,B

ADDB,A

MPY*INPUT+0%,#h9,B

ADDB,A

MPY*INPUT+0%,#h8,B

ADDB,A

MPY*INPUT+0%,#h7,B

ADDB,A

MPY*INPUT+0%,#h6,B

ADDB,A

MPY*INPUT+0%,#h5,B

ADDB,A

MPY*INPUT+0%,#h4,B

ADDB,A

MPY*INPUT+0%,#h3,B

ADDB,A

MPY*INPUT+0%,#h2,B

ADDB,A

MPY*INPUT+0%,#h1,B

ADDB,A

MPY*INPUT+0%,#h0,B

ADDB,A

;STHA,*FILTER-0%

STHA,*OUTPUT+

;MAR*FILTER-0%

filter_end:

NOP

RET

.end

配置文件:

MEMORY{

PAGE0:

PARAM:

org=3000hlen=4000h

PAGE1:

DARAM:

org=100hlen=4000h

}

SECTIONS{

.text:

>PARAMPAGE0

STACK:

>DARAMPAGE1

filter_vars:

>DARAMPAGE1

.bss:

>DARAMPAGE1

.data:

>DARAMPAGE1

}

仿真结果如下:

图5、6为滤波前的信号时域图和频谱图像,图7、8为滤波后的信号时域图和频谱图像。

图5滤波前的信号时域波形图像

图6滤波前的信号功率谱图

图7滤波后的信号时域波形图像

图8滤波后的信号功率谱图

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1