浮点实验四

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

7.4.3 实验四——信号自相关的计算
本实验利用ADSP21065L-EZ-KIT评估板的硬件资源,通过板上codec对输入信号进行采样,取出其中一段数据,然后计算其自相关。

计算结果可以通过主机用VisualDSP++的plot功能描绘出来,也可以用示波器实时查看。

1.测试程序简介
本实验使用的程序与实验三类似,所不同的是将FFT运算用相关运算替代。

程序执行的过程为:数据采集(128点)->数据处理->等待->数据采集(128点)->……的for(;;)无限循环。

其主程序如下,其他模块可参考实验三的源程序。

实验四的源程序位于…\DSP_exp\unit_3\accor子目录。

/**************************************************************************** ** $TITLE: ACORR.C$
** ACORR.C
** ---------
** Brings data in from the codec, and runs it through an Acorr algorithm.
** the data can be plotted in real time at the host or be sent to
** oscilloscope through the codec.
**
****************************************************************************/ int data_count;
int out_count;
/* The output data is stored here */
int data[NUM_POINTS];
int mode; // mode 1 = collecting data points. mode 2 = calculating ACORR
/* Use this array for calculating the acorr, then copy result into data[] */
int tempdata[NUM_POINTS];
float result[NUM_POINTS];
/**************************************************************************** **
** Procedure: main()
**
** Arguments: None
**
** Returns: None
**
** Desc: Sets everything up and then goes into its sampling and
** processing loop.
**
****************************************************************************/ void main ( void )
{
int i; /* counter variable */
int cntr; /* counter variable */
float fdata[NUM_POINTS]; /* array to convertg int points to floats */
int *optr;
float *fptr, *xptr, *yptr;
float fmin,fmax,favg,range;
int offset;
float scale_value;
data_count = 0;
out_count = 0;
mode = SAMPLE_MODE; /* Start with the first 128 samples */
init_codec(); /* Set up codec for line in */
for(;;) /* Start the sample/calculate/wait loop */
{
/* Just after accumulating the 128 points, calculate the FFT */
if( mode == CALCULATE_MODE )
{
optr = tempdata;
fptr = fdata;
/* to convertg int points to floats */
for( i=0 ; i<NUM_POINTS ; i++ )
{
*fptr++ = *optr++;
}
/* Acorr*/
/* Stage 1 */
fptr = result+NUM_POINTS/2-1;
for (cntr=0; cntr< NUM_POINTS/2; cntr++)
{
xptr=fdata;
yptr=fdata+cntr;
for( i=NUM_POINTS/2; i>0 ; i-- )
{
*fptr = *fptr + *xptr++ * *yptr++;
}
fptr++;
}
/* Stage 2 */
xptr=result+NUM_POINTS/2-2;
yptr=result+NUM_POINTS/2;
for( i=0 ; i<NUM_POINTS/2-1 ; i++ )
{
*xptr-- = *yptr++;
}
///////scale result///////////
offset = 50;scale_value = 25.0;
fmin = FLT_MAX;fmax = FLT_MIN;
favg = 0;
fptr = &result[0];
for( i=0 ; i<NUM_POINTS ; i++ )
{
fmax = fmax > *fptr ? fmax : *fptr;
fmin = fmin < *fptr ? fmin : *fptr;
favg += *fptr;
fptr++;
}
favg /= (NUM_POINTS - 2);
range = fmax - favg;
/* Copy data into output buffer - dont let host get data
right in the middle */
asm("#include <def21065l.h>");
asm volatile ("BIT CLR IMASK IRQ0I;");
fptr = result;
optr = data;
for( i=0 ; i<NUM_POINTS ; i++ )
{
*optr++ =150*( offset + (int)(scale_value * ( (*fptr++ - favg) / range )) );
}
for (cntr = 0; cntr < NUM_POINTS; cntr++)
{
tempdata[cntr]=0;
result[cntr]=0;
}
asm volatile ("BIT SET IMASK IRQ0I;");
}
/* Waiting.....,since the host can't sample that often anyway */
if (mode >= CALCULATE_MODE)
{
mode++;
if (mode >= BETWEEN_SAMPLES)
{
mode = SAMPLE_MODE;
}
}
user_rx_ready = 1; /* Tell codec isr we're ready for data */
while(user_rx_ready) idle(); /* Wait for codec data */
sample_codec(); /* Get data */
}
}2. 实验步骤
1)连接硬件
关闭PC机的电源,按照硬件连接图正确连接各个硬件设备,检查EZ-KIT板上的跳线位置是否正确,按照硬件连接图检查确保正确连接各个硬件设备。

2)加电和启动程序
检查无误后,分别打开PC机、信号源、评估板和示波器的电源,运行VisualDSP++,新建一个工程,工程名称自定义,正确设置工程的各个选项,将…\DSP_exp\float\unit_3\acorr目录下的源文件(acorr.C、065L_hdr.asm、Buffers.asm和acorr.ldf)加入到工程中。

3)选择或者建立正确的会话类型
按照要求选择或者建立EZ-KIT类型的会话,详细要求请参阅7.4.1节的有关内容。

4)编译链接和观察结果
编译链接该工程,没有错误后运行程序。

必须注意在Settings菜单中有几项必须正确设置,设置和运行EZ_KIT板方法请7.4.1节的有关内容。

正确的设置Settings后,才可以从示波器上看到输出结果。

在程序中恰当位置设置断点(如sample_code函数中的data_count=0程序行),可以
利用VisualDSP++的PLOT功能观察采样数据和相关结果。

5)改变信号类型再观察
调节信号发生器,利用示波器监视其输出幅度为0.5~1Vpp,频率为1~4kHZ。

分别产生正弦波、方波和三角波,观察并记录示波器上的输出结果,或者利用VisualDSP++的Plot功能进行观察和记录。

3.典型输出结果
图7.31方波的自相关波形
4.实验要求
1)利用plot功能,在程序中设置断点,观察各种波形的采样数据、输出数据的的
波形。

2)按照实验步骤完成实验,连续运行程序,观察示波器的波形,说明它们的差别。

3)在实验报告中记录正弦波和三角波的采样数据和自相关结果数据,描绘其波形。

并利用数字信号处理课程所学知识分析结果。

相关文档
最新文档