DSP正弦波实验.doc
文本预览下载声明
正弦波发生器
1.实验原理
产生连续的波形的方法主要有以下两种方法:
1、查表法:把事先将需要输出的数据计算好,存储在DSP中,然后依次输出就可以了。查表法的优点是速度快,可以产生频率较高的波形,而且不占用DSP的计算时间;查表法的缺点是在于需要占用DSP的内部的存储空间,尤其对采样频率比较大的输出波形,这样,需要占用的内部的空间将更大,而DSP内部的存储空间毕竟有所限制。这使得查表法的应用场合十分有限。
2、计算法:采用计算的方法依次计算数据而后输出,然后再计算而后输出。计算法的优缺点正好和查表法相反。即:其优点是不占用DSP的存储空间,其缺点是占用DSP的计算时间,使得执行程序的开销变大。
下面是一个采用C编写的信号产生程序以及所必须的配置文件
#include stdio.h
#include sine.h
#includemath.h
//增益控制变量
int gain = INITIALGAIN;
//声明并初始化一个IO缓冲器
BufferContents currentBuffer;
// 定义一些函数
static void processing(); //处理输入并生成输出
static void dataIO(); // 用探测点使用虚拟函数
int a[360],i;
void main()
{
puts(SineWave example started.\n);
for(i=0;i360;i++)
a[i]=0;
for(i=0;i360;i++)
a[i]=(int)(sin(i*3.14159/180)*32767);
while(TRUE) // 无限循环
{
/*使用探针点连接到一个主机文件读取输入数据。
通过连接一个探测点写输出数据到图形中。*/
dataIO();
/*应用增益到输入,以获得输出*/
processing();
}
}
/*
*功能:用信号处理 转换输入信号产生输出信号
*参数:BufferContents的内容结构包含输入/输出数组的大小BUFSIZE
*返回值:无。
*/
static void processing()
{
int size = BUFFSIZE;
while(size--){
currentBuffer.output[size] = currentBuffer.input[size] * gain;
}
}
/*
*功能: 使用探测点来读输入信号和写处理了的输出信号
*参数:无。
*返回值:无。
*/
static void dataIO()
{
return;
}
配置文件:
MEMORY
{
PAGE 0: EPROG: origin = 0x1400, len = 0x7c00
VECT: origin = 0xff80, len = 0x80
PAGE 1: USERREGS: origin = 0x60, len = 0x1c
BIOSREGS: origin = 0x7c, len = 0x4
IDATA: origin = 0x80, len = 0x1380
EDATA: origin = 0x1400, len = 0x8000
EDATA1: origin = 0x9400, len = 0x4c00
}
SECTIONS
{
.vectors: {} VECT PAGE 0
.sysregs: {} BIOSREGS PAGE 1
.trcinit: {} EPROG PAGE 0
.gblinit: {} EPROG PAGE 0
frt: {} EPROG PAGE 0
.text: {} EPROG PAGE 0
.cinit: {} EPROG PAGE 0
.pinit: {} EPROG PAGE 0
.sysinit: {} EPROG PAGE 0
.bss: {} IDATA PAGE 1
.far: {} IDATA PAG
显示全部