DSP多波形任意信号发生器实验报告

时间:2024.3.27

北京交通大学

数字信号处理(DSP)

综合设计性实验报告

题目:任意信号发生器的设计

              学 院:    电 子 信 息 工 程 学 院

班 级:   

指导教师: 钱满义

学 生:   

    

北京交通大学电工电子教学基地

20##年7月15日

目  录

一、设计任务 …………………………………………………

二、实验目的 …………………………………………………

三、实验要求及目标…………………………………………………

四、实验原理…………………………………………………

五、程序代码及仿真结果…………………………………………………

1. 泰勒级数产生正弦波

2. 泰勒级数产生余弦波

3. 三角波

4. 方波

5. 锯齿波

   

六、实验总结…………………………………………

七、参考资料…………………………………………


一. 设计任务

   信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。各种波形曲线均可以用三角函数方程式来表示。能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路被称为函数信号发生器。函数信号发生器在电路实验和设备检测中具有十分广泛的用途。信号发生器在现代工程中应用非常广泛。在实际中常需要产生一些特殊波形,用于仿真实际信号的波形,以检测和调试测量装置。

   使用 DSP可以产生连续的正弦波信号,同样也能产生方波、锯齿波、三角波等其它各种信号波形。本设计要求采用DSP及其CODEC产生上述各种信号波形。

二. 实验目的

(1)了解产生信号的两种方法及各自的优缺点。

(2)掌握使用DSP产生正弦波的原理和算法,进而掌握一般信号产生的原理和方法。

(3)掌握5502DSK CODECC的工作原理和初始化过程。

三. 设计要求及目标

基本部分:

使用DSP产生300—4000HZ的正弦信号,要求使用计算法,并且频率可变、幅度可变、直流分量可变。

发挥部分:

使用DSP产生300—4000HZ的方波、锯齿波和三角波。

四. 设计思路

产生连续信号的方法通常有两种:查表法和计算法,查表法不如计算法使用灵活。计算法可以使用泰勒级数展开法进行计算,也可以使用差分方程进行迭代计算或者直接使用三角函数进行计算。计算结果可以边计算边输出,也可以先计算后输出。

正弦函数和余弦函数的泰勒级数数学表达式为:

,

,.

如果要计算一个角度ⅹ的正弦和余弦值,可以取其前五项进行近似计算。或使用下面递归的差分方程进行计算。

y[n]=A*y[n-1]-y[n-2]  其中:A=2cos(x),x=2πF/FS。F—信号频率,FS—D/A转换频率。

利用递推公式计算正弦和余弦值需要已知cos(x)和正弦、余弦的前两个值。计算时所需的计算量小,但如果用来产生连续的正弦和余弦信号,则累积误差太大。要得到精确的计算结果,可以使用泰勒级数展开法进行计算,当然计算时所需的计算量很大。在实际应用时可以根据需要选择相应的算法。

要产生一个正弦信号,首先要算出一个周期内各样点的值,因为sin(x)的值总是小于1的小数,而5402 DSP是16位的定点处理器,所以要将其乘以215,变为Q15的数据格式,才能够在DSP中送到D/A转换器进行处理。

查表法与计算法的优缺点比较:

  查表法:事先将要输出的数据计算好,存储在DSP的内部RAM中,然后依次循环输出,从而才生波形。这种方法的优点在于其速度快,可以产生频率很高的波形,而且不占用DSP的计算时间,它的缺点是需要占用DSP的内存空间,尤其是对采样频率比较大的输出波形,所需要的内部空间很大,所以这种方法用于对精度和频率要求不高的场合。

计算法:采用计算的方法依次计算数据然后输出。计算法的优缺点正好和查表法相反。其优点是不占用DSP的存储空间,可以根据信息随时间改变或调整输出波形的周期波形;其缺点是占用DSP的计算时间,使得执行程序的开销大

   在本次实验中我们采用计算法来产生正弦波,并且同时使用了泰勒级数、递归差分方程和三角函数计算三种方法来进行计算,以对这三种算法进行横向比较。

五. 程序代码及仿真结果

1.泰勒级数法实现正弦波

程序代码:

#include <math.h>

#include <stdio.h>

#include <csl.h>

#include <csl_chip.h>

#include <csl_i2c.h>

#include <csl_pll.h>

#include <csl_mcbsp.h>

#include <csl_emif.h>

#include <csl_emifBhal.h>

#include <stdio.h>

//#include "E2PROM_Function.h"

#include "CODEC.h"

#define Nx 720             //每周期抽取点数

#pragma DATA_SECTION(output1,"data_out1");    //存放sin数据,浮点型

float output1[Nx];

#pragma DATA_SECTION(output,"data_out");    //存放sin数据,定点型

int output[Nx];

#define   pi    3.1415927

#define   pi2   2*pi

#define   F0    1000    //Signal frequency

#define   Fs    16000     //Sampling frequency//

#undef  CODEC_ADDR

#define CODEC_ADDR 0x1A

#define _COSX 0.999390827

/* Global declarations */

//int inp_buffer[BUFSIZE];       /* processing data buffers */

//int out_buffer[BUFSIZE];

int gain = MINGAIN;                      /* volume control variable */

int frequency = MINGAIN;

int abc = MINGAIN;  

unsigned int processingLoad = BASELOAD;  /* processing routine load value */

/*****************余弦函数*****************/

int o=2;

int dacdata[Nx]; 

float _cosx[Nx];

/*****************方波函数*********/

double squ[Nx];

int dacdata2[Nx];

int outbuffer[Nx];

int amp=100;

unsigned int t=0;

/*****************锯齿波*****************/

double z=0;

double dt;

unsigned int p=0;

double saw[Nx];

int dacdata4[Nx],outbuffer3[Nx];

/*****************三角波函数*****************/

double tri[Nx];

int dacdata3[Nx],outbuffer2[Nx];

int amp2=2;

double T=0, DT;

unsigned int I=0;

// 定义McBSP的句柄

MCBSP_Handle hMcbsp;

        

/*------------------------------------------------------------------------------------*/

//

// FUNCTION: MAIN

//

/*------------------------------------------------------------------------------------*/

                 

void main(void)

{

 

    Uint16  i=0,k=0;

 float input0=0,x1;

 float a,b,c,d,e,f,g,h,ii,step;//step为角度步长 

 step=360.0/Nx;                // Nx为360度内取样点数

 /*****************正弦函数*****************/

 

for(i=0;i<=Nx-1;i++)

  {

    float angle,xx;

    angle=input0+step*i;

    x1=3.1415926*angle/180; //将角度转为弧度

     xx=x1*x1;

   a=1-xx/16/17;b=1-xx/14/15*a;c=1-xx/12/13*b;d=1-xx/10/11*c;e=1-xx/8/9*d;f=1-xx/6/7*e;g=1-xx/4/5*f;h=1-xx/2/3*g;ii=x1*h;

  //ii=x1*(1-xx/2/3*(1-xx/4/5*(1-xx/6/7*(1-xx/8/9*(1-xx/10/11*(1-xx/12/13*(1-xx/14/15*(1-xx/16/17))))))));//数学总公式

  // fprintf(stdout,"COMPUTE%f",ii); fprintf(stdout,"\n  ");   //输出计算的正弦波的数值,x2=e

   output1[i]= 32767*ii; //利用泰勒级数计算出正弦波的数值,存放到output1中

   output[i]=output1[i]/32;

// Initialize CSL library - This is REQUIRED !!!

    CSL_init();

// The main frequency of system is 240MHz

// 该频率是为了设置IIC模块的需要设置的,为了使用I2C_setup函数

    PLL_setFreq(1, 0xC, 0, 1, 3, 3, 0);

    //EMIF初始化

     Emif_Config();

 

// Open McBSP port 1 and get a McBSP type handle

       hMcbsp = MCBSP_open(MCBSP_PORT1,MCBSP_OPEN_RESET);

// Config McBSP     port 1 by use previously defined structure

       Mcbsp_Config(hMcbsp);

      

//I2C初始化

       I2C_cofig(); 

   

//CODEC寄存器初始化

       inti_AIC();

                    

/*------------------------------------------------------------------------------------*/                           

// Receive the ADC output data of CODEC 

// Then output the received data to DAC of CODEC

/*------------------------------------------------------------------------------------*/

while(1)

       {

              while(!MCBSP_xrdy(hMcbsp)) {};

                     MCBSP_write16(hMcbsp,  dacdata4[k]*gain+abc);           //左声道输出

              while(!MCBSP_xrdy(hMcbsp)) {};

                     MCBSP_write16(hMcbsp, dacdata4[k]*gain+abc);              //右声道输出

              k=k+1+frequency; //正弦波每周期的样点为360个,输出信号的频率为Fs/N=320##/360=88.89Hz

//            k=k+10;      //正弦波每周期的样点为36个,输出信号的频率为Fs/N=320##/36=888.9Hz

              if (k>=Nx) k=k%Nx;

    }

}

   }

GEL文件:

Amp.gel:

menuitem   "Signal Gain"

slider gain(0,1000,1,1,gainparameter)

{

       Amp=gainparameter;

}

Fre.gel:

menuitem   "Signal Frequency"

slider fre(40,1000,1,1,freparameter)

{

       Fre=freparameter;

}

       硬件仿真结果:

添加GEL程序进行变量的滑块控制

此时设定输出幅度为572V,示波器测得电压为570V,输出频率为129Hz。经测试仪测试为516Hz,基本正确。

设计程序输出频率范围为40—1000Hz。

设计程序输出幅度范围为0-1000V。

2.泰勒级数法实现余弦波

程序代码:

#include <math.h>

#include <stdio.h>

#include <csl.h>

#include <csl_chip.h>

#include <csl_i2c.h>

#include <csl_pll.h>

#include <csl_mcbsp.h>

#include <csl_emif.h>

#include <csl_emifBhal.h>

#include <stdio.h>

//#include "E2PROM_Function.h"

#include "CODEC.h"

#define K 0                            //直流分量

#pragma DATA_SECTION(output1,"data_out1");    //存放cos数据,浮点型

float output1[1000];

#pragma DATA_SECTION(output,"data_out");    //存放cos数据,定点型

int output[1000];

volatile int Fre;              //余弦波每周期的样点为Nx个,输出信号的频率为Fs/Nx=320##/Nx

volatile int gain;            //余弦波幅度范围定义为0-1000V    

#undef  CODEC_ADDR

#define CODEC_ADDR 0x1A

// 定义McBSP的句柄

MCBSP_Handle hMcbsp;

        

/*------------------------------------------------------------------------------------*/

//

// FUNCTION: MAIN

//

/*------------------------------------------------------------------------------------*/

                 

void main(void)

{

 

    Uint16  i=0,k=0;

       int Nx=(int)320##/Fre;       //将输入的频率值转变为Nx值

      int amp=(int)gain/3.14;

      float input0=0,x1,x2;

      float a,b,c,d,e,f,g,h,ii,step;   //step为角度步长 

      step=360.0/Nx;                // Nx为360度内取样点数

  /*****************余弦函数*****************/

  

    _cosx[0]=1.000;

     dacdata[0]=200;

    _cosx[1]=_COSX;

      

     dacdata[1]=_COSX*100+100;

     while(1)

    {

      if(o++>Nx-1)

       break;

     _cosx[o]=2*_COSX*_cosx[o-1]-_cosx[o-2];

      dacdata[o]=_cosx[o]*100+100;

        

    }

                                  

}

// Initialize CSL library - This is REQUIRED !!!

    CSL_init();

// The main frequency of system is 240MHz

// 该频率是为了设置IIC模块的需要设置的,为了使用I2C_setup函数

    PLL_setFreq(1, 0xC, 0, 1, 3, 3, 0);

    //EMIF初始化

     Emif_Config();

 

// Open McBSP port 1 and get a McBSP type handle

       hMcbsp = MCBSP_open(MCBSP_PORT1,MCBSP_OPEN_RESET);

// Config McBSP     port 1 by use previously defined structure

       Mcbsp_Config(hMcbsp);

      

//I2C初始化

       I2C_cofig();

   

//CODEC寄存器初始化

       inti_AIC();

                    

       while(1)

       {

                     while(!MCBSP_xrdy(hMcbsp)) {};

                     MCBSP_write16(hMcbsp,  dacdata[k]*gain+abc);             //左声道输出

              while(!MCBSP_xrdy(hMcbsp)) {};

                     MCBSP_write16(hMcbsp, dacdata[k]*gain+abc);         //右声道输出

              k=k+1+frequency;

              if (k>=Nx) k=k%Nx;

       }

      

}

GEL文件:

ampcos.gel:

menuitem   "Signal Gain"

slider gain4(0,1000,1,1,gainparameter)

{

       gain=gainparameter;

}

Frecos.gel:

menuitem   "Signal Frequency"

slider fre4(40,1000,1,1,freparameter)

{

       Fre=freparameter;

}

硬件仿真结果:

添加GEL程序进行变量的滑块控制

此时设定输出幅度为355V,示波器测得电压为355V,输出频率为458Hz。经测试仪测试为473Hz,基本正确。

设计程序输出频率范围为40—1000Hz。

设计程序输出幅度范围为0-1000V。

3.三角波

程序代码:

#include <math.h>

#include <stdio.h>

#include <csl.h>

#include <csl_chip.h>

#include <csl_i2c.h>

#include <csl_pll.h>

#include <csl_mcbsp.h>

#include <csl_emif.h>

#include <csl_emifBhal.h>

#include <stdio.h>

#include "CODEC.h"

#define   pi    3.1415927

#define   pi2   2*pi

#undef  CODEC_ADDR

#define CODEC_ADDR 0x1A

volatile int Fre;              //三角波每周期的样点为Nx个,输出信号的频率为Fs/Nx=32000*2/Nx

volatile int Amp;           //三角波幅度范围定义为0-1000V

double tri[2000];            //存放三角波数据

int outbuffer[2000];      //存放输出数据

double T=0, DT;                    //中间控制变量

unsigned int I=0;

// 定义McBSP的句柄

MCBSP_Handle hMcbsp;

       

/*------------------------------------------------------------------------------------*/

//

// FUNCTION: MAIN

//

/*------------------------------------------------------------------------------------*/

                 

void main(void)

{

   

    Uint16 i=0,k=0;

      int Nx=(int)(64000/Fre);     //将输入的频率值转变为Nx值

       int amp3=(int)(Amp/8.09);

       /*****************三角波函数*****************/

   DT=8*pi*F0/Fs;

    for(T=0,I=0;I<=Nx/4;I++,T+=DT)

     {tri[Nx/2-I]=tri[I]=T;

     }

    for(T=0,I=Nx/2;I<=3*Nx/4;I++,T+=DT)

     {

      tri[I]=T;

      tri[Nx-I+Nx/2]=tri[I];

  

     }

    for(I=0;I<=Nx;I++)

     {   dacdata3[I]=tri[I]*10;

         outbuffer2[I]=amp2*dacdata3[I];

     }

// Initialize CSL library - This is REQUIRED !!!

    CSL_init();

// The main frequency of system is 240MHz

    PLL_setFreq(1, 0xC, 0, 1, 3, 3, 0);

    //EMIF初始化

     Emif_Config();

 

// Open McBSP port 1 and get a McBSP type handle

       hMcbsp = MCBSP_open(MCBSP_PORT1,MCBSP_OPEN_RESET);

// Config McBSP     port 1 by use previously defined structure

       Mcbsp_Config(hMcbsp);

      

//I2C初始化

       I2C_cofig();

   

//CODEC寄存器初始化

       inti_AIC();

                    

       while(1)

       {

              while(!MCBSP_xrdy(hMcbsp)) {};

                     MCBSP_write16(hMcbsp, outbuffer2[k]);         //左声道输出

              while(!MCBSP_xrdy(hMcbsp)) {};

                     MCBSP_write16(hMcbsp, outbuffer2[k]);         //右声道输出

              k=k+1+frequency;

              if (k>=Nx) k=k%Nx;

}

}

GEL文件:

amptri.gel:

menuitem   "Signal Gain"

slider amp3(0,1000,1,1,gainparameter)

{

       Amp=gainparameter;

}

Fretri.gel:

menuitem   "Signal Frequency"

slider fre4(40,1000,1,1,freparameter)

{

       Fre=freparameter;

}

硬件仿真结果:

添加GEL程序进行变量的滑块控制:

此时设定输出幅度为589V,示波器测得电压为582V,输出频率为334Hz。经测试仪测试为344Hz,基本正确。

设计程序输出频率范围为40—1000Hz。

设计程序输出幅度范围为0-1000V。

4.矩形波

程序代码:

#include <math.h>

#include <stdio.h>

#include <csl.h>

#include <csl_chip.h>

#include <csl_i2c.h>

#include <csl_pll.h>

#include <csl_mcbsp.h>

#include <csl_emif.h>

#include <csl_emifBhal.h>

#include <stdio.h>

#include "CODEC.h"

#undef  CODEC_ADDR

#define CODEC_ADDR 0x1A

double squ[2000];          //存放矩形波数据

int dacdata[2000]; 

int outbuffer[2000];      //输出缓存

unsigned int t=0;

volatile int Fre;                     //方波每周期的样点为Nx个,输出信号的频率为Fs*2/Nx=32000*2/Nx

volatile int Amp;                  //方波幅度范围定义为0-1000V

// 定义McBSP的句柄

MCBSP_Handle hMcbsp;

                 

void main(void)

{

 

    Uint16  i=0,k=0;

      int Nx=(int)(64000/Fre);     //将输入的频率值转变为Nx值

       int amp2=(int)(Amp/2.227); 

   /*****************方波函数*********/             

    for(t=0;t<=Nx/4;t++)

    {

     squ[t]=1;

     squ[t+Nx/4]=-1;

     squ[t+Nx/2]=1;

     squ[Nx-t]=-1;

    }

    for(t=0;t<Nx;t++)

    {  

     dacdata2[t]=squ[t];

     outbuffer[t]=amp*dacdata2[t];

    }

// CSL初始化

    CSL_init();

// The main frequency of system is 240MHz

    PLL_setFreq(1, 0xC, 0, 1, 3, 3, 0);

    //EMIF初始化

     Emif_Config();

 

// 打开 McBSP 1 接口

       hMcbsp = MCBSP_open(MCBSP_PORT1,MCBSP_OPEN_RESET);

// 定义McBSP接口 1

       Mcbsp_Config(hMcbsp);

      

//I2C初始化

       I2C_cofig();

   

//CODEC寄存器初始化

       inti_AIC();

                    

       while(1)

       {

              while(!MCBSP_xrdy(hMcbsp)) {};

                     MCBSP_write16(hMcbsp, dacdata2[k]);            //左声道输出

              while(!MCBSP_xrdy(hMcbsp)) {};

                     MCBSP_write16(hMcbsp, dacdata2[k]);            //右声道输出

              k=k+1;

              if (k>=Nx) k=k%Nx;

      

}

}

GEL文件:

Ampsqr.gel:

menuitem   "Signal Gain"

slider amp2(0,1000,1,1,gainparameter)

{

       Amp=gainparameter;

}

Fresqr.gel:

menuitem   "Signal Frequency"

slider fre4(40,1000,1,1,freparameter)

{

       Fre=freparameter;

}

硬件仿真结果:

添加GEL程序进行变量的滑块控制:

此时设定输出幅度为492V,示波器测得电压为490V,输出频率为311Hz。经测试仪测试为322Hz,基本正确。

设计程序输出频率范围为40—1000Hz。

设计程序输出幅度范围为0-1000V。

5.锯齿波

程序代码:

#include <math.h>

#include <stdio.h>

#include <csl.h>

#include <csl_chip.h>

#include <csl_i2c.h>

#include <csl_pll.h>

#include <csl_mcbsp.h>

#include <csl_emif.h>

#include <csl_emifBhal.h>

#include <stdio.h>

#include "CODEC.h"

#define   pi    3.1415927

#define   pi2   2*pi

#undef  CODEC_ADDR

#define CODEC_ADDR 0x1A

double z=0;                            //中间控制变量

double dt;

unsigned int p=0;

double saw[2000];         //存放锯齿波数据

int outbuffer[2000];      //输出缓存

volatile int Fre;              //锯齿波每周期的样点为Nx个,输出信号的频率为Fs*4/Nx=32000*4/Nx

volatile int Amp;           //锯齿波幅度范围定义为0-1000V

// 定义McBSP的句柄

MCBSP_Handle hMcbsp;

                 

void main(void)

{

 

    Uint16  i=0,k=0;

       int pp=(int)(Fre/4);

      int Nx=(int)(320##/pp);       //将输入的频率值转变为Nx值

       int amp1=(int)(Amp/8.04); 

     /*****************锯齿波*****************/

    dt=8*pi*F0/Fs;

     for(z=0,p=0;p<=Nx/4;p++,z+=dt)

    {

     saw[p]=z;

     saw[p+Nx/4]=saw[p];

    }

    for(z=0,p=Nx/2;p<=3*Nx/4;p++,z+=dt)

    {

     saw[p]=z;

     saw[p+Nx/4]=saw[p];

  

    }

    for(p=0;p<Nx;p++)

    { 

              dacdata4[p]=(saw[p]-45*pi)*10;

     

    }

 

// CSL初始化

    CSL_init();

// The main frequency of system is 240MHz

    PLL_setFreq(1, 0xC, 0, 1, 3, 3, 0);

    //EMIF初始化

     Emif_Config();

 

// 打开 McBSP 1 接口

       hMcbsp = MCBSP_open(MCBSP_PORT1,MCBSP_OPEN_RESET);

// 配置 McBSP 1 接口

       Mcbsp_Config(hMcbsp);

      

//I2C初始化

       I2C_cofig();

   

//CODEC寄存器初始化

       inti_AIC();

                    

       while(1)

       {

              while(!MCBSP_xrdy(hMcbsp)) {};

                     MCBSP_write16(hMcbsp, dacdata[k]);              //左声道输出

              while(!MCBSP_xrdy(hMcbsp)) {};

                     MCBSP_write16(hMcbsp, dacdata[k]);              //右声道输出

              k=k+1;

              if (k>=Nx) k=k%Nx;

}

}

GEL文件:

Ampsaw.gel:

menuitem   "Signal Gain"

slider amp1(0,1000,1,1,gainparameter)

{

       Amp=gainparameter;

}

Fresaw.gel:

menuitem   "Signal Frequency"

slider fre4(100,4000,1,1,freparameter)

{

       Fre=freparameter;

}

硬件仿真结果:

添加GEL程序进行变量的滑块控制:

此时设定输出幅度为452V,示波器测得电压为446V,输出频率为1421Hz。经测试仪测试为1421Hz,基本正确。

设计程序输出频率范围为100—4000Hz。

设计程序输出幅度范围为0-1000V。

六. 实验总结

本次DSP试验让我们基于DSP板来实现信号处理方面的相关要求。我们首先做的是把老师的课件复习一遍,重温了一遍老师课上讲过的知识点和相关仪器的使用方法,熟悉了使用流程之后才开始进行相关的编程。

    在本次DSP课程设计中,我们对DSP芯片有了一些基本了解,掌握了CCS开发环境的基本使用方法。因为之前选修过C语言和DSP图像处理课程,所以对一些基本的程序编写还有软件操作还是比较熟悉的。

 我们选择的是波形发生器,首先我们参考了书本上的大概流程和思路,确定了大概的框架,然后具体用C语言编程序的时候参考了课本上的一些源程序,首先产生的正弦波就有几种方法,查表法就是先把正弦波相关的256个参数点存储起来,然后再调用出来,即可通过DSP板经过D/A转换将正弦波显示出来;还有泰勒级数法,计算法等相关方法,我们按照要求使用了计算法来实现相关的要求。编出来的程序其实核心也就是那么几十行,其他的很多都是固定套路,相关的定义和循环占了很大一部分,写出来程序容易但是真正去用板子调试的时候却并不是那么简单,有一些编译上的错误需要找一段时间才能发现并且改正,还有用CCS软件显示出的波形与模拟示波器上的波形并不一致,很多情况情况是一个图形显示出来效果很好,但是另一个图形却效果不理想,目前还不知道这其中是有怎样的联系,另一个就是实验基本部分要求实现波形的频率和幅度可调,我们用相关的式子定义了相关的参变量来调节上述两个参量,基本上达到了要求,但是其中的深层次原理并不是非常清楚,修改频率的同时可能也会改变波形的幅度,经过分析是因为dt不变,但是一个周期内的抽样点数却变了,所以变化的幅度就会有相应的增加或减少,解决这个问题的思路应该是找好N与f0的关系,对于这个问题由于时间原因我们并没有做进一步的研究。

    总的来说,我们基本实现了实验要求的内容,部分拓展内容也有了相关结果,这次试验给了我很多的启发,不管怎样最后做出来了还是很高兴。

这次DSP课程设计,要求我们使用DSP产生任意信号波形,包括三角波,锯齿波,矩形波等。在电路板上我们有时会做一些模拟的信号发生器,能够产生我们所需的信号波形,这一次要求用DSP产生任意信号波形,其实是一种数字方法的信号发生器。相比较而言,用DSP这种数字的方法产生多波形信号实则是利用了高速的运算能力来进行的,更加简单快捷。只不过同时需要用到D/A转换器。

利用DSP和D/A转换器可以产生连续的三角波,锯齿波和矩形波等各种信号波形。产生连续波形的方法一般有两种,查表法和计算法。查表法和计算法从字面上就很好理解,查表法是将需要输出的数据存储在DSP中然后依次输出,计算法则是以此计算数据后输出然后再计算再输出。由此可见,查表法速度快但需要占据存储空间而计算法反之。由于实验要求使用计算法于是选择计算法。此外,抽样点再送到D/A转换器之前要乘以32767,变为Q15的数据格式,以供D/A转换器进行数模转换处理。

上述是我们在开始之初的设计思路,随后就进入了编写程序,编译调试的阶段。新建工程项目,将事先编写好的程序放置在项目文件夹中并添加进去,随后进行编译链接,装载运行。由于我们还加入了GEL文件因此产生了两个小浮窗,可以调节频率和幅度。同时使用虚拟示波器对产生的信号波形进行观察。在编译调试阶段最不可缺少的就是细心和耐心!

这次课程设计让我收获良多。

七. 参考文献

[1]高海林、钱满义.DSP技术及其应用讲义.20##年10月

[2] TMS320C54x DSP CPU and Peripherals. Texas Instrument Inc,2001.

[3] TMS320C54x DSP Applications and Guide. Texas Instrument Inc,2001.

更多相关推荐:
信号发生器实验报告(波形发生器实验报告)

信号发生器一实验目的1掌握集成运算放大器的使用方法加深对集成运算放大器工作原理的理解2掌握用运算放大器构成波形发生器的设计方法3掌握波形发生器电路调试和制作方法二设计任务设计并制作一个波形发生电路可以同时输出正...

波形发生器设计实验报告

波形发生器设计实验报告一设计目的掌握用99SE软件制作集成放大器构成方波三角波函数发生器的设计方法二设计原理波形发生器函数信号发生器是指产生所需参数的电测试信号的仪器按信号波形可分为正弦信号函波形信号脉冲信号和...

简易波形发生器课程设计报告

课程设计报告设计题目简易波形发生器学院理学院专业班级08电子信息科学与技术1班学号20xx31120xx220xx31120xx220xx31120xx1姓名陈建泽纪婧如蔡国英电子邮件811781675qqco...

多种波形发生器设计报告

石家庄经济学院信息工程学院电子信息工程与通信工程专业电子技术课程设计报告题目多种波形发生器姓名朱慧娟学号班级指导教师曹海燕20xx年7月4日课程设计任务书课程设计报告课程设计验收要求1指导教师按照课程设计大纲要...

Verilog期末实验报告—波形发生器

深圳大学实验报告课程名称:Verilog使用及其应用实验名称:频率可变的任意波形发生器学院:电子科学与技术学院专业:电子科学与技术班级:2组号:指导教师:##报告人:##学号:##实验地点科技楼B115一、实验…

(波形发生器) 单片机课程设计报告

单片机原理及系统课程设计专业自动控制班级姓名学号指导教师兰州交通大学自动化与电气工程学院年月日单片机原理及系统课程设计报告波形发生器1引言本系统是基于STC89C51单片机的波形发生器采用STC89C51单片机...

波形发生器设计实验报告

一实验目的1熟悉555型集成时基电路结构工作原理及其特点2掌握555型集成时基电路的基本应用3掌握由555集成型时基电路组成的占空比可调的方波信号发生器二实验基本原理555电路的工作原理555集成电路开始是作定...

单片机波形发生器实习报告(优秀)

CHANGCHUNINSTITUTEOFTECHNOLOGY基于单片机双通道的多波形发生器DoubleChannelWaveformGeneratorBasedOnMicrocontroller设计题目基于单片...

方波-三角波-正弦波函数发生器设计课程设计报告

模拟电子技术课程设计课题名称方波三角波正弦波函数发生器专业班级姓名学号指导教师1目录摘要31函数发生器总方案及原理框图411函数发生器的总方案412函数发生器总方案及原理框图42课程设计的目的和设计的任务521...

方波发生电路实验报告

东南大学电工电子实验中心实验报告课程名称:电工电子实验实验名称:波形发生分解与合成实验时间:20XX年8月24日一、实验内容要求基本要求:1.设计一个方波发生器,要求其频率为1kHz,幅度为5V;2.设计合适的…

方波发生器实验报告

方波发生器及其调制一实验内容设计一方波信号发生器采用ROM进行一个周期数据存储并通过地址发生器产生方波信号并通过控制端输入a对方波信号进行调幅和调频ROM4位地址16位数据二实验原理方波信号发生器是由地址发生器...

方波—三角波发生器设计报告

电子工程学院课外学分设计报告题目方波三角波函数发生器姓名学号专业通信工程实验室开放实验室班级A1011设计时间20xx年月日年月日评定成绩审阅教师陈燕芳目录21设计目的222设计任务223课程设计的要求及技术指...

波形发生器实验报告(31篇)