ImageVerifierCode 换一换
格式:DOCX , 页数:26 ,大小:142.32KB ,
资源ID:30486262      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/30486262.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(西电DSP大作业 3.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

西电DSP大作业 3.docx

1、西电DSP大作业 3实验三一、实验题目:数据采集和谱分析二、实验目的:理解离散傅立叶变化的原理,掌握DFT的快速算法,同时了解连续信号的采样后的频谱,加深对数字信号处理理论的理解。三、实验设备:信号源、EZ-KIT板、微机、示波器等。四、实验内容利用ADSPBF533的评估板的硬件资源,完成对信号的采样与FFT变换输出。1)利用plot功能,在程序中设置断点,观察各种波形的采样数据、输出数据的的波形;2)按照实验步骤完成实验,连续运行程序,观察示波器的波形,说明它们的差别。3)在实验报告中记录方波和三角波的采样数据和FFT结果数据,描绘其波形。并利用数字信号处理课程所学知识分析结果。五、实验原

2、理离散傅里叶变换(DFT),是傅里叶变换在时域和频域上都呈现离散的形式,将时域信号的采样变换为在离散时间傅里叶变换(DTFT)频域的采样。在实际应用中通常采用快速傅里叶变换以高效计算DFT。六、实验步骤1)连接硬件断开所有电源,参考实验二连接好信号源、EZ-KIT板、微机、示波器等并检查EZ-KIT板上的跳线状态是否正确,按照硬件连接图检查确保正确连接各个硬件设备。下图为EZ-KIT板上信号的输入,输出通道定义,本次实验均使用的是Channel_1通道。2)加电和启动程序检查无误后,分别打开PC机、信号源、评估板和示波器的电源,启动VisualDSP+,新建一个工程,工程名称自定义,正确设置工

3、程的各个选项,将源程序加入到工程中。3) 选择或者建立正确的会话类型按照要求选择或者建立EZ-KIT类型的会话,详细要求请参阅之前实验的有关内容。4)编译链接运行程序编译链接该工程。在程序中恰当位置设置断点(如main函数中的“optr = OutputBuffer;”程序行前),利用VisualDSP+软件的Plot功能,分别绘制ADC数据数组tempdata 和 频谱数组数据Magnitude的数值。4) 改变信号再观察调节信号发生器,利用示波器监视其输出幅度为0.51Vpp,频率为14kHZ。分别产生正弦波、方波和三角波,观察并记录示波器上的输出结果,或者利用VisualDSP+的Plo

4、t功能进行记录。七、主要源代码1、程序结构:程序包括主函数main()、Process_data()、Initialize()和ISR()等4个模块,以及常数和宏定义、全局变量定义部分。其中main()函数完成程序的控制,Initialize()完成CODEC和BF533个部分的初始化,Process_data ()完成数据采集和计算,ISR()实现中断控制。2、程序工作流程:main()首先调用init_codec(),将CODEC和BF533进行初始化,然后调用中断函数ISR(),程序进入数据采集,通过CODEC的A/D采集数据,采集完256点数据后,转入数据处理,并且将处理结果送回COD

5、EC,通过它的D/A转换成模拟信号。连续运行时,程序处于数据采集数据处理等待数据采集(256点)的无限循环中,直到被用户干预停止。3、数据采集和处理模式的切换:程序设置了全局整形变量Ready2FFT标志当前工作状态。若Ready2FFT=0时,工作在数据采集模式,此模式下中断程序每触发一次,程序从外部的SPORT_RX送一个数据到BF533内部缓冲区InbufLeft和InbufRight,当采集到256个数据后,子程序Process_data()会自动设置Ready2FFT=1,即进入数据处理阶段。数据处理结束后,重新进入数据采集阶段开始新的循环。4、数据处理方法:当Ready2FFT=1

6、时,程序把采集到的整形数据转化为浮点数据,然后将得到的浮点数据与窗函数进行相乘运算,经过这样预处理后的数据再转换为16位小数型数据,通过调用系统函数rfftrad4_fr16 ()进行傅里叶变换,再求模值,然后对模值进行适当的处理,最后得到的浮点结果转化为整形数据,输出到示波器。程序中用到的几个主要数据变量的用途说明如下: int window ; /选择窗函数的形式。0:矩形窗;1:汉明窗。 int Counter0; / 采集到的数据样本数计数器 int OutputMum; /发送数据到DAC的索引计数器 int tempdataFFT_NUM; / 存放采样数据,可用plot功能描绘

7、fract16 outputFFT_NUM; / 存放FFT变换后得到的数据 float MagnitudeFFT_NUM; /存放FFT变换后得到的频谱幅度 int OutputBufferFFT_NUM; /存放输出频谱数据实验三使用的源程序位于子目录test3FFT目录下,打开工程文件FFT.DPJ,可以看到程序由以下几个模块构成:1)talkthough.h#ifndef _Talkthrough_DEFINED #define _Talkthrough_DEFINED/-/ Header files /-/#include #include /-/ Symbolic constant

8、s /-/ addresses for Port B in Flash A#define pFlashA_PortA_Dir (volatile unsigned char *)0x20270006#define pFlashA_PortA_Data (volatile unsigned char *)0x20270004/ names for codec registers, used for sCodec1836TxRegs#define DAC_CONTROL_1 0x0000#define DAC_CONTROL_2 0x1000#define DAC_VOLUME_0 0x2000#

9、define DAC_VOLUME_1 0x3000#define DAC_VOLUME_2 0x4000#define DAC_VOLUME_3 0x5000#define DAC_VOLUME_4 0x6000#define DAC_VOLUME_5 0x7000#define ADC_0_PEAK_LEVEL 0x8000#define ADC_1_PEAK_LEVEL 0x9000#define ADC_2_PEAK_LEVEL 0xA000#define ADC_3_PEAK_LEVEL 0xB000#define ADC_CONTROL_1 0xC000#define ADC_CO

10、NTROL_2 0xD000#define ADC_CONTROL_3 0xE000/ names for slots in ad1836 audio frame#define INTERNAL_ADC_L0 0#define INTERNAL_ADC_R0 2#define INTERNAL_DAC_L0 0#define INTERNAL_DAC_R0 2#define INTERNAL_ADC_L1 1#define INTERNAL_ADC_R1 3#define INTERNAL_DAC_L1 1#define INTERNAL_DAC_R1 3/ size of array sCo

11、dec1836TxRegs#define CODEC_1836_REGS_LENGTH 11/ SPI transfer mode#define TIMOD_DMA_TX 0x0003/ SPORT0 word length#define SLEN_24 0x0017/ DMA flow mode#define FLOW_1 0x1000/#define FFT_NUM 256/-/ Global variables /-/extern int iChannel0LeftIn;extern int iChannel0RightIn;extern int iChannel0LeftOut;ext

12、ern int iChannel0RightOut;extern int iChannel1LeftIn;extern int iChannel1RightIn;extern int iChannel1LeftOut;extern int iChannel1RightOut;extern volatile short sCodec1836TxRegs;extern volatile int iRxBuffer1;extern volatile int iTxBuffer1;extern int Counter;extern int OutputMum;extern int Window;ext

13、ern int ReadyFFT;extern float Win;extern int InbufLeft;extern int Outputbuf;/-/ Prototypes /-/ in file Initialize.cvoid Init_EBIU(void);void Init_Flash(void);void Init1836(void);void Init_Sport0(void);void Init_DMA(void);void Init_Interrupts(void);void Init_ProcessData(void);void Init_Windows(void);

14、void Enable_DMA_Sport(void);/ in file Process_data.cvoid Process_Data(void);/ in file ISRs.cEX_INTERRUPT_HANDLER(Sport0_RX_ISR);#endif /_Talkthrough_DEFINED2)main.c/-/ Name: Talkthrough for the ADSP-BF533 EZ-KIT Lite /-/ (C) Copyright 2003 - Analog Devices, Inc. All rights reserved. / Project Name:

15、BF533 C Talkthrough I2S / Date Modified: 04/03/03 HD Rev 1.0 / Software: VisualDSP+3.1 / Hardware: ADSP-BF533 EZ-KIT Board / Connections: Connect RSCLK0 to TSCLK0 together (Turn SW9 pin 6 on) / Connect RFS0 to TFS0 together (Turn SW9 pin 5 ON) / / Connect an input source (such as a radio) to the Aud

16、io / input jack and an output source (such as headphones) to / the Audio output jack / Purpose: This program sets up the SPI port on the ADSP-BF533 to / configure the AD1836 codec. The SPI port is disabled / after initialization. The data to/from the codec are / transfered over SPORT0 in I2S mode /-

17、/#include Talkthrough.h#include sysreg.h#include ccblkfn.h#include #include #include #include complex_fract16 tFFT_NUM; /temp workingcomplex_fract16 OutbufFFT_NUM;complex_fract16 wFFT_NUM; /twiddle sequencefract16 InputFFT_NUM;int InbufLeftFFT_NUM;int Window;/窗函数状态标志:0-矩形窗,1-汉明窗float MagnitudeFFT_NU

18、M;/输出频谱的幅度int tempdataFFT_NUM;int ReadyFFT;int OutputbufFFT_NUM;/-/ Variables / Description: The variables iChannelxLeftIn and iChannelxRightIn contain / the data coming from the codec AD1836. The (processed) / playback data are written into the variables / iChannelxLeftOut and iChannelxRightOut res

19、pectively, which / are then sent back to the codec in the SPORT0 ISR. / The values in the array iCodec1836TxRegs can be modified to / set up the codec in different configurations according to / the AD1885 data sheet. /-/ left input data from ad1836int iChannel0LeftIn, iChannel1LeftIn;/ right input d

20、ata from ad1836int iChannel0RightIn, iChannel1RightIn;/ left ouput data for ad1836 int iChannel0LeftOut, iChannel1LeftOut;/ right ouput data for ad1836int iChannel0RightOut, iChannel1RightOut;/ array for registers to configure the ad1836/ names are defined in Talkthrough.hvolatile short sCodec1836Tx

21、RegsCODEC_1836_REGS_LENGTH = DAC_CONTROL_1 | 0x000, DAC_CONTROL_2 | 0x000, DAC_VOLUME_0 | 0x3ff, DAC_VOLUME_1 | 0x3ff, DAC_VOLUME_2 | 0x3ff, DAC_VOLUME_3 | 0x3ff, DAC_VOLUME_4 | 0x000, DAC_VOLUME_5 | 0x000, ADC_CONTROL_1 | 0x000, ADC_CONTROL_2 | 0x000, ADC_CONTROL_3 | 0x000 ;/ SPORT0 DMA transmit bu

22、ffervolatile int iTxBuffer14;/ SPORT0 DMA receive buffervolatile int iRxBuffer14;/-/ Function: main / Description: After calling a few initalization routines, main() just / waits in a loop forever. The code to process the incoming / data can be placed in the function Process_Data() in the / file Pro

23、cess_Data.c. /-/void main(void) Window=1; sysreg_write(reg_SYSCFG, 0x32); /Initialize System Configuration Register Init_EBIU(); Init_Flash(); Init1836(); Init_ProcessData(); Init_Windows(); Init_Sport0(); Init_DMA(); Init_Interrupts(); Enable_DMA_Sport0(); while(1) if(ReadyFFT=1) int i; /* counter

24、variable */ int wst = 1; int n = FFT_NUM; int *optr; float *fptr; float MinNum,MaxNum,AvgNum,NumRange; int block_exponent = 8; int scale_method = 2; int offset; float scale_value; twidfft_fr16(w, FFT_NUM); for (i=0;i16)*Wini); Inputi=tempdatai; offset = 50; scale_value = 25.0; /* do FFT.*/ rfftrad4_

25、fr16(Input, t, Outbuf, w, wst, n, block_exponent, scale_method); for(i=0;iFFT_NUM;i+) Magnitudei=sqrt(float)Outbufi.re*(float)Outbufi.re+(float)Outbufi.im*(float)Outbufi.im); /对结果进行对数量化/ for(i=0;iFFT_NUM;i+)/计算频谱的幅度的对数值 Magnitudei=20*log10(Magnitudei+1); MinNum = 32767;MaxNum = -32768;/量化为D/A格式 AvgNum = 0; fptr = &Magnitude0; for( i=0 ; i

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1