DSP串口数据采集发送及FIR滤波器的DSP实现Word文件下载.docx

上传人:b****2 文档编号:15101672 上传时间:2022-10-27 格式:DOCX 页数:25 大小:139.73KB
下载 相关 举报
DSP串口数据采集发送及FIR滤波器的DSP实现Word文件下载.docx_第1页
第1页 / 共25页
DSP串口数据采集发送及FIR滤波器的DSP实现Word文件下载.docx_第2页
第2页 / 共25页
DSP串口数据采集发送及FIR滤波器的DSP实现Word文件下载.docx_第3页
第3页 / 共25页
DSP串口数据采集发送及FIR滤波器的DSP实现Word文件下载.docx_第4页
第4页 / 共25页
DSP串口数据采集发送及FIR滤波器的DSP实现Word文件下载.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

DSP串口数据采集发送及FIR滤波器的DSP实现Word文件下载.docx

《DSP串口数据采集发送及FIR滤波器的DSP实现Word文件下载.docx》由会员分享,可在线阅读,更多相关《DSP串口数据采集发送及FIR滤波器的DSP实现Word文件下载.docx(25页珍藏版)》请在冰豆网上搜索。

DSP串口数据采集发送及FIR滤波器的DSP实现Word文件下载.docx

有限长单位冲激响应滤波器,是数字信号处理系统中最基本的元件,它可以在保证任意幅频特性的同时具有严格的线性相频特性,同时其单位抽样响应是有限长的,因而滤波器是稳定的系统。

因此,FIR滤波器在通信、图像处理、模式识别等领域都有着广泛的应用。

TMS320C5402(简称C5402)提供了2个支持高速、全双工、带缓冲、多种数据格式等优点的多通道缓冲串行口McBSP。

MCBSP分为数据通路和控制通路。

通信数据通过McBSP的数据发送(DX)引脚发送,通过数据接收(DR)引脚接收。

时钟和帧同步控制信息通过CLKX、CLKR、FSX和FSR给出。

C54xx通过16位宽可访问控制寄存器经外部外设总线与McBSP通信。

CPU或MDA控制器从数据接收寄存器(DRR[1,2])中读取接收待的数据,并把要发送的数据写到数据发送寄存器(DXR[1,2])中;

然后,写到DXR[1,2]中的数据通过发送移位寄存器(XSR[1,2])从DX引脚移出。

类似地,DR引脚上的接收数据被移入到接收移位寄存器(RSR[1,2]),并被复制到接收缓冲接存器(RBR[1,2])中;

然后,(RBR[1,2])被复制到DRR[1,2],则CPU或DMA控制器即可通过(DRR[1,2])获得接收数据。

这样,便可实现同时移动内部和外部帧同步脉冲有效表示传输的开始。

本次课设就是用DSP的多通道缓冲串行口接收数据,在通过FIR滤波后,输出出去。

二、方案设计与论证

C语言编程产生滤波器模拟输入4KHz方波信号;

设计一个FIR滤波器,经FIR滤波后得到4KHz的正弦波信号。

FIR滤波器的DSP编程采用分别采用线性缓冲区法和循环缓冲区法。

由实验箱信号发生器产生4KHz的模拟方波信号,然后进行AD转换,采样频率为32KHz,对采样数字信号进行数字滤波得到4KHz的正弦波信号,存放在内存单元中观察这些数据的波形,并通过串口DAC转换后输出,在示波器上观察输出信号。

三、单元程序设计与参数计算

3.1设计一个FIR低通滤波器,通带边界频率为6500Hz,通带波纹小于1dB;

阻带边界频率为2000Hz,阻带衰减大于40dB;

采样频率为32000Hz。

FIR滤波器的设计可以用MATLAB窗函数法进行,例如选择Hamming窗,其程序为:

b=fir1(16,6500/32000*2);

在DSP汇编语言中,不能直接输入十进制小数,在MATLAB中进行如下转换:

h=round(b*2^15);

则将系数转换为Q15的定点小数形式,为

h=

-748136775-1303-1581251096451333096452510-1581-13037536781-74

3.2用C语言实现C语言编程产生滤波器模拟输入4KHz方波信号或者三角波信号。

程序如下:

方案一:

#include<

stdio.h>

math.h>

stdlib.h>

voidmain()

{

inti;

intvalue=1;

intf[256];

FILE*fp;

if((fp=fopen("

iiirin.inc"

"

wt"

))==NULL)

{

printf("

can'

topenfile!

\n"

);

return;

}

for(i=0;

i<

256;

i++)

{

if(i%8==0)

value*=-1;

f[i]=value;

fprintf(fp,"

.word%1d\n"

(long)(f[i]*32768/2));

fclose(fp);

}

方案二:

inti,k;

intj;

doublef[256];

iirin.inc"

for(j=0;

j<

=15;

j++)

for(i=0;

i<

i++)

{m=0

n=7

k=i+16*j;

if(i%16<

=7)f[k]=m++;

elsef[k]=n--;

fprintf(fp,"

(long)(f[k]*32768/2));

}}

}

方案三:

c语言产生三角波:

inti,k,m,n;

{m=0;

n=7;

(long)(f[k]*32768/10));

该程序将产生名为firin.inc的输入信号数据文件。

在DSP汇编语言程序中通过.copy汇编命令将生成的数据文件firin.inc拷贝到汇编程序中,作为FIR滤波器的输入数据。

3.3应用循环缓冲区法编程实现FIR滤波器

.mmregs

.defstart,_c_int00

INDEX.set-1

KS.set256;

模拟输入数据缓冲区大小

N.set17

COEF_FIR.sect"

COEF_FIR"

;

FIR滤波器系数

.word-74

.word81

.word367

.word75

.word-1303

.word-1581

.word2510

.word9645

.word13330

.data

INPUT.copy"

firin.inc"

;

模拟输入在数据存储区0x2400

OUTPUT.space256*16;

输出数据在数据区0x2500

b.usect"

FIR_COEF"

N

x.usect"

FIR_BFR"

.text

_c_int00

bstart

nop

start:

ssbxFRCT

STM#b,AR5

RPT#N-1;

将FIR系数从程序存储器移动到数据存储器

MVPDCOEF_FIR,*AR5+;

STM#INDEX,AR0

STM#x,AR4

RPTZA,#N-1

STLA,*AR4+;

将数据循环缓冲区清零

STM#(x+N-1),AR4;

数据缓冲区指针指向x[n-(N-1)]

STM#b+N-1,AR5;

FIR系数表指针

FIR_TASK:

STM#INPUT,AR6

STM#OUTPUT,AR7

STM#KS-1,BRC

RPTBDLOOP-1

STM#N,BK;

FIR循环缓冲区大小

LD*AR6+,A;

装载输入数据

FIR_FILTER:

STLA,*AR4+0%

RPTZA,#N-1

MAC*AR4+0%,*AR5+0%,A

STHA,*AR7+

LOOP:

EENDBEEND

.end

-mxunhuan.map

-oxunhuan.out

MEMORY

PAGE0:

ROM1(RIX):

ORIGIN=0080H,LENGTH=100H

PAGE1:

INTRAM1(RW):

ORIGIN=2400H,LENGTH=0200H

INTRAM2(RW):

ORIGIN=2600H,LENGTH=0100H

INTRAM3(RW):

ORIGIN=2700H,LENGTH=0100H

SECTIONS

.text:

{}>

ROM1PAGE0

.data:

INTRAM1PAGE1

FIR_COEF:

INTRAM2PAGE1

FIR_BFR:

INTRAM3PAGE1

}

3.4应用线性缓冲区法编程实现FIR滤波器

.mmregs

.globalstart

.defstart,_c_int00

KS.set256

COFF_FIR.sect"

COFF_FIR"

.wo

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

当前位置:首页 > 外语学习 > 英语学习

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

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