文档库 最新最全的文档下载
当前位置:文档库 › DSP原理与应用实验报告4

DSP原理与应用实验报告4

DSP原理与应用实验报告4
DSP原理与应用实验报告4

实验报告

课程名称DSP原理与应用

实验项目音频信号的FIR滤波

学院光电信息与通信工程__

专业电子信息工程

班级/学号__电信0904/2009010***

学生姓名_____ _***_______ __

实验日期_ 2011年12月22日_ __ 成绩____________________ __

一、实验要求

1. 熟悉音频编解码芯片TLV320AIC23的控制原理。

2. 熟悉TMS32055x I2C 模块驱动。

3. 熟悉音频信号实时采集、FIR 滤波、实时输出程序设计流程及编程。

4. 利用MATLAB 设计FIR 滤波器。

5. 学习使用TI 的DSPLIB 提高程序运行效率。

6. 学习使用CCS 图形显示窗口观察和分析音频波形及其频谱。

二、实验仪器及工具

计算机,安装Windows XP 操作系统、MA TLAB 7.0.1、TI 的TMS320C5000 DSP 的开发软件 CCS2.21;ICETEK-VC5509教学实验箱,耳机和麦克风(耳麦)。

三、实验内容

1. 利用MA TLAB 设计FIR 滤波器,以Q15格式导出滤波器系数。

2. 创建项目,实现音频信号的实时采集、FIR 滤波、实时输出。音频信号的抽样率为44.1KHz 。

将程序下载到实验板上运行,观察程序运行结果。程序通过调用TI 的DSPLIB 数字信号处理算法库中的fir2函数实现FIR 滤波。调用规则可以参看文档c:\ti\docs\pdf\spru422.pdf 。这是一个可以利用DSP 中有双MAC 硬件的滤波程序,而

开始 初始化:EMIF 、CPU 频率、AIC23

初始化语音缓冲区和工作变量

读取语音数据 保存于左声道缓冲区 调用

AIC23_Mixer 子程序处理音频数据输入/输出

开始

等待McBSP 通道0传送结束

滤波结果保存于右声道缓冲区

原声音送左声道, 滤波结果送右声道, 输出到McBSP0

调用fir2计算FIR 滤波输出

TMS320VC5509DSP片内具有双MAC,可以用此程序完成运算。程序流程图如上图所示。

四、实验步骤

1.编写MA TLAB程序,利用MA TLAB设计FIR低通滤波器,以Q15格式导出滤波器系数。例如设计一个阶数为63,采用汉明窗(Hamming Window)函数,采样频率为44100Hz,截止频率为2205Hz低通FIR线性相位滤波器。可根据信号的频率更改滤波器的频率。

2. 设置CCS为“C55x Cycle Accurate Simulator”软件仿真模式,启动CCS,创建项目,新建项目文件audioFirFiltering.pjt。将所提供的*.c、*.h和audio.cmd拷入到当前目录中,编写TMS3205509 I2C 模块驱动C程序文件i2c.c,以驱动TMS3205509 对音频编解码芯片TLV320AIC23的控制。将MATLAB 设计的滤波器系数导入到audio.h 的滤波器系数数组h中。aic2

3.c中的AIC23_Mixer子程序调用DSPLIB中FIR2 函数实现对采集到的音频信号滤波,并回放到右声道中,左声道直接回放到采集的到音频信号。添加C文件、audio.cmd 及55xdspx.lib到audioFirFiltering.pjt项目中。编译、调试程序,直至没有编译错误。

2. 连接实验设备,准备音频输入、输出设备。

a)将耳麦上麦克风插头插到ICETEK-VC5509-A 板的J5插座。

b)将耳麦上的耳机音频输入插头插到ICETEK-VC5509-A 板的J7插座。

c)调节耳麦上音量旋钮到适中位置。

3.设置CCS 2.21 在硬件仿真(Emulator)方式下运行,启动CCS软件。编译、调试、加载、运行程序。

6. 用麦克风输入语音信号,可以从耳机中听到:左声道存在一些高频噪声,而右声道则较

为干净。

7.在麦克风上吹气,造成“呼呼”声音输入,同时在程序aic23.c的有“break point”注释的语句上加注软件断点(双击此行前的灰色控制条),程序会停止在此行上。

8. 设置断点,观察滤波效果显示:-分3次选择菜单View->Graph->Time/Frequency,分别使

用以下参数打开3 个观察窗口:

观察窗口中各波形的时域波形,再将各观察窗口参数中“Display Type”项分别改成“FFT Magnitude”,观察窗口中各波形的频域波形。

9. 使用计算机提供的声源:

⑴测试计算机语音输出:用“我的电脑”帮助启动播放语音文件LineIn.mp3,并选择播放

器参数为循环播放;将耳机上音频输入插头插入计算机上耳机插座;仔细听耳机中是否有输出。

⑵拔下耳机音频输入插头,用实验箱附带的音频连接线(两端均为双声道音频插头)连接

计算机耳机输出插座和ICETEK-VC5509-A板上J5插座,即上图中“麦克风输入”。

⑶运行程序,听效果。

五、实验代码

aic23.c

#include "5509.h"

#include "util.h"

#include "audio.h"

// AIC23 Control Register addresses

#define AIC23_LT_LINE_CTL 0x00 // 0

#define AIC23_RT_LINE_CTL 0x02 // 1

#define AIC23_LT_HP_CTL 0x04 // 2

#define AIC23_RT_HP_CTL 0x06 // 3

#define AIC23_ANALOG_AUDIO_CTL 0x08 // 4

#define AIC23_DIGITAL_AUDIO_CTL 0x0A // 5

#define AIC23_POWER_DOWN_CTL 0x0C // 6

#define AIC23_DIGITAL_IF_FORMAT 0x0E // 7

#define AIC23_SAMPLE_RATE_CTL 0x10 // 8

#define AIC23_DIG_IF_ACTIV A TE 0x12 // 9

#define AIC23_RESET_REG 0x1E // F - Writing 0 to this reg triggers reset

// AIC23 Control Register settings

#define lt_ch_vol_ctrl 0x0017 /* 0 */

#define rt_ch_vol_ctrl 0x0017 /* 1 */

#define lt_ch_headph_ctrl 0x0079 /* 2 */

#define rt_ch_headph_ctrl 0x0079 /* 3 */

#define alog_au_path_ctrl 0x0000 /* 4 */

#define digi_au_path_ctrl 0x0000 /* 5 */

#define pow_mgt_ctrl_ctrl 0x0002 /* 6 */

#define digi_au_intf_ctrl 0x000D /* 7 */

#define au_FS_TIM_ctrl 0x0000 /* 8 MCLK=12MHz, Sample Rate setting */ #define digi_intf1_ctrl 0x0001 /* 9 */

#define digi_intf2_ctrl 0x00FF /* 10 */

#define DIGIF_FMT_MS 0x40

#define DIGIF_FMT_LRSWAP 0x20

#define DIGIF_FMT_LRP 0x10

#define DIGIF_FMT_IWL 0x0c

#define DIGIF_FMT_FOR 0x03

#define DIGIF_FMT_IWL_16 0x00

#define DIGIF_FMT_IWL_20 0x04

#define DIGIF_FMT_IWL_24 0x08

#define DIGIF_FMT_IWL_32 0xc0

#define DIGIF_FMT_FOR_MSBRIGHT 0x00

#define DIGIF_FMT_FOR_MSLEFT 0x01

#define DIGIF_FMT_FOR_I2S 0x02

#define DIGIF_FMT_FOR_DSP 0x03

#define POWER_DEV 0x80

#define POWER_CLK 0x40

#define POWER_OSC 0x20

#define POWER_OUT 0x10

#define POWER_DAC 0x08

#define POWER_ADC 0x04

#define POWER_MIC 0x02

#define POWER_LINE 0x01

#define SRC_CLKOUT 0x80

#define SRC_CLKIN 0x40

#define SRC_SR 0x3c

#define SRC_BOSR 0x02

#define SRC_MO 0x01

#define SRC_SR_44 0x20

#define SRC_SR_32 0x18

#define SRC_SR_8 0x0c

#define ANAPCTL_STA 0xc0

#define ANAPCTL_STE 0x20

#define ANAPCTL_DAC 0x10

#define ANAPCTL_BYP 0x08

#define ANAPCTL_INSEL 0x04

#define ANAPCTL_MICM 0x02

#define ANAPCTL_MICB 0x01

#define DIGPCTL_DACM 0x08

#define DIGPCTL_DEEMP 0x06

#define DIGPCTL_ADCHP 0x01

#define DIGPCTL_DEEMP_DIS 0x00

#define DIGPCTL_DEEMP_32 0x02

#define DIGPCTL_DEEMP_44 0x04

#define DIGPCRL_DEEMP_48 0x06

#define DIGIFACT_ACT 0x01

#define LT_HP_CTL_LZC 0x80

#define RT_HP_CTL_RZC 0x80

void AIC23_Write(unsigned short regaddr, unsigned short data) {

unsigned char buf[2];

buf[0] = regaddr;

buf[1] = data;

I2C_Write(I2C_AIC23, 2, buf);

}

void McBSP0_InitSlave()

{

PC55XX_MCSP pMCBSP0 = (PC55XX_MCSP)C55XX_MSP0_ADDR;

// Put the MCBSP in reset

Write(pMCBSP0 -> spcr1, 0);

Write(pMCBSP0 -> spcr2, 0);

// Config frame parameters (32 bit, single phase, no delay)

Write(pMCBSP0 -> xcr1, XWDLEN1_32);

Write(pMCBSP0 -> xcr2, XPHASE_SINGLE | XDATDL Y_0);

Write(pMCBSP0 -> rcr1, RWDLEN1_32);

Write(pMCBSP0 -> rcr2, RPHASE_SINGLE | RDA TDL Y_0);

// Disable int frame generation and enable slave w/ext frame signals on FSX

// Frame sync is active high, data clocked on rising edge of clkx

Write(pMCBSP0 -> pcr, PCR_CLKXP);

// Bring transmitter and receiver out of reset

SetMask(pMCBSP0 -> spcr2, SPCR2_XRST);

SetMask(pMCBSP0 -> spcr1, SPCR1_RRST);

}

void AIC23_Init()

{

I2C_Init();

// Reset the AIC23 and turn on all power

AIC23_Write(AIC23_RESET_REG, 0);

AIC23_Write(AIC23_POWER_DOWN_CTL, 0);

AIC23_Write(AIC23_ANALOG_AUDIO_CTL, ANAPCTL_DAC | ANAPCTL_INSEL);

// 使用麦克风音源

AIC23_Write(AIC23_DIGITAL_AUDIO_CTL, 0);

// Turn on volume for line inputs

AIC23_Write(AIC23_LT_LINE_CTL,0x000);

AIC23_Write(AIC23_RT_LINE_CTL,0x000);

// Configure the AIC23 for master mode, 44.1KHz stereo, 16 bit samples

// Use 12MHz USB clock

AIC23_Write(AIC23_DIGITAL_IF_FORMAT, DIGIF_FMT_MS | DIGIF_FMT_IWL_16 | DIGIF_FMT_FOR_DSP);

AIC23_Write(AIC23_SAMPLE_RATE_CTL, SRC_SR_44 | SRC_BOSR | SRC_MO);

// Turn on headphone volume and digital interface

AIC23_Write(AIC23_LT_HP_CTL, 0x07f); // 0x79 for speakers

AIC23_Write(AIC23_RT_HP_CTL, 0x07f);

AIC23_Write(AIC23_DIG_IF_ACTIV ATE, DIGIFACT_ACT);

// Set McBSP0 to be transmit slave

McBSP0_InitSlave();

}

void AIC23_Disable()

{

PC55XX_MCSP pMCBSP0 = (PC55XX_MCSP)C55XX_MSP0_ADDR;

I2C_Disable();

// Put the MCBSP in reset

Write(pMCBSP0 -> spcr1, 0);

Write(pMCBSP0 -> spcr2, 0);

}

#define AUTIODATALEFT 0x0d000

#define AUTIODATARIGHT 0x17000

int *pAudioLeft,*pAudioRight;

int www=0;

void AIC23_Mixer()

{

PC55XX_MCSP pMCBSP0 = (PC55XX_MCSP)C55XX_MSP0_ADDR;

int left, right;

int *pl,*pr,nAudioCount;

int i;

pAudioLeft=pl=(int *)AUTIODATALEFT;

pAudioRight=pr=(int *)AUTIODATARIGHT;

nAudioCount=0;

for ( i=0;i

for ( i=0;i

while(1)

{

while (!ReadMask(pMCBSP0 -> spcr2, SPCR2_XRDY)); // 等待数据传输完成

(*pl)=left = Read(pMCBSP0 -> ddr1); // 读入左声道数据

right = Read(pMCBSP0 -> ddr2); // 读入右声道数据

x[NX-1]=left/16; // 防止滤波时数据溢出

fir2(x, h, r, db, NX, NH); // 调用滤波程序计算当前输出

(*pr)=r[NX-1]; // 数组r的最后一个单元为当前输出

Write(pMCBSP0 -> dxr1, left); // 将原始数据送左声道输出

//Write(pMCBSP0 -> dxr1, r[NX-1]); // 将原始数据送左声道输出

Write(pMCBSP0 -> dxr2, r[NX-1]); // 将经过滤波后的数据送右声道输出

nAudioCount++; pl++; pr++; // 循环使用缓冲区

if ( nAudioCount>=1024 )

{

nAudioCount=0; // break point

pl=pAudioLeft;

pr=pAudioRight;

}

for ( i=0;i

{

x[i]=x[i+1];

}

}

}

audio.c

// 测试时音频插孔J5接音源,J7接扬声器。

#include "5509.h"

#include "util.h"

#include "lcd.h"

#include "ICETEK-VC5509-EDU.h"

void wait( unsigned int cycles );

void EnableAPLL( );

#define CREG (*(unsigned short int *)0x400004)

unsigned int nScreenBuffer[1024];

void main()

{

SDRAM_init();

EnableAPLL();

PLL_Init(144);

AIC23_Init();

InitCTR();

CREG=1;

LCDSetScreenBuffer(nScreenBuffer);

LCDSetDelay(1);

LCDTurnOn(); // 打开显示

LCDCLS(); // 清除显示内存

for(;;)

{

AIC23_Mixer();

}

}

void wait( unsigned int cycles )

{

int i;

for ( i = 0 ; i < cycles ; i++ ){ }

}

void EnableAPLL( )

{

/* Enusre DPLL is running */

*( ioport volatile unsigned short* )0x1f00 = 4;

wait( 25 );

*( ioport volatile unsigned short* )0x1f00 = 0;

// MULITPL Y

*( ioport volatile unsigned short* )0x1f00 = 0x3000;

// COUNT

*( ioport volatile unsigned short* )0x1f00 |= 0x4F8;

wait( 25 );

//*( ioport volatile unsigned short* )0x1f00 |= 0x800

// MODE

*( ioport volatile unsigned short* )0x1f00 |= 2;

wait( 30000 );

// APLL Select

*( ioport volatile unsigned short* )0x1e80 = 1;

// DELAY

wait( 60000 );

}

i2c.c

#include "5509.h"

#include "util.h"

extern DSPCLK dspclk;

I2C_Init()

{

PC55XX_I2C pI2C = (PC55XX_I2C)C55XX_I2C_ADDR;

// Put I2C controller in reset (bad if clock derivatives change out of reset) ClearMask(pI2C -> icmdr, ICMDR_IRS);

// Set prescaler to generate 12MHz clock

pI2C -> icpsc = dspclk.pllmult;

// Setup clock control registers (100KHz clock out)

Write(pI2C -> icclkl, 10); // For 400KHz, use 47 for 100KHz

Write(pI2C -> icclkh, 10);

// Setup master and slave addresses

WriteMask(pI2C -> icoar, ICOAR_OADDR, ICOAR_MASK_7);

// Take I2C controller out of reset, put in master mode

SetMask(pI2C -> icmdr, ICMDR_IRS | ICMDR_MST);

}

I2C_Disable()

{

PC55XX_I2C pI2C = (PC55XX_I2C)C55XX_I2C_ADDR;

// Put I2C controller in reset (bad if clock derivatives change out of reset) ClearMask(pI2C -> icmdr, ICMDR_IRS);

}

void I2C_Write(unsigned short int device, int count, unsigned char *bytedata) {

PC55XX_I2C pI2C = (PC55XX_I2C)C55XX_I2C_ADDR;

int i;

// Set the I2C controller to write a stream of count bytes

Write(pI2C -> iccnt, count);

WriteMask(pI2C -> icsar, device, ICSAR_MASK_7);

WriteMask(pI2C -> icmdr,

ICMDR_STT | ICMDR_STP | ICMDR_TRX,

ICMDR_STT | ICMDR_STP | ICMDR_TRX);

// Transmit data

for (i = 0; i < count ; i++) {

Write(pI2C -> icdxr, bytedata[i]);

while(!(pI2C -> icstr & ICSTR_ICXRDY));

}

}

void I2C_Read(unsigned short int device, int count, unsigned char *bytedata) {

PC55XX_I2C pI2C = (PC55XX_I2C)C55XX_I2C_ADDR;

int i;

// Set the I2C controller to read a stream of count bytes

Write(pI2C -> iccnt, count);

WriteMask(pI2C -> icsar, device, ICSAR_MASK_7);

WriteMask(pI2C -> icmdr,

ICMDR_STT | ICMDR_STP,

ICMDR_STT | ICMDR_STP | ICMDR_TRX);

// Receive the data

for (i = 0; i < count; i++)

{

// Wait for receive data to come back

while(!(pI2C -> icstr & ICSTR_ICRRDY));

// Copy the data out

bytedata[i] = pI2C -> icdrr;

}

}

Sdram.init.c

void SDRAM_init( void )

{

ioport unsigned int *ebsr =(unsigned int *)0x6c00;

ioport unsigned int *egcr =(unsigned int *)0x800;

ioport unsigned int *emirst=(unsigned int *)0x801;

//ioport unsigned int *emibe =(unsigned int *)0x802;

ioport unsigned int *ce01 =(unsigned int *)0x803;

//ioport unsigned int *ce02 =(unsigned int *)0x804;

//ioport unsigned int *ce03 =(unsigned int *)0x805;

ioport unsigned int *ce11 =(unsigned int *)0x806;

//ioport unsigned int *ce12 =(unsigned int *)0x807;

//ioport unsigned int *ce13 =(unsigned int *)0x808;

ioport unsigned int *ce21 =(unsigned int *)0x809;

//ioport unsigned int *ce22 =(unsigned int *)0x80A;

//ioport unsigned int *ce23 =(unsigned int *)0x80B;

ioport unsigned int *ce31 =(unsigned int *)0x80C;

//ioport unsigned int *ce32 =(unsigned int *)0x80D;

//ioport unsigned int *ce33 =(unsigned int *)0x80E;

ioport unsigned int *sdc1 =(unsigned int *)0x80F;

//ioport unsigned int *sdper =(unsigned int *)0x810;

//ioport unsigned int *sdcnt =(unsigned int *)0x811;

ioport unsigned int *init =(unsigned int *)0x812;

ioport unsigned int *sdc2 =(unsigned int *)0x813;

*ebsr = 0x221;//0xa01

*egcr = 0x200;

*egcr = 0X220;

*ce01 = 0X3000;

*ce11 = 0X3fff;

*ce21 = 0x1fff;

*ce31 = 0x1fff;

*emirst = 0;

*sdc1 = 0X5958;

*sdc2 = 0X38F;

*init = 0;

}

util.c

/*

* Copyright (C) 2001, Spectrum Digital, Inc. All Rights Reserved.

*/

#include "5509.h"

#include "util.h"

DSPCLK dspclk;

void PLL_Init(int freq)

{

PC55XX_CMOD pCMOD = (PC55XX_CMOD)C55XX_CLKMD_ADDR;

// Calculate PLL multiplier values (only integral multiples now)

dspclk.clkin = DSP_CLKIN;

dspclk.pllmult = freq / dspclk.clkin;

dspclk.freq = dspclk.pllmult * dspclk.clkin;

dspclk.plldiv = 0;

dspclk.nullloopclk = NULLLOOP_CLK;

// Turn the PLL off

ClearMask(pCMOD -> clkmd, CLKMD_PLLENABLE);

while(ReadMask(pCMOD -> clkmd, CLKMD_LOCK));

// Initialize PLL flags

ClearMask(pCMOD -> clkmd, CLKMD_IAI);

SetMask(pCMOD -> clkmd, CLKMD_IOB | CLKMD_BREAKLN);

// Set the multiplier/divisor

WriteMask(pCMOD -> clkmd,

CLKMD_PLLDIV_1 | CLKMD_BYPASSDIV_1,

CLKMD_PLLDIV_MASK | CLKMD_BYPASSDIV_MASK);

WriteField(pCMOD -> clkmd, dspclk.pllmult, CLKMD_PLLMULT_MASK);

// Enable the PLL and wait for lock

SetMask(pCMOD -> clkmd, CLKMD_PLLENABLE);

while(!ReadMask(pCMOD -> clkmd, CLKMD_LOCK));

}

void INT_Enable(unsigned short mask)

{

*IER0 = *IER0 | mask;

}

void INT_Disable(unsigned short mask)

{

*IER0 = *IER0 & ~mask;

}

void INT_EnableGlobal()

{

asm(" BCLR INTM");

}

void INT_DisableGlobal()

{

asm(" BSET INTM");

void INT_SetVec(unsigned long addr)

{

*IVPD = (unsigned short)(addr >> 8);

*IVPH = *IVPD;

}

void INT_InstallHandler(int vecno, void(*handler)())

{

unsigned long handler_addr, vec_addr;

unsigned short *pdata;

// Calculate address of vector

vec_addr = (unsigned long)*IVPD;

vec_addr = vec_addr << 7;

vec_addr += vecno * 4;

// Insert branch to handler in vector location

handler_addr = (unsigned long)handler;

pdata = (unsigned short *)vec_addr;

*pdata++ = ((handler_addr >> 16) & 0x00ff) | 0xea00;

*pdata++ = handler_addr & 0xffff;

*pdata++ = 0x5e80;

*pdata++ = 0x5f80;

}

void SWDelayUsec(unsigned int usec)

{

unsigned int i, j, loopsperusec;

loopsperusec = dspclk.freq / dspclk.nullloopclk;

for (i=0;i

for (j = 0; j < loopsperusec; j++);

}

void SWDelayMsec(unsigned int msec)

{

unsigned int i;

for (i=0;i

SWDelayUsec(1000);

}

int firstbit(unsigned short mask)

int shiftamt;

unsigned short bit;

// Find offset of first bit in mask

bit = 1;

for (shiftamt = 0; shiftamt < 16; shiftamt++) { if (bit & mask)

break;

bit = bit << 1;

}

return shiftamt;

}

audio.cmd

-w

-stack 1024

-lrts55x.lib

-l lcd.lib

MEMORY

{

RAM: origin = 07000h length = 06000h ROM: origin = 00100h length = 06F00h SND: origin = 0D000h length = 12000h }

SECTIONS

{

.text: > ROM

.data: > RAM

.cinit > ROM

.bss: > RAM

.stack > RAM

.sysstack > RAM

}

实验截图:

实验心得

通过这次实验,我学习了音频编解码芯片TLV320AIC23的控制原理和TMS32055x I2C 模块驱动以及熟悉音频信号实时采集、FIR 滤波、实时输出程序设计流程及编程。再一次熟悉使用CCS图形显示窗口观察音频信号在时域和频域的图像。实在验过程中,我主要遇到了两个比较棘手的问题。一个是运用flashburn进行文件生成,由于ccs界面中没有flashburn一项,所以需要进行下载和安装,主要困难是一开始无法安装,经过多次重复操作和询问同学,我解决了这个问题,解决方法是直接双击flashburn 图标就可以生成烧写文件。另一个问题是连接耳机后没有声音,经过多次反复操作,我也解决了这

个问题,原因是由于ccs意外关闭后再次启动时没有再次设置正确。

DSP实验报告

实验0 实验设备安装才CCS调试环境 实验目的: 按照实验讲义操作步骤,打开CCS软件,熟悉软件工作环境,了解整个工作环境内容,有助于提高以后实验的操作性和正确性。 实验步骤: 以演示实验一为例: 1.使用配送的并口电缆线连接好计算机并口与实验箱并口,打开实验箱电源; 2.启动CCS,点击主菜单“Project->Open”在目录“C5000QuickStart\sinewave\”下打开工程文件sinewave.pjt,然后点击主菜单“Project->Build”编译,然后点击主菜单“File->Load Program”装载debug目录下的程序sinewave.out; 3.打开源文件exer3.asm,在注释行“set breakpoint in CCS !!!”语句的NOP处单击右键弹出菜单,选择“Toggle breakpoint”加入红色的断点,如下图所示; 4.点击主菜单“View->Graph->Time/Frequency…”,屏幕会出现图形窗口设置对话框 5.双击Start Address,将其改为y0;双击Acquisition Buffer Size,将其改为1; DSP Data Type设置成16-bit signed integer,如下图所示; 6.点击主菜单“Windows->Tile Horizontally”,排列好窗口,便于观察 7.点击主菜单“Debug->Animate”或按F12键动画运行程序,即可观察到实验结果: 心得体会: 通过对演示实验的练习,让自己更进一步对CCS软件的运行环境、编译过程、装载过程、属性设置、动画演示、实验结果的观察有一个醒目的了解和熟悉的操作方法。熟悉了DSP实验箱基本模块。让我对DSP课程产生了浓厚的学习兴趣,课程学习和实验操作结合为一体的学习体系,使我更好的领悟到DSP课程的实用性和趣味性。

DSP实验报告

一、综合实验内容和目的 1、实验目的 (1) 通过实验学习掌握TMS320F28335的浮点处理; (2) 学习并掌握A/D模块的使用方法; (3) 学习并掌握中断方式和查询方式的相关知识及其相互之间的转换; (4) 学习信号时域分析的方法,了解相关电量参数的计算方法; (5) 了解数字滤波的一些基本方法。 2、实验内容 要求1:对给定的波形信号,采用TMS320F28335的浮点功能计算该信号的以下时域参数:信号的周期T,信号的均方根大小V rms、平均值V avg、峰-峰值V pp。 其中,均方根V rms的计算公式如下: V= rms 式中N为采样点数,()u i为采样序列中的第i个采样点。 要求2:所设计软件需要计算采样的波形周期个数,并控制采样点数大于1个波形周期,且小于3个波形周期大小。 要求3:对采集的数据需要加一定的数字滤波。 二、硬件电路 相关硬件:TMS320F28335DSP实验箱,仿真器。

硬件结构图 三、程序流程图 1、主程序流程图 程序的主流程图2、子程序流程图

参数计算的流程图 四、实验结果和分析 1、实验过程分析 (1) 使用的函数原型声明 对ADC模件相关参数进行定义:ADC时钟预定标,使外设时钟HSPCLK 为25MHz,ADC模块时钟为12.5MHz,采样保持周期为16个ADC时钟。 (2) 定义全局变量 根据程序需要,定义相关变量。主要有:ConversionCount、Voltage[1024]、Voltage1[1024]、Voltage2[1024]、filter_buf[N]、filter_i、Max、Min、T、temp、temp1、temp2、temp3、Num、V、Vav、Vpp、Vrm、fre。这些变量的声明请见报告后所附的源程序。 (3) 编写主函数 完成系统寄存器及GPIO初始化;清除所有中断,初始化PIE向量表,将程

北邮dsp软件实验报告

Matlab仿真实验 实验报告 学院:电子工程学院 专业:电子信息科学与技术 班级: 学号: 姓名:

时间:2015年12月23日 实验一:数字信号的FFT分析 1.实验目的 通过本次试验,应该掌握: (a)用傅里叶变换进行信号分析时基本参数的选择 (b)经过离散时间傅里叶变换和有限长度离散傅里叶变换后信号频谱上的区别,前者DTFT时间域是离散信号,频率域还是连续的,而DFT在两个域中都是离散的。(c)离散傅里叶变化的基本原理、特性,以及经典的快速算法(基2时间抽选法),体会快速算法的效率。 (d)获得一个高密度频谱和高分辨率频谱的概念和方法,建立频率分辨率和时间分辨率的概念,为将来进一步进行时频分析(例如小波)的学习和研究打下基础。(e)建立DFT从整体上可看成是由窄带相邻滤波器组成的滤波器组的概念,此概念的一个典型应用时数字音频压缩中的分析滤波器,例如DVD AC3和MPEG Audio。 2.实验容、要求及结果。 (1)离散信号的频谱分析: 设信号x(n)=0.001*cos(0.45n)+sin(0.3n)-cos(0.302n-) 此信号的0.3谱线相距很近,谱线0.45的幅度很小,请选择合适的序列长度N和窗函数,用DFT分析其频谱,要求得到清楚的三根谱线。 【实验代码】:

k=2000; n=[1:1:k]; x=0.001*cos(0.45*n*pi)+sin(0.3*n*pi)-cos(0.302*n*pi-pi/4); subplot(2,1,1); stem(n,x,'.'); title(‘时域序列'); xlabel('n'); ylabel('x(n)'); xk=fft(x,k); w=2*pi/k*[0:1:k-1]; subplot(2,1,2); stem(w/pi,abs(xk)); axis([0 0.5 0 2]); title('1000点DFT'); xlabel('数字频率'); ylabel('|xk(k)|'); 【实验结果图】:

DSP实验报告

DSP实验报告 软件实验 1无限冲激响应滤波器(IIR) 算法 一.实验目的 1 .掌握设计IIR 数字滤波器的原理和方法。 2 .熟悉IIR 数字滤波器特性。 3 .了解IIR 数字滤波器的设计方法。 二.实验设备 PC 兼容机一台,操作系统为Windows2000( 或Windows98 ,WindowsXP ,以下默认为Windows2000) ,安装Code Composer Studio 2.21 软件。 三.实验原理 1 .无限冲激响应数字滤波器的基础理论。 2 .模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、椭圆滤波器、贝塞尔滤波器)。 3 .数字滤波器系数的确定方法。 4 .根据要求设计低通IIR 滤波器: 要求:低通巴特沃斯滤波器在其通带边缘1kHz 处的增益为-3dB ,12kHz 处的阻带衰减为30dB ,采样频率25kHz 。设计: - 确定待求通带边缘频率fp1Hz 、待求阻带边缘频率fs1Hz 和待求阻带衰减-20log δsdB 。 模拟边缘频率为:fp1=1000Hz ,fs1=12000Hz 阻带边缘衰减为:-20log δs=30dB - 用Ω= 2πf/fs 把由Hz 表示的待求边缘频率转换成弧度表示的数字频率,得到Ωp1 和Ωs1 。 Ωp1=2 πfp1/fs=2 π1000/25000=0.08 π弧度 Ωs1=2 πfs1/fs=2 π12000/25000=0.96 π弧度 - 计算预扭曲模拟频率以避免双线性变换带来的失真。 由w=2fs tan( Ω/2) 求得wp1 和ws1 ,单位为弧度/ 秒。 wp1=2fs tan( Ωp1/2)=6316.5 弧度/ 秒 ws1=2fs tan( Ωs1/2)=794727.2 弧度/ 秒 - 由已给定的阻带衰减-20log δs 确定阻带边缘增益δs 。

DSP实验报告-深圳大学-自动化

深圳大学实验报告课程名称:DSP系统设计 实验项目名称:DSP系统设计实验 学院:机电与控制工程学院 专业:自动化 指导教师:杜建铭 报告人1:. 学号:。班级:3 报告人2:. 学号:。班级:3 报告人3:. 学号:。班级:3 实验时间: 实验报告提交时间: 教务处制

实验一、CCS入门试验 一、实验目的 1. 熟悉CCS集成开发环境,掌握工程的生成方法; 2. 熟悉SEED-DEC2812实验环境; 3. 掌握CCS集成开发环境的调试方法。 二、实验仪器 1.TMS320系列SEED-DTK教学试验箱24套 2. 台式PC机24台 三、实验内容 1.仿真器驱动的安装和配置 2. DSP 源文件的建立; 3. DSP程序工程文件的建立; 4. 学习使用CCS集成开发工具的调试工具。 四、实验准备: 1.将DSP仿真器与计算机连接好; 2.将DSP仿真器的JTAG插头与SEED-DEC2812单元的J1相连接; 3.启动计算机,当计算机启动后,打开SEED-DTK2812的电 源。SEED-DTK_MBoard单元的+5V,+3.3V,+15V,-15V的电源指示灯及SEED-DEC2812的电源指示灯D2是否均亮;若有不亮,请断开电源,检查电源。 五、实验步骤 (一)创建源文件 1.进入CCS环境。

2.打开CCS选择File →New →Source File命令 3.编写源代码并保存 4.保存源程序名为math.c,选择File →Save 5.创建其他源程序(如.cmd)可重复上述步骤。 (二)创建工程文件 1.打开CCS,点击Project-->New,创建一个新工程,其中工程名及路径可任意指定弹 出对话框: 2.在Project中填入工程名,Location中输入工程路径;其余按照默认选项,点击完成 即可完成工程创建; 3.点击Project选择add files to project,添加工程所需文件;

DSP运行实验报告

DSP运行实验报告 一、实验目的 熟悉CCS软件仿真下,DSP程序的下载和运行;熟悉借助单片机的DSP程序下载和运行; 熟悉借助仿真器的DSP程序下载和运行;熟悉与DSP程序下载运行相关的CCS编程环境。 二、实验原理 CCS软件仿真下,借用计算机的资源仿真DSP的内部结构,可以模拟DSP程序的下载和运行。 如果要让程序在实验板的DSP中运行、调试和仿真,可以用仿真器进行DSP程序下载和运行。初学者也可以不用仿真器来使用这款实验板,只是不能进行程序调试和仿真。 在本实验板的作用中,单片机既是串口下载程序的载体,又是充当DSP 的片外存储器(相对于FLASH),用于固化程序。 三、实验设备、仪器及材料 安装有WINDOWS XP操作系统和CCS3.3的计算机。 四、实验步骤(按照实际操作过程) 1、CCS软件仿真下,DSP程序的下载和运行。 第一步:安装CCS,如果不使用仿真器,CCS 的运行环境要设置成一个模拟仿真器(软仿真)。

第二步:运行CCS,进入CCS 开发环境。 第三步:打开一个工程。 将实验目录下的EXP01目录拷到D:\shiyan下(目录路径不能有中文),用[Project]\[Open]菜单打开工程,在“Project Open”对话框中选 EXP01\CPUtimer\CpuTimer.pjt,选“打开”, 第四步:编译工程。 在[Project]菜单中选“Rebuild All”,生成CpuTimer.out文件。 第五步:装载程序。 用[File]\[Load Program]菜单装载第四步生成CpuTimer.out文件,在当前工程目录中的Debug 文件夹中找到CpuTimer.out文件,选中,鼠标左键单击“打开”。

dsp实验报告

DSP 实验课大作业实验报告 题目:在DSP 上实现线性调频信号的脉冲压缩,动目标显示和动目标检测 (一)实验目的: (1)了解线性调频信号的脉冲压缩、动目标显示和动目标检测的原理,及其DSP 实现的整个流程; (2)掌握C 语言与汇编语言混合编程的基本方法。 (3)使用MATLAB 进行性能仿真,并将DSP 的处理结果与MATLAB 的仿真结果进行比较。 (二)实验内容: 1. MATLAB 仿真 设定信号带宽为B= 62*10,脉宽-6=42.0*10τ,采样频率为62*10Fs =,脉冲重复周期为-4T=2.4*10,用MATLAB 产生16个脉冲的线性调频信号,每个脉冲包含三个目标,速度和距离如下表: 对回波信号进行脉冲压缩,MTI ,MTD 。并且将回波数据和频域脉压系数保存供DSP 使用。 2.DSP 实现 在Visual Dsp 中,经MATLAB 保存的回波数据和脉压系数进行脉压,MTI 和MTD 。 (三)实验原理 1.脉冲压缩原理 在雷达系统中,人们一直希望提高雷达的距离分辨力,而距离分辨力定义为:22c c R B τ?==。其中,τ表示脉冲时宽,B 表示脉冲带宽。从上式中我们可以看

出高的雷达分辨率要求时宽τ小,而要求带宽B大。但是时宽τ越小雷达的平均发射功率就会很小,这样就大大降低了雷达的作用距离。因此雷达作用距离和雷达分辨力这两个重要的指标变得矛盾起来。然而通过脉冲压缩技术就可以解决这个矛盾。脉冲压缩技术能够保持雷达拥有较高平均发射功率的同时获得良好的距离分辨力。 在本实验中,雷达发射波形采用线性调频脉冲信号(LFM),其中频率与时延成正比关系,因此我们就可以将信号通过一个滤波器,该滤波器满足频率与时延成反比关系。那么输入信号的低频分量就会得到一个较大的时延,而输入信号的高频分量就会得到一个较小的时延,中频分量就会按比例获得相应的时延,信号就被压缩成脉冲宽度为1/B的窄脉冲。 从以上原理我们可以看出,通过使用一个与输入信号时延频率特性规律相反的滤波器我们可以实现脉冲压缩,即该滤波器的相频特性与发射信号时共轭匹配的。所以说脉冲压缩滤波器就是一个匹配滤波器。从而我们可以在时域和频域两个方向进行脉冲压缩。 滤波器的输出() h n= y n为输入信号() x n与匹配滤波器的系统函数() *(1) y n x n s N n =--。转换到频域就是--卷积的结果:* ()()*(1) s N n =。因此我们可以将输入信号和系统函数分别转化到频域:Y k X k H k ()()( Y k,然后将结果再转化到时域, h n H k →,进行频域相乘得() ()() x t X k →,()() 就可以得到滤波器输出:()() →。我们可用FFT和IFFT来实现作用域的 Y k y n 转换。原理图如下: 图1.脉冲压缩原理框图 2.MTI原理 动目标显示(MTI)技术是用来抑制各种杂波,来实现检测或者显示运动目标的技术。利用它可以抑制固定目标的信号,显示运动目标的信号。以线性调频

dsp实验报告4

实验2.4 外中断 一.实验目的 1.通过实验熟悉VC5509A的中断响应过程。 2.学会C语言中断程序设计,以及运用中断程序控制程序流程。 二.实验设备 计算机,ICETEK-VC5509-A实验箱及电源。 三.实验原理 1.中断及中断处理过程: ⑴中断简介:中断是一种由硬件或软件驱动的信号,DSP在接到此信号时,将当前程序悬挂起来,转去执行另外一个任务,这个任务我们称为中断服务程序(ISR)。TMS320C55x DSP 可支持32个ISR,可由硬件或软件触发。 ⑵DSP处理中断的步骤: ①接收中断请求:由软件或硬件发出。 ②响应中断请求:对于可屏蔽中断,需要满足若干条件,才发生响应;而对于不可屏蔽中断,则立即响应。 ③准备执行中断服务程序。 - 完成当前正在执行的指令;将进入流水线但还未解码的指令清除。 - 自动保存若干寄存器的值到数据堆栈和系统堆栈。 - 取得用户定义的中断向量表中当前中断向量,中断向量指向中断服务程序入口。 ④执行中断服务程序。中断服务程序包含中断返回指令,这样返回时可以出栈以前保存的关键寄存器数据,从而恢复中断服务程序执行前的现场。 ⑶中断向量表: 中断向量表的构成请参见TI的文档sprs295d.pdf之3.11节。 中断向量表的地址可以由用户指定。 ⑷外中断: TMS320C5509可以响应INT0-INT4五个外中断。 2.ICETEK-CTR板的键盘接口: 显示/控制模块ICETEK-CTR通过接口P8连接小键盘,接收小键盘传送的扫描码,并在每个扫描码结束后保存,同时向DSP的INT2发送中断信号;当DSP读键盘时将扫描码送到数据总线上。小键盘上每次按下一个键将产生2个扫描码,2次中断。 3.程序编制 由一个不含中断处理程序的工程通过改写加入中断处理程序部分大致需要如下操作(假设使用INT2): ⑴编制中断服务程序:参见实验程序,编写单独的一个函数XINT,此函数使用interrupt 修饰,没有参数和返回值。 ⑵构造中断向量表:可以用汇编语言构造,编写一个汇编语言模块程序vector.asm。 ⑶修改链接命令文件:在MEMORY小节中开辟单独的地址段用以存放中断向量表;在SECTIONS小节中指定.vectors段到前步开设的内存段中。 ⑷主程序中进行初始化设置:定位中断向量表、使能中断、清中断等。 4.实验程序流程图:

DSP实验报告

DSP实验报告

软件实验 1无限冲激响应滤波器(IIR) 算法 一.实验目的 1 .掌握设计IIR 数字滤波器的原理和方法。 2 .熟悉IIR 数字滤波器特性。 3 .了解IIR 数字滤波器的设计方法。 二.实验设备 PC 兼容机一台,操作系统为Windows2000( 或Windows98 ,WindowsXP ,以下默认为Windows2000) ,安装Code Composer Studio 2.21 软件。 三.实验原理 1 .无限冲激响应数字滤波器的基础理论。 2 .模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、椭圆滤波器、贝塞尔滤波器)。 3 .数字滤波器系数的确定方法。 4 .根据要求设计低通IIR 滤波器: 要求:低通巴特沃斯滤波器在其通带边缘1kHz 处的增益为-3dB ,12kHz 处的阻带衰减为30dB ,采样频率25kHz 。设计: - 确定待求通带边缘频率fp1Hz 、待求阻带边缘频率fs1Hz 和待求阻带衰减-20log δsdB 。 模拟边缘频率为:fp1=1000Hz ,fs1=12000Hz 阻带边缘衰减为:-20log δs=30dB - 用Ω= 2πf/fs 把由Hz 表示的待求边缘频率转换成弧度表示的数字频率,得到Ωp1 和Ωs1 。 Ωp1=2 πfp1/fs=2 π1000/25000=0.08 π弧度 Ωs1=2 πfs1/fs=2 π12000/25000=0.96 π弧度 - 计算预扭曲模拟频率以避免双线性变换带来的失真。 由w=2fs tan( Ω/2) 求得wp1 和ws1 ,单位为弧度/ 秒。 wp1=2fs tan( Ωp1/2)=6316.5 弧度/ 秒 ws1=2fs tan( Ωs1/2)=794727.2 弧度/ 秒 - 由已给定的阻带衰减-20log δs 确定阻带边缘增益δs 。 因为-20log δs=30 ,所以log δs=-30/20 ,δs=0.03162

DSP实验报告二CCS的使用

实验二 CCS使用操作:报告: 1.实验目的 (1) 熟悉CCS集成开发环境,掌握工程的生成方法。 (2) 掌握CCS集成开发环境的调试方法。 2.实验容及步骤 (1)查阅CCS发展历史,给出CCS发展的版本和适用的芯片。 Code Composer Studio 包含一整套用于开发和调试嵌入式应用的工具。它包含适用于每个TI 器件系列的编译器、源码编辑器、项目构建环境、调试器、描述器、仿真器以及多种其它功能。CCS IDE 提供了单个用户界面,可帮助您完成应用开发流程的每个步骤。借助于精密的高效工具,用户能够利用熟悉的工具和界面快速上手并将功能添加至他们的应用。 版本 4 之前的 CCS 均基于 Eclipse 开放源码软件框架。Eclipse 软件框架可用于多种不同的应用,但是它最初被开发为开放框架以用于创建开发工具。我们之所以选择让 CCS 基于Eclipse ,是因为它为构建软件开发环境提供了出色的软件框架,并且正成为众多嵌入式软件供应商采用的标准框架。CCS 将 Eclipse 软件框架的优点和仪器 (TI) 先进的嵌入式调试功能相结合,为嵌入式开发人员提供了一个引人注目、功能丰富的开发环境。 CCS 有 2 个版本:白金版和微处理器版。各版本支持的处理器不同。支持的核白金版:TMS320C6000、TMS320C5000、TMS320C2800、TMS470、TMS570、ARM 7、ARM9、ARM 11、ARM Cortex M3(不包含 Stellaris Cortex M3)、ARM Cortex R4、ARM Cortex A8 和 MSP430 处理器版:TMS320C2800 和MSP430 CCS 白金版和微处理器版都使用以下各项:主机:PC 操作系统:Microsoft Windows Vista 和 XP (2) 使用CCS时,经常遇到下述扩展名文件,说明分别是什么文件。 ①project. mak :即MAKE文件,VC4及以前版本使用的工程文件,用来指定如何建立一个工程, VC6把MAK文件转换成DSP文件来处理。 ②program. c :定义的变量、数组、函数的声明 ③program. asm :Oracle管理文件(OMF) ④filename. h :H C程序头文件 ⑤filename. lib :LIB 库文件 ⑥project. cmd :CMD Windows NT,OS/2的命令文件;DOS CD/M命令文件;dBASEⅡ程序文件 ⑦program. obj :OBJ 对象文件 ⑧program. Out: C语言输出文件 ⑨project. Wks :WKS Lotus 1-2-3电子表格;Microsoft Works文档 保存配置文件时产生的文件: ①programcfg.cmd 连接器命令文件 ②programcfg.h54 头文件 ③programcfg.s54 汇编源文件 DSP源文件的建立;

DSP实验报告

实验一 离散系统的时域分析 一、实验目的 1、掌握离散时间信号的MATLAB 表示; 2、信号运算; 3、差分方程的求解; 4、离散时间信号的卷积运算。 二、实验原理 1、离散时间信号 离散时间信号只在某些离散的瞬时给出函数值,而在其他时刻无定义。它是时间上不连续按一定先后次序排列的一组数的集合,称为时间序列,用x(n)表示,n 取整数代表时间的离散时刻。 在matlab 中用向量来表示一个有限长度的序列。 2、序列的类型 为了分析的方便,在数字信号处理中规定了一些基本的序列。 a) 单位采样序列 function [x,n]=impseq(n1,n2,n0) n=[n1:n2]; x=[(n-n0)==0]; 调用该函数 [x,n]=impseq(-2,8,2); stem(n,x) 0010()001()0n n n n n n n n n δδ =?=? ≠? =?-? ≠?

单位采样序列的另一种生成方法 n0=-2; n=[-10:10]; nc=length(n); x=zeros(1,nc); for i=1:nc if n(i)==n0 x(i)=1 end end stem(n,x) b) 单位阶跃序列 function [x,n]=stepseq(n1,n2,n0) n=[n1:n2]; x=[(n-n0)>=0]; 调用该函数 [x,n]=stepseq(-2,8,2); stem(n,x) 000 10()001()0n n n n n n n n n εε >=?=? =?-?

c) 实数指数序列 x(n)=an (运算符“.^”) n=[0:10]; x=0.9.^n; stem(n,x) d) 复数指数序列 n=[-10:10]; alpha=-0.1+0.3*j; x=exp(alpha*n); real_x=real(x); image_x=imag(x); mag_x=abs(x); phase_x=angle(x); subplot(2,2,1); stem(n,real_x) subplot(2,2,2); stem(n,image_x) subplot(2,2,3); stem(n,mag_x) subplot(2,2,4); stem(n,phase_x) ()()j n x n e αω+=(0.1j0.3)n x(n)e (10n 10) -+= -<<

DSP原理与应用实验报告

DSP原理与应用实验报告 姓名: 学号: 班级: 学院: 指导教师:

实验一代数汇编指令基础实验 一、实验目的: 1.通过调试目标代码,掌握指令的功能,熟悉指令; 2.通过指令的熟悉,能够指令应用于实际项目中。 二、实验原理: Ti公司的代数汇编指令。 三、实验程序: .title"算术指令综合实验" .mmregs .sect ".vect" .copy "vectors.asm" .text _Start: ; AR7=#767 ; A=#38CAH ; DP=#08AH ; RSA=#0123H; DP=#188H ; ASM=#0AH AR7=A MMR(*AR7+)=#1234H DP=#04H A=#9876H AR6=#230H *AR6+=#9ACDH ARP=#6 ; @38H=A NOP NOP AR0=#003AH A=*AR6+0 T=#08H SXM=1 B=*AR6-<

DSP实验报告重叠保留法和重叠相加法(精)

北京邮电大学 实 学班姓学 日 验报告 MATLAB 实现线性卷积运算院:信息与通信工程学院级:名: ______ 号: 期: 实验名称:用 索引

一、实验原 理 ..................................................................................................................... 3 1、算法产生背景 (3) 2、算法基本思 想 ...........................................................................................................................3 1)重叠相加法 (3) 2)重叠保留 法 ...........................................................................................................................4 二、流程图设计 . ................................................................................................................. 5 1、重叠相加 法 . .............................................................................................................................. 5 2、重叠保留 法 . (6) 三、MATLAB 源代 码 . ........................................................................................................... 7 1、重叠相加源码 ...........................................................................................................................7 2、重叠保留源 码 ...........................................................................................................................8 四、实验结果与分析 ........................................................................................................... 9 ①调用CONV (计 算 . ......................................................................................................................... 9 ②测试重叠相加算法 (9) ③测试重叠保留算 法 .....................................................................................................................9 五、讨论与总结 . ............................................................................................................... 10 1、算法效率分 析: .....................................................................................................................10 A. 重叠相加法 . (10)

DSP实验报告模版

我们做的dsp实验是实验一,实验二,实验三!模板上只有1 3 !2要自己仿照实验一写! 不要弄错了!实验题目在另外一个共享表格里! 实验一数据存储实验 一、实验目的 1. 掌握ccs的使用 2. 掌握 tms320c54x 程序空间的分配; 3. 掌握 tms320c54x 数据空间的分配; 4. 能够熟练运用tms320c54x 数据空间的指令。 二、实验设备 计算机,ccs 3.1版软件,dsp仿真器,e300实验箱,dsp-54xp cpu板。 三、实验步骤与内容 1. 在进行 dsp实验之前,需先连接好仿真器、实验箱及计算机,连接方法如下所示: 2. e300 底板的开关sw4 的第1位置on,其余位置off。其余开关设置为off。 sw5全部置on;其余开关不做设置要求 3. 上电复位 在硬件安装完成后,确认安装正确、各实验部件及电源连接无误后,启动计算机,接通仿真器电源,此时,仿真器上的“红色指示灯”应点亮,否则dsp开发系统与计算机连接存在问题。 4. 运行ccs程序 1) 待计算机启动成功后,实验箱220v电源置“on”,实验箱上电 2) 启动ccs3.1,进入ccs界面后,点击“debug—connect” 3) 此时仿真器上的“绿色指示灯”应点亮,ccs正常启动,表明系统连接正常;否则仿真器的连接、jtag 接口或ccs 相关设置存在问题,这时需掉电检查仿真器的连接、jtag 接口连接是否正确,或检查ccs相关设置是否存在问题。 5. 成功运行ccs 程序后,首先应熟悉ccs的用户界面; 6. 学会在ccs环境下创建工程文件、添加程序文件、编写程序、编译、装载、调试,学习如何使用观察窗口等。 7. 用“project\open”打开“c:\ti5000\myprojects\01_mem\ mem.pjt”. 编译并装载“\ 01_mem\debug\mem.out” 8.用“edit”下拉菜单中的“memory/fill”编辑内存单元,参数设置如下图: 单击“ok”此时以0x1000 为起始地址的16个内存单元被修改成:0x0009 9.用“view”下拉菜单“memory”观察内存单元变化,输入要查看的内存单元地址,本实验要查看0x1000h~0x100fh 单元的数值变化,输入地址0x1000h; 单击“ok”如下图所示: 10. 点击“debug\go main”进入主程序,在程序中“加软件断点1”和“加软件断点2”处 施加软件断点。 11. 单击“debug\run”运行程序,也可以“单步”运行程序;当程序运行到“软件断点1” 处时,查看0x1000h~0x1007h单元的值变化, 12. 再单击“debug\run”,当程序运行到“软件断点2”处时,查看0x1008~0x100f

DSP实验报告+心得体会

龙岩学院 实验报告 班级07电本(1)班学号2007050344 姓名杨宝辉同组人独立 实验日期2010-5-18 室温大气压成绩 基础实验 一、实验目的 1. 掌握CCS实验环境的使用; 2. 掌握用C语言编写DSP程序的方法。 二、实验设备 1. 一台装有CCS软件的计算机; 2. DSP实验箱的TMS320F2812主控板; 3. DSP硬件仿真器。 三、实验原理 浮点数的表达和计算是进行数字信号处理的基本知识;产生正弦信号是数字信号处理中经常用到的运算;C语言是现代数字信号处理表达的基础语言和通用语言。写实现程序时需要注意两点:(1)浮点数的范围及存储格式;(2)DSP的C语言与ANSI C语言的区别。 四、实验步骤 1.打开CCS 并熟悉其界面; 2.在CCS环境中打开本实验的工程(Example_base.pjt),编译并重建.out 输出文件,然后通过仿真器把执行代码下载到DSP芯片中; 3.把X0 , Y0 和Z0添加到Watch窗口中作为观察对象(选中变量名,单击鼠标右键,在弹出菜单中选择“Add Watch Window”命令); 4.选择view->graph->time/frequency…。设置对话框中的参数: 其中“Start Address”

设为“sin_value”,“Acquisition buffer size”和“Display Data size”都设为“100”,并且把“DSP Data Type”设为“32-bit floating point”, 设置好后观察信号序列的波形(sin函数,如图); 5.单击运行; 6.观察三个变量从初始化到运算结束整个过程中的变化;观察正弦波形从初始化到运算结束整个过程中的变化; 7.修改输入序列的长度或初始值,重复上述过程。 五、实验心得体会 通过本次实验,加深了我对DSP的认识,使我对DSP实验的操作有了更进一步的理解。基本掌握了CCS实验环境的使用,并能够使用C语言进行简单的DSP程序设计。 从软件的安装到使用软件进行程序设计与仿真,锻炼了自己的动手能力,也遇到了不少的坎坷,例如芯片的选择,不能因为麻烦而省略该步骤,否则将会运行出错。

DSP实验报告5

DSP 第五次实验 1.实验目的: (1)进一步熟悉matlab 实验环境和语言。 (2)掌握求序列圆周翻褶的MATLAB 方法。 (3)掌握求序列DFT 及IDFT 矩阵的MATLAB 方法。 (4)掌握用MATLAB 求解用圆周卷积计算线性卷积的时域的方法。 (5)掌握用FFT 计算有限长序列的线性卷积和线性相关的方法。 2.实验内容及总结: 1.圆周翻褶 【例3.27】 已知()[2,3,4,5,6],8X n N ==,求x(n)的8点圆周翻褶序列88(())()x n R n -。 代码: clc;clear all x=[2,3,4,5,6];N=8; x=[x,zeros(1,N-length(x))];nx=0:N-1 y=x(mod(-nx,N)+1); subplot(121),stem([0:N-1],x);title('原序列'); xlabel('n');ylabel('x(n)');grid; subplot(122),stem([0:N-1],y);title('圆周翻褶序列'); xlabel('n');ylabel('x((n))8 R8(n)');grid; 结果:

总结: 对于圆周翻褶 (0),0 ()(())() (),11 N N x n y n x n R n x N n n N = =-=? -≤≤-MA TLAB可用 y=x(mode(-nx,N)+1)求得。因此,要求X(n)=[2,3,4,5,6],N=8的8点圆周翻褶序列,要先将x(n)补零到8点长度再求圆周翻褶。 x=[x,zeros(1,N-length(x))];nx=0:N-1 %x补零到8点长 y=x(mod(-nx,N)+1); %圆周翻褶从一开始,因此得到8点长 %序列,应该再加一 2.DFT矩阵,IDFT矩阵 【例3.29】已知N=4的DFT矩阵w4,求IDFT矩阵w4I。 代码:

DSP实验报告

DSP实验报告 电子111班 刘卓 112099 同组人:张顺 112108

指令实验 一、实验目的 1、了解DSP的结构及引脚功能; 2、掌握DSP的基本指令。 二、实验要求 了解怎样对DSP进行简单的编程操作、运算控制等基本汇编语言及算术语言、实验测试及除错验证。 三、实验步骤 见教材342页。 四、实验结果 1、直观结果 .title "ex1" .mmregs .def _c_int00 DAT0 .SET 60H DAT1 .SET 61H DAT2 .SET 62H DAT3 .SET 63H .text ADD3 .MACRO P1,P2,P3,ADDRP LD P1,A ADD P2,A ADD P3,A STL A,ADDRP .ENDM _c_int00:B start start: LD #004h,DP ;DP=0004,ST0=1804 STM #1000h,SP ;SP=1000 SSBX INTM ;INTM=1 bk0: ST #0012h,DAT0 ;D(0x0260)=0x0012 LD #0023h,A ;A=0000000023 ADD DAT0,A ;A=0000000035,ST0=1004,C=0 NOP NOP bk1: ST #0054h,DAT0 ;D(0x0260)= 0x0054 LD #0002h,A ;A=0000000002 SUB DAT0,A ;A=FFFFFFFFAE NOP NOP bk2: ST #0345h,DAT0 ;D(0x0260)=0x0345 STM #0002h,T ;T=0002

DSP实验报告3

DSP 实验报告3 姓名 学号 时间 2015.6.9 地点 实验大楼A631 实验题目 卷积运算 一、 实验目的 1、学习如何用DSP 的C 语言程序实现卷积与相关的计算; 2、学习用CCS 调试程序的详细过程; 3、学习如何设置断点。 二、 实验内容及步骤 1、创建一个新项目工程 将“maxminmath 文件夹”复制到“D:\CCStudio_v3.3\MyProjects ”下。 2、打开工程调试程序,并说明程序的功能; 3、编程实现以下功能: 已知()()n R n x 4=,()()n R n h 4=,求()()()n h n x n y *= a 、采用子程序调用的方式实现,并且注释程序; b 、把x ,h 和y 添加到Watch 窗口中作为观察对象; c 、观察三个数组从初始化到卷积运算结束整个过程中的变化(可单击变量名前的“+”号把数组展开),并将变化过程记录下来。 三、 实验程序 给出卷积运算的子程序: void main() { int x[7]={0,0,0,1,1,1,1},h[7]={1,1,1,1,0,0,0},y[7]={0}; int i,j; for(i=0;i<7;i++) for(j=0;j<7;j++) {if(i+j<7) y[i]=y[i]+x[i+j]*h[j]; y[i]=y[i]%2;} } 评 阅

四、实验结果 y值的变化情况如下: 五、实验思考题 1、试用汇编语言编写实现卷积运算的程序; .global start ;定义全局变量 .mmregs .data; 开始数据段 .bss m,1; 开设全局变量,每个变量占用一个字 .bss n,1 .bss z,1 .text; 开始文本段 start: ST #1000h,AR1 ST #3000h,AR2 ST #5000h,AR3 ST #0,@m RPT 999 RPT m+ LOOP: MVPD 6000h MVDD *AR1+,*AR4 MVDD *AR2+,*AR5 MACP *AR4,*AR5,src B LOOP ST A,*AR3+ xh: b xh;空循环 .end

DSP实验报告4剖析.

DSP实验报告 院系:哈尔滨理工大学荣成校区 专业:电子信息工程 学号: 1230160101 姓名:董小天 日期: 2015年6月16日

实验四无限冲击相应滤波器(IIR)算法实验 一、实验目的 1、熟悉设计IIR数字滤波器的原理与方法 2、掌握数字滤波器的计算机仿真方法; 3、通过观察对实际信号的滤波作用,获得对数字滤波的感性认识。 二、实验设备 计算机,CCS 3.1版软件,实验箱,DSP仿真器,连接线。 三、实验原理 1、无限冲击响数字滤波器的基础理论; 2、模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、贝塞尔滤波器); 3、双线性变换的设计原理。 四、实验步骤 1、复习有关巴特沃斯滤波器设计和用双线性变换法设计IIR数字滤波器的知识; 2、阅读本实验所提供的样例子程序; 3、运行CCS软件,对样例程序进行跟踪,分析结果; 4、填写实验报告。 5、样例程序实验操作说明 A.实验前准备 ①实验箱和CPU板设置:SW2的2、4置ON,1、3置OFF;S2全部置ON;JP3开关的3、6位置ON,其余置off,S23全部置OFF。 ②用导线连接“信号源”2号孔“信号源1”和“A/D单元”2号孔“ADIN1”; B.实验 启动CCS 3.1,打开工程文件exp03_iir。在程序中m=0处设置断点,运行 打开一个图形观察窗口;设置双综观察在起始地址x、y,数值变化为256,32位浮点型变量。 五、实验结果及代码

实验代码 #define UCHAR unsigned char #define UINT16 unsigned int #define UINT32 unsigned long #define TRUE 1 #define FALSE 0 //--------------------------------------------------------- //----------------定义寄存器地址-------------- #define IODIR_ADDR 0x3400 #define IODATA_ADDR 0x3401 //---------------定义寄存器操作-------------- #define IODIR *(ioport unsigned int *)IODIR_ADDR #define IODATA *(ioport unsigned int *)IODATA_ADDR #define IER0 (*(volatile unsigned int*)0x0000) //Interrupt Enable Register 0 #define IFR0 (*(volatile unsigned int*)0x0001) //Interrupt Flag Register 0 #define IER1 (*(volatile unsigned int*)0x0045) //Interrupt Enable Register 1 #define IFR1 (*(volatile unsigned int*)0x0046) //Interrupt Flag Register 1 #define AD_Addr 0x20008 #define AD_in (*(unsigned int *)AD_Addr) //AD输入 //---------------------------------------------------------- /* 全局变量定义*/

相关文档