DSP实验报告
一、综合实验内容和要求
1. 实验目的
(1) 学习掌握CCS3.3编译器的使用;
(2) 通过实验学习掌握TMS320F28335的GPIO ,浮点计算; (3) 学习并掌握A/D 模块的使用方法;
(4) 学习并掌握中断方式和查询方式的串口通信; (5) 学习并掌握28335DSP 的定时器相关的设置与运用; (6) 学习信号时域分析的方法,了解相关波形参数的计算方法; (7) 了解数字滤波的一些基本方法; (8) 学习数码管的驱动及运用。
(9) 学习MATLAB 串口以及画图的运用。 2. 实验设计内容与要求:
(1) 对给定的周期波形信号采用TI 公司的TMS320F28335DSP ,利用试验箱上的相关资源计算出波形的周期T ,波形的有效值rms V ,平均值avg V 。其中,有效值和平均值的计算公式(数字量的离散公式)如下:
rms V =
1()N
avg
i
V u i N
=∑
式中N 为一个周期采样点数,()u i 为采样序列中的第i 个采样点。
(2) 通过算法计算出波形的有效值和平均值,利用串口通信把测得的数据发送到串口助手查看,或者在MATLAB 上编写上位机程序,把发送的数据在MATLAB 上画出来。
(3) 把测得的数据实时显示在数码管上。
二、硬件电路
图1为试验系统的硬件图,硬件电路主要包括TMS320F28335DSP 实验箱,SEED-XDS510仿真器,数码管,SCI,信号发生器,电脑,串口线等。
图1 硬件电路图
三、实验原理
本试验主要是通过程序去测量一个周期波形的有效值、平均值、峰值等相关参数。计算离散数据的有效值可用公式rms V =
平均值可用公式1()N avg
i
V u i N
=∑。所以首先需要测出波形的周期,然后确定每个周期需要采样的
点数N ,最后去计算平均值和有效值。
v m
v 1
图2 理想输入采样波形
如图2所示为一个正弦输入波形,
m V 为输入波形的峰值,1V 是介于0~ m V 的
一个值。A 、B 、C 分别为1V 和输入波形相交的三点,则A 、C 两点之间为一个周期,只要测得A 、C 两点之间的时间就可以得到周期值,从而进行后面的计算。
本算法的主要核心是进行比较。当A/D 采样值大于1V 时,开启定时器,第二次A/D 采样值小于1V 时即B 点,第三次A/D 采样值大于1V 时即C 点时关闭定时器,读取定时器的值,从A-C 是一个周期,这样就可以通过程序测得波形的周期T 。每次A/D 采样间隔的时间一样为7.5 s μ,这样就可以算出来一个周期需要采集的点数N=T/7.5 s μ。
然后根据公式rms V =1()
N
avg
i
V u i N
=∑算出平均值和有效值。
v m v 1
图3 输入采样真实波形
如图3所示,在具体实验时遇到测周期不准的问题,后面发现是因为输入波形不是理想的,在和固定比较值比较的时候会有抖动,这样的话可能会在一个点重复比较好几次。后面在程序里面加了防抖动的程序,有效的解决了这个问题。在采样后与1V 比较一次在继续比较5个点,如果有5个点都比1V 大或者小才确认比较了一次,这样有效地解决了波形的抖动问题,使测得的周期准确稳定。
四、程序流程图
如图4所示,为程序的总流程图,包括DSP 的初始化,A/D 采样,比较通过定时器算出周期,然后根据上面所提的公式计算有效值和平均值,最后把得到的
值发送到上位机上实时画图显示并且在数码管上显示出来。
图4 程序流程图
五、实验结果和分析
1、试验平台
本试验实验平台为CCS3.3,主界面如图所示。
图5 CCS3.3平台主界面
2、试验步骤
(1) 实验准备:给实验板加电,启动CCS,打开工程,连接目标板。
(2) 通过键盘设置输入信号。
(3) 编写好程序,编译并下载程序。
(4) 在PC机上打开串口调试助手,在CCS中打开观察波形和一些变量的窗口,
启动程序,观察相关波形和参数。
3、试验波形和结果
通过键盘设置信号发生器输出的波形形状、幅值和频率,然后去观察测得的周期值,有效值和平均值来检测算法的正确性和通用性。
如图6所示输入1000Hz/1000mV的正弦波的采样波形,数码管有效值显示,
watch window相关变量值的照片如下所示。
图6 1000Hz/1000mV正弦波波形及参数
如图7所示输入1000Hz/2000mV的正弦波的采样波形,数码管有效值显示,watch window相关变量值的照片如下所示。
图7 1000Hz/2000mV正弦波波形及参数
如图8所示输入2000Hz/1000mV的正弦波的采样波形,数码管有效值显示,watch window相关变量值的照片如下所示。
图8 2000Hz/1000mV正弦波波形及参数
如图9所示输入1000Hz/1000mV的方波的采样波形,数码管有效值显示,watch window相关变量值的照片如下所示。
图9 1000Hz/1000mV方波波形及参数
如图10所示输入1000Hz/1000mV的三角波的采样波形,数码管有效值显示,watch window相关变量值的照片如下所示。
图10 1000Hz/1000mV三角波波形及参数
如图11所示为通过串口把有效值发送到串口助手的截图,可以看出DSP可以成功的通过SCI把测得的数据发送到上位机上。同时也可以把发送的数据用MATLAB画出来。
图11 串口发送有效值显示
4、试验结果分析
通过实验可以看出可以看出A/D采样显示正常,所用的程序可以较好的测得正弦波、方波、三角波的周期值、平均值。另外可以通过串口把需要测得的参数发送到串口助手上,或者自己编写的MATLAB上位机实时显示波形。通过键盘修改输入波形的频率和周期也可以很稳定的测得波形的周期、有效值、平均值,从而验证了算法正确性。
5、试验中的问题及解决
(1) 实验板加电后第二次烧写程序后,总是进不了A/D采样中断程序,每次运行
一次都要重启一下实验板。经过分析应该是程序在运行一次后,让程序停止后A/D中断的一些中断标志位没有清零。所以我在程序的一开始加上了清A/D中断标志位的程序,有效的解决了这个问题。
(2) 在想好测量周期算法后,写好程序验证时发现,测得的周期值很不稳定。经
过观察波形分析,是因为实际采样波形会有波动。加了防抖动算法后有效解决了这个问题。
(3) 在编写MATLAB上位机实时显示波形时,发现由于串口一次只能发送一个
字节,最大只能到255,而需要发送的参数值大于255。经过查询资料,我把每个参数分高八位和低八位发送,然后在上位机上再把这两个八位数据合并成一个十六位数据。
(4) 开始程序计算波形周期、有效值、平均值算法都放在A/D中断里面,结果发
现会影响A/D的采样,经过分析发现,因为算法计算量挺大,在中断里面算不完。所以我在A/D中断里面设置了一个标志位,当采样完一个周期以后置位,然后在main函数的for循环里面判断计算,提高了CPU的计算效率。
六、实验总结
通过这段时间的DSP的学习和实验,让我对TMS320F28335各个模块有了一定深度的理解和认识,让我更好的把握了这款DSP的相关知识,同时也让我对其他DSP的学习打好基础。通过这次实验,也遇到了很多问题,自己和同学仔细去分析,一步一步去解决问题,锻炼了我们分析DSP相关问题的能力。另外结合上学期学习的MATLAB知识,自己查询资料,在MATLAB里面写了串口的程序,把发送过来的数据通过画图画出来。感觉学习狠多。另外非常感谢崔
江老师和沈乐同学的指导和帮助。
七、DSP MAIN函数源程序清单(双栏)
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h" // DSP2833x Examples Include File
#include "math.h"
//#include "math.h"
#define SCI 1
#define UART_INT 0
// Prototype statements for functions found within this file.
interrupt void adc_isr(void);
interrupt void ISRTimer2(void);
interrupt void scicTxFifoIsr(void);
interrupt void scicRxFifoIsr(void);
interrupt void scibTxFifoIsr(void);
interrupt void scibRxFifoIsr(void);
void scib_fifo_init();
void scic_fifo_init();
void error(void);
#if (CPU_FRQ_150MHZ) // Default - 150 MHz SYSCLKOUT
#define ADC_MODCLK 0x3 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) = 25.0 MHz
#endif
#if (CPU_FRQ_100MHZ)
#define ADC_MODCLK 0x2 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) = 25.0 MHz
#endif
#define ADC_CKPS 0x1 // ADC module clock = HSPCLK/2*ADC_CKPS = 25.0MHz/(1*2) = 12.5MHz #define ADC_SHCLK 0xf // S/H width in ADC module periods = 16 ADC clocks
#define A VG 1000 // Average sample limit
#define ZOFFSET 0x00 // Average Zero offset
#define BUF_SIZE 160 // Sample buffer size
// Global variables used in this example:
// Global variables
Uint16 dataC; // Received data for SCI-A Uint16 dataB; // Rceived data for SCI-A Uint16 ConversionCount=0;
Uint16 Voltage1[1024];
Uint32 jifen=0;
Uint32 vrms=0;
Uint32 vavg=0;
Uint32 voltage=0;
Uint16 cnt=0;
Uint32 Vdc;
Uint32 ACpeak;
Uint32 peak[10];
int Led_Flag;
int Comp_Flag=0;
Uint32 Period=0;
Uint32 Freq=0;
Uint32 fangdoucnt=0;
Uint32 fangdou1cnt=0;
Uint32 plotnum=200;
int startflag=0;
int jifencnt=0;
int i=0;
void write();
void txnum(int a);
main()
{
// Step 1. Initialize System Control:
// PLL, WatchDog, enable Peripheral Clocks
// This example function is found in the DSP2833x_SysCtrl.c file.
InitSysCtrl();
// Step 2. Initialize GPIO:
// This example function is found in the DSP2833x_Gpio.c file and
// illustrates how to set the GPIO to it's default state.
InitGpio(); // Skipped for this example
InitSciGpio();
// Step 3. Clear all interrupts and initialize PIE vector table:
// Disable CPU interrupts
DINT;
// Initialize the PIE control registers to their default state.
// The default state is all PIE interrupts disabled and flags
// are cleared.
// This function is found in the DSP2833x_PieCtrl.c file.
InitPieCtrl();
// Disable CPU interrupts and clear all CPU interrupt flags:
IER = 0x0000;
IFR = 0x0000;
// Initialize the PIE vector table with pointers to the shell Interrupt
// Service Routines (ISR).
// This will populate the entire table, even if the interrupt
// is not used in this example. This is useful for debug purposes.
// The shell ISR routines are found in DSP2833x_DefaultIsr.c.
// This function is found in DSP2833x_PieVect.c.
InitPieVectTable();
#if UART_INT
// Interrupts that are used in this example are re-mapped to
// ISR functions found within this file.
EALLOW; // This is needed to write to EALLOW protected registers
#if SCI
PieV ectTable.SCIRXINTB = &scibRxFifoIsr;
PieV ectTable.SCITXINTB = &scibTxFifoIsr;
#else
PieV ectTable.SCIRXINTC = &scicRxFifoIsr;
PieV ectTable.SCITXINTC = &scicTxFifoIsr;
#endif
EDIS; // This is needed to disable write to EALLOW protected registers
#endif
// Step 4. Initialize all the Device Peripherals: // This function is found in DSP2833x_InitPeripherals.c
// InitPeripherals(); // Not required for this example
#if SCI
scib_fifo_init(); // Init SCI-B
#else
scic_fifo_init(); // Init SCI-C
#endif
// Step 5. User specific code, enable interrupts: #if UART_INT
// Enable interrupts required for this example PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
// Enable the PIE block
#if SCI
PieCtrlRegs.PIEIER9.bit.INTx3=1;
// PIE Group 9, INT3 RE
PieCtrlRegs.PIEIER9.bit.INTx4=1;
// PIE Group 9, INT4 TX
IFR = 0x0000;
IER = 0x100; // Enable CPU INT
#else
PieCtrlRegs.PIEIER8.bit.INTx5=1;
// PIE Group 8, int5 RE
PieCtrlRegs.PIEIER8.bit.INTx6=1;
// PIE Group 8, INT6 TX
IFR = 0x0000;
IER = 0x080; // Enable CPU INT
#endif
EINT;
#endif
// Interrupts that are used in this example are re-mapped to
// ISR functions found within this file.
EALLOW; // This is needed to write to EALLOW protected register
PieV ectTable.ADCINT = &adc_isr;
PieV ectTable.TINT2 = &ISRTimer2;
EDIS; // This is needed to disable write to EALLOW protected registers
// Step 4. Initialize all the Device Peripherals: // This function is found in DSP2833x_InitPeripherals.c
// InitPeripherals(); // Not required for this example
InitXintf();
InitAdc(); // For this example, init the ADC
InitCpuTimers();
ConfigCpuTimer(&CpuTimer2, 150, 1000000);
StopCpuTimer2();
//StartCpuTimer2();
CpuTimer2Regs.TCR.all = 0x4001; // Use write-only instruction to set TSS bit = 0
// CpuTimer2Regs.TIM.all=0;
// Step 5. User specific code, enable interrupts:
max7219_data_send(0x090f);//设置译码方式寄存器,
max7219_data_send(0x0a05);//设置亮度调整寄存器
max7219_data_send(0x0b03);//设置扫描控制寄存器
max7219_data_send(0x0c01);//设置掉电模式寄存器
max7219_data_send(0x0f00);
DELAY_US(1000);
// Enable ADCINT in PIE
PieCtrlRegs.PIEIER1.bit.INTx6 = 1;
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
IER |= M_INT1; // Enable CPU Interrupt 1 IER |= M_INT14;
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
LoopCount = 0;
ConversionCount = 0;
AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK;
AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS;
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;
// 0 Non-Cascaded Mode; 1 Cascaded Mode
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0x1;
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 0x1;
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x6;
AdcRegs.ADCMAXCONV.bit.MAX_CO
NV1 = 15;
AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0x1 ;
// write(1234);
// Wait for ADC interrupt
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;
// Reset SEQ1
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
// Clear INT SEQ1 bit
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // Acknowledge interrupt to PIE
AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0x1 ;
//LoopCount=sqrt(199);
for(;;)
{
if(startflag==1)
{
jifen=0;
startflag=0;
for(i=0;i { voltage=V oltage1[i]*3/4; vavg=vavg+voltage; jifen+=voltage*voltage; } vrms=jifen/plotnum; vrms=sqrt(vrms); vavg=vavg/plotnum; txnum(vrms); write(vrms); } } } /*void txnum(int a)//串口发送 { ScibRegs.SCITXBUF='0'+a/1000; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF='0'+a/100%10; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF='0'+a/10%10; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF='0'+a%10; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF=','; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); }*/ void txnum(int a) { ScibRegs.SCITXBUF=a>>8; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); ScibRegs.SCITXBUF=a&&0xff; while(ScibRegs.SCIFFTX.bit.TXFFST != 0); } interrupt void adc_isr(void)//7.5us进一次中断 { //txnum(sqrt(900)*10); V oltage1[ConversionCount] = AdcRegs.ADCRESULT0 >>4; if((V oltage1[ConversionCount]>650)&&( Comp_Flag==0)) { //fangdou=ConversionCount; fangdoucnt++; if(fangdoucnt>5) { fangdoucnt=0; Comp_Flag=1; ReloadCpuTimer2(); StartCpuTimer2();//打开定时器 } //CpuTimer2Regs.TIM.all=150000000; } if(Comp_Flag==1) { //if(ConversionCount>fangdou+4) //{ // fangdou=0; if(V oltage1[ConversionCount]<650) { fangdou1cnt++; if(fangdou1cnt>5) { fangdou1cnt=0; Comp_Flag=2; } } // } } if(Comp_Flag==2) { if(Voltage1[ConversionCount]>650) { Comp_Flag=0; fangdoucnt=0; fangdou1cnt=0; Period=150000000-CpuTimer2Regs.TIM. all;//周期时间 plotnum=Period/15/76;//一个周期采样次数 //startflag=1; StopCpuTimer2();//关闭定时器 } } //voltage=Voltage1[ConversionCount]*3/4; /* if(startflag==1) { jifencnt++; jifen+=voltage*voltage; if(jifencnt==plotnum) { jifencnt=0; vrms=jifen/plotnum; vrms=sqrt(vrms); jifen=0; plotnum=Period/15/74; // txnum(vrms); } }*/ // If 40 conversions have been logged, start over if(ConversionCount ==plotnum) { startflag=1; ConversionCount = 0; // vrms=sqart(vrms); //write(vrms); } else ConversionCount++; if(cnt==100) { write(vrms); cnt=0; } // Reinitialize for next ADC sequence AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; // Reset SEQ1 AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; // Clear INT SEQ1 bit PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // Acknowledge interrupt to PIE AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0x1 ; return; } interrupt void ISRTimer2(void) { CpuTimer2.InterruptCount++; if(Led_Flag == 1) { GpioDataRegs.GPADAT.bit.GPIO0 =0; Led_Flag = 0; } else { GpioDataRegs.GPADAT.bit.GPIO0 =1; Led_Flag = 1; } } void scib_fifo_init() { ScibRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback // No parity,8 char bits, // async mode, idle-line protocol ScibRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK, // Disable RX ERR, SLEEP, TXW AKE #if UART_INT ScibRegs.SCICTL2.bit.TXINTENA =1; ScibRegs.SCICTL2.bit.RXBKINTENA =1; ScibRegs.SCIHBAUD =0x0001; ScibRegs.SCILBAUD =0x00e7; ScibRegs.SCICCR.bit.LOOPBKENA =0; // disenable loop back ScibRegs.SCIFFTX.all=0xC020; ScibRegs.SCIFFRX.all=0x0021; ScibRegs.SCIFFCT.all=0x00; ScibRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset ScibRegs.SCIFFTX.bit.TXFIFOXRESET =1; ScibRegs.SCIFFRX.bit.RXFIFORESET= 1; #else ScibRegs.SCICTL2.all =0x0003; ScibRegs.SCICTL2.bit.TXINTENA =1; ScibRegs.SCICTL2.bit.RXBKINTENA =1; ScibRegs.SCIHBAUD =0x0001; ScibRegs.SCILBAUD =0x00e7; ScibRegs.SCICCR.bit.LOOPBKENA =0; // Disable loop back ScibRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset ScibRegs.SCIFFTX.bit.TXFIFOXRESET =0; ScibRegs.SCIFFRX.bit.RXFIFORESET= 0; ScibRegs.SCIFFTX.all=0xE040; ScibRegs.SCIFFRX.all=0x204f; ScibRegs.SCIFFCT.all=0x0; #endif } void scic_fifo_init() { ScicRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback // No parity,8 char bits, // async mode, idle-line protocol ScicRegs.SCICTL1.all =0x0003; // enable TX, RX, internal SCICLK, // Disable RX ERR, SLEEP, TXW AKE #if UART_INT ScicRegs.SCICTL2.bit.TXINTENA =1; ScicRegs.SCICTL2.bit.RXBKINTENA =1; ScicRegs.SCIHBAUD = 0x0001; ScicRegs.SCILBAUD = 0x00e7; ScicRegs.SCICCR.bit.LOOPBKENA =0; // Disenable loop back ScicRegs.SCIFFTX.all=0xC020; ScicRegs.SCIFFRX.all=0x0021; ScicRegs.SCIFFCT.all=0x00; ScicRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset ScicRegs.SCIFFTX.bit.TXFIFOXRESET =1; ScicRegs.SCIFFRX.bit.RXFIFORESET=1 ; #else ScicRegs.SCICTL2.all =0x0003; ScicRegs.SCICTL2.bit.TXINTENA =1; ScicRegs.SCICTL2.bit.RXBKINTENA =1; ScicRegs.SCIHBAUD =0x0001; ScicRegs.SCILBAUD =0x00e7; ScicRegs.SCICCR.bit.LOOPBKENA =0;// Disable loop back ScicRegs.SCICTL1.all =0x0023; // Relinquish SCI from Reset ScicRegs.SCIFFTX.bit.TXFIFOXRESET =0; ScicRegs.SCIFFRX.bit.RXFIFORESET=0 ; ScicRegs.SCIFFTX.all=0xE040; ScicRegs.SCIFFRX.all=0x204f; ScicRegs.SCIFFCT.all=0x0; #endif } interrupt void scibTxFifoIsr(void) { ScibRegs.SCIFFTX.bit.TXFFINTCLR=1; // Clear Interrupt flag PieCtrlRegs.PIEACK.all|=0x100; // Issue PIE ACK } interrupt void scibRxFifoIsr(void) { dataB=ScibRegs.SCIRXBUF.all; // Read data ScibRegs.SCITXBUF=dataB; // Send data ScibRegs.SCIFFRX.bit.RXFFOVRCLR= 1; // Clear Overflow flag ScibRegs.SCIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flag PieCtrlRegs.PIEACK.all|=0x100; // Issue PIE ack } interrupt void scicTxFifoIsr(void) { ScicRegs.SCIFFTX.bit.TXFFINTCLR=1; // Clear SCI Interrupt flag PieCtrlRegs.PIEACK.all|=0x080; // Issue PIE ACK } interrupt void scicRxFifoIsr(void) { dataC=ScicRegs.SCIRXBUF.all; // Read data ScicRegs.SCITXBUF=dataC; // Send data ScicRegs.SCIFFRX.bit.RXFFOVRCLR=1; // Clear Overflow flag ScicRegs.SCIFFRX.bit.RXFFINTCLR=1; // Clear Interrupt flag PieCtrlRegs.PIEACK.all|=0x080; // Issue PIE ack } void error(void) { asm(" ESTOP0"); // Test failed!! Stop! for (;;); } //================================ ============================== ============= // No more. //================================ ============================== ============= void write(Uint16 x) { int qian=0; int bai=0; int shi=0; int ge=0; qian=x/1000; bai=x%1000/100; shi=x%100/10; ge=x%10; max7219_data_send(0x0100+qian); max7219_data_send(0x0200+bai); max7219_data_send(0x0300+shi); max7219_data_send(0x0400+ge); } 八、MATLAB源程序 scom=serial('COM1'); scom.BaudRate = 9600; scom.InputBufferSize = 1024; scom.OutputBufferSize = 1024; scom.ReadAsyncMode = 'continuous'; scom.BytesAvailableFcnMode = 'byte'; scom.BytesAvailableFcnCount = 100; scom.BytesAvailableFcn = @instrcallback; fopen(scom) data=zeros(100,1); dataout=zeros(50,1); data=fread(obj,100,'uint8'); dataout=zeros(50,1); for i=1:50 dataout(i)=256*data(2*i)+data(2*i-1); end fid=fopen('G1.txt','a+'); fprintf(fid,'%5d',dataout); fclose(fid); speed=textread('G1.txt','%5d'); plot(speed); grid on; end 实验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课程的实用性和趣味性。 一、综合实验内容和目的 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系统设计 实验项目名称: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实验报告 软件实验 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 。 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运行实验报告 一、实验目的 熟悉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 上实现线性调频信号的脉冲压缩,动目标显示和动目标检测 (一)实验目的: (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实验报告 软件实验 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 实验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.实验程序流程图: 一、实验原理: 1、无限冲击响数字滤波器的基础理论; 2、模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、贝塞尔滤波器); 3、双线性变换的设计原理。 二、实验内容: 1、复习有关巴特沃斯滤波器设计和用双线性变换法设计IIR数字滤波器的知识; 2、阅读本实验所提供的样例子程序; 3、运行CCS软件,对样例程序进行跟踪,分析结果; 4、填写实验报告。 5、样例程序实验操作说明 1)正确完成计算机、DSP仿真器和实验箱连接后,开关K9拨到右边,即仿真器选择连接右边的CPU:CPU2; 2)“A/D转换单元”的拨码开关设置: JP3 3)检查:计算机、DSP仿真器、实验箱是否正确连接,系统上电; 4)置拨码开关S23的1、2拨到OFF,用示波器分别观测模拟信号源单元的2号孔“信号源1”和“信号源2”输出的模拟信号,分别调节信号波形选择、信号频率、信号输出幅值等旋钮,直至满意,置拨码开关S23的1到ON,两信号混频输出; 三、程序分析: cpu_init(); //CPU初始化 fs = 25000; //设置采样频率为2500HZ nlpass = 0.18; //设置通带上限频率归一化参数为0.18 nlstop = 0.29; //设置阻带下限截止频率归一化参数为0.29 biir2lpdes(fs,nlpass,nlstop,a,b); 根据双线性变换法求滤波器的系数a和b set_int(); //调用低通滤波器子程序对信号进行滤波 中断程序注释: interrupt void int1() { in_x[m] = port8002; //读取port8002端口的数值 in_x[m] &= 0x00FF; //取后八位送入X[m] m++; //每取一个数字m加1 intnum = m; if (intnum == Len) //当取到128个字节时,重新读取port8002端口的数值 { intnum = 0; xmean = 0.0; for (i=0; i 实验二 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硬件实验报告 学院: 电子工程学院 专业: 姓名: 学号: 班级: 实验一常用指令实验 一、实验目的 熟悉DSP开发系统的连接 了解DSP开发系统的组成和结构和应用系统构成 熟悉常用C54X系列指令的用法(程序寻址,寄存器,I/O口,定时器,中断控制)。 二、实验步骤与内容 (一)简单指令程序运行实验 源程序: ;File Name:exp01.asm ;the program is compiled at no autoinitialization mode --程序在非自动初始化模式下编译 .mmregs --(enter memory-mapped registers into the symbol table) --进入记忆映射注册进入符号表 .global _main --(identify one or more global(external)symbols)--定义一个或多个全局变量 _main: stm(累加器的低端存放到存储器映射寄存器中) #3000h,sp(堆栈指针寄存器);堆栈指针的首地址设为#3000h ssbx(状态寄存器位置位)xf ;状态寄存器位置位,灯亮 call (非条件调用,可选择延迟)delay(存储器延时) ;调用delay函数延时 rsbx(状态寄存器复位)xf ;状态寄存器位复位,灯灭 call delay ;调用delay函数延时 b (累加器)_main ;可选择延迟的无条件转移,循环执行 nop(无操作) nop ;delay .5 second delay: ;延迟0.5秒 stm 270fh,ar3 (辅助寄存器3) ;把地址存放到存储器映射寄存器中 loop1: stm 0f9h,ar4 (辅助寄存器4);把地址存放到存储器映射寄存器中 loop2: banz loop2,*ar4- ;AR4不为0时转移,指针地址减一 实验一 离散系统的时域分析 一、实验目的 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原理与应用实验报告 姓名: 学号: 班级: 学院: 指导教师: 实验一代数汇编指令基础实验 一、实验目的: 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-< 东南大学自动化学院 实验报告 课程名称: D SP 原理及C 程序开发 第二次实验 实验名称:基于DSP 系统的实验——指示灯、拨码开关和定时器院(系):自动化专业:自动化 姓名:学号: 实验室:实验组别: 同组人员:实验时间:2012 年 4 月 18日 评定成绩:审阅教师: 第一部分实验:基于DSP 系统的实验——指示灯和拨码开关 一.实验目的 1. 了解ICETEK –F28335-A 评估板在TMS320F28335DSP 外部扩展存储空间上的扩展。 2. 了解ICETEK –F28335-A 评估板上指示灯和拨码开关扩展原理。 3. 学习在C 语言中使用扩展的控制寄存器的方法。 二.实验设备 计算机,ICETEK –F28335-A 实验箱(或ICETEK 仿真器+ICETEK–F28335-A 评估板+相关连线及电源)。 三.实验原理 1.TMS320F28335DSP 的存储器扩展接口 存储器扩展接口是DSP 扩展片外资源的主要接口,它提供了一组控制信号和地址、数据线,可以扩展各类存储器和存储器、寄存器映射的外设。 -ICETEK –F28335-A 评估板在扩展接口上除了扩展了片外SRAM 外,还扩展了指示灯、DIP 开关和D/A 设备。具体扩展地址如下: 0x180004- 0x180005:D/A 转换控制寄存器 0x180001:板上DIP 开关控制寄存器 0x180000:板上指示灯控制寄存器 -与ICETEK –F28335-A 评估板连接的ICETEK-CTR 显示控制模块也使用扩展空间控制主要设备: 208000-208004h :读-键盘扫描值,写-液晶控制寄存器 208002-208002h :液晶辅助控制寄存器 208003-208004h :液晶显示数据寄存器 2.指示灯与拨码开关扩展原理 北京邮电大学 实 学班姓学 日 验报告 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实验是实验一,实验二,实验三!模板上只有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技术 成绩: 实验项目名称:I/O实验实验时间: 2011-10-18 指导教师(签名): 班级:电信082 姓名:李江水学号:810706210 实验目的 1、了解I/O口的扩展;掌握I/O口的操作方法; 2、熟悉在C语言中访问IO口的方法 3、了解数字量与模拟量的区别和联系。 实验设备 计算机,CCS 2.0版软件,DSP仿真器,实验箱。 实验原理 1、开关量输入输出单元 采用8位的数字量输入即由八拨码开关来控制LED灯的显示,当拨码开关都是低电平即都为0时,LED 灯全亮,反之则不亮。。 2、CPU初始化 第一步:时钟模式寄存器的初始化clkmd; 第二步:状态寄存器st0、st1的初始化,复位值为0x1800、0x6900; 第三步:处理器工作模式状态寄存器(PMST)的初始化; 第四步:软件等待状态寄存器、软件等待状态控制寄存器的初始化; 第五步:分区转换控制寄存器(BSCR)初始化。 第六步: *(unsigned int*)IMR=0x0;屏蔽所以中断,IMR为中断屏蔽寄存器。 *(unsigned int*)IFR=0xffff;IFR为中断标志寄存器,中断标志清0 实验步骤与结果分析 开关K9拨到右边,即仿真器选择连接右边的CPU:CPU2;启动CCS 2.0,在Project→Open菜单打开exp03_cpu2目录下面的工程文件“exp03.pjt”。用下拉菜单中Project-->Open,打开“exp03_cpu2\ exp03.pjt”,双击“Source”,可查看源程序。 在File→Load Program菜单下加载exp03_cpu2\debug目录下的exp03.out文件。 运行程序,分别调整开关量输入单元的开关K1~K8,观察LED指示灯LED1~LED8亮灭的变化,以及开关量输入和输出状态是否一致。关闭所有窗口,本实验完毕。 分别调整K1到K8的开关,当开关为低电平即为零时,LED灯亮,当开关为高电平即为1时,LED灯不亮。当K1、K3、K5、K7为0时,LED灯的显示如下图1。 龙岩学院 实验报告 班级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实验报告
DSP实验报告
DSP实验报告-深圳大学-自动化
DSP实验报告
北邮dsp软件实验报告
DSP运行实验报告
dsp实验报告
DSP实验报告
dsp实验报告4
dsp实验报告5
DSP实验报告二CCS的使用
DSP硬件实验报告北邮
DSP实验报告
DSP原理与应用实验报告
DSP技术及课程设计实验报告二(精)
DSP实验报告重叠保留法和重叠相加法(精)
DSP实验报告模版
DSP实验报告一
DSP实验报告+心得体会