北邮信号与信息处理DSP实验二Word格式.docx
- 文档编号:21030365
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:17
- 大小:666.46KB
北邮信号与信息处理DSP实验二Word格式.docx
《北邮信号与信息处理DSP实验二Word格式.docx》由会员分享,可在线阅读,更多相关《北邮信号与信息处理DSP实验二Word格式.docx(17页珍藏版)》请在冰豆网上搜索。
通过给定的旋转因子,利用DSP_fft(w,N,x,y)函数,对给定64点序列进行FFT变换,其中N为变换点数,具体说明如下:
(1)w[64]为64点FFT的旋转因子,由tw_fft16x16.exe生成;
(2)x[128]内存放原序列,即输入时域信号的实部虚部按顺序排列;
(3)y[128]内存放FFT变换后的序列,实部虚部按顺序排列;
(4)m[64]内存放FFT变换后64点模值的平方。
3.2IFFT变换
利用FFT变换的相关性质,对FFT变换后的序列进行IFFT反变换,并将IFFT后结果存入x2[128]序列中。
3.3SDRAM内数据读写
实现指定序列的读写功能,具体说明如下:
(1)x[128],y[128]写入SDRAM,以备后续使用;
(2)从SDRAM内读取x[128],与x2[128]进行比较;
(3)通过DIP按键控制LED灯实现不同灯型的变化。
3.4变换前后数据验证
比对x[128]和x2[128]序列内各数据,若满足误差在允许范围内,则说明原序列与经历FFT和IFFT后得到的序列一致,点亮LED0~2,证明此次实验的正确性。
4.程序基本信息
4
4.1程序模块
(1)FFT模块:
功能:
对给定序列进行64点FFT变换,并将原序列及变换后序列写入SDRAM中;
输入接口:
无;
输出接口:
SDRAM,将原序列及变换后序列内各数据写入SDRAM中,以备后续使用。
(2)IFFT模块:
通过FFT变换相关性质,对变换后的序列进行IFFT反变换;
无。
(3)SDRAM模块:
通过从SDRAM内读出原序列,并与IFFT变换后的是序列进行逐个比较,若误差在一定范围内,则点亮三个LED灯以示正确,否则只有一个LED灯亮;
SDRAM,读出原始序列,以供后续比较使用;
LED灯,判断IFFT后结果是否与原序列一致,如果误差在允许范围内,则LED0~2被点亮,否则LED0被点亮。
4.2代码
1#include"
dsp_fft.h"
2//#include"
dsp_fft16x32.h"
3#include"
math.h"
4#defineN64
5
6//64点FFT的旋转因子,由tw_fft16x16.exe生成
7constshortw[2*N]=
8{
90x0000,0x7FFF,0x0C8B,0x7F61,0x0000,0x7FFF,0x18F8,0x7D89,
100x0000,0x7FFF,0x2527,0x7A7C,0x18F8,0x7D89,0x2527,0x7A7C,
110x30FB,0x7641,0x471C,0x6A6D,0x471C,0x6A6D,0x62F1,0x5133,
120x30FB,0x7641,0x3C56,0x70E2,0x5A82,0x5A82,0x6A6D,0x471C,
130x7641,0x30FB,0x7F61,0x0C8B,0x471C,0x6A6D,0x5133,0x62F1,
140x7641,0x30FB,0x7D89,0x18F8,0x7D89,-0x18F8,0x70E2,-0x3C56,
150x5A82,0x5A82,0x62F1,0x5133,0x7FFF,0x0000,0x7D89,-0x18F8,
160x5A82,-0x5A82,0x3C56,-0x70E2,0x6A6D,0x471C,0x70E2,0x3C56,
170x7641,-0x30FB,0x6A6D,-0x471C,0x18F8,-0x7D89,-0x0C8B,-0x7F61,
180x7641,0x30FB,0x7A7C,0x2527,0x5A82,-0x5A82,0x471C,-0x6A6D,
19-0x30FB,-0x7641,-0x5133,-0x62F1,0x7D89,0x18F8,0x7F61,0x0C8B,
200x30FB,-0x7641,0x18F8,-0x7D89,-0x6A6D,-0x471C,-0x7A7C,-0x2527,
210x0000,0x7FFF,0x30FB,0x7641,0x0000,0x7FFF,0x5A82,0x5A82,
220x0000,0x7FFF,0x7641,0x30FB,0x5A82,0x5A82,0x7641,0x30FB,
230x7FFF,0x0000,0x5A82,-0x5A82,0x5A82,-0x5A82,-0x30FB,-0x7641,
240x0000,0x0000,0x0000,0x7FFF,0x0000,0x7FFF,0x0000,0x7FFF
25
26};
27
28//输入时域信号,i=[0:
63],x=1000*cos(i*pi/32)+1000*cos(i*pi/16)
29//实部虚部顺序排列
30shortx[2*N]=
31{
322000,0,1975,0,1904,0,1788,0,1631,0,1437,0,1214,0,968,0,707,0,439,0,173,0,
33-84,0,-324,0,-541,0,-729,0,-883,0,-1000,0,-1079,0,-1119,0,-1122,0,-1090,0,-1027,0,
34-938,0,-829,0,-707,0,-578,0,-449,0,-326,0,-217,0,-125,0,-57,0,-14,0,0,0,
35-14,0,-57,0,-125,0,-217,0,-326,0,-449,0,-578,0,-707,0,-829,0,-938,0,-1027,0,
36-1090,0,-1122,0,-1119,0,-1079,0,-1000,0,-883,0,-729,0,-541,0,-324,0,-84,0,
37173,0,439,0,707,0,968,0,1214,0,1437,0,1631,0,1788,0,1904,0,1976,0
38};
39
40shortx1[2*N]={0};
41shortx2[2*N]={0};
42
43//存储FFT之后的结果
44shorty[2*N]=
45{
460,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
470,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
480,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
490,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
50};
51
52#include<
stdio.h>
53#include<
csl.h>
54#include<
csl_irq.h>
55#include<
csl_chip.h>
56#include<
csl_emifa.h>
57#include"
dsk6416.h"
58#include"
dsk6416_led.h"
59
60staticEMIFA_ConfigMyEmifaConfig=
61{
62EMIFA_GBLCTL_RMK
63(
64EMIFA_GBLCTL_EK2RATE_FULLCLK,//1XEMIFinputclock
65EMIFA_GBLCTL_EK2HZ_CLK,//eclkout2continueoutputduringhold
66EMIFA_GBLCTL_EK2EN_ENABLE,//eclkout2enableoutput
67EMIFA_GBLCTL_BRMODE_MRSTATUS,//busrequestismemoryaccessorrefreshpending/inprogress
68EMIFA_GBLCTL_NOHOLD_DISABLE,
69EMIFA_GBLCTL_EK1HZ_CLK,//eclkout1continueoutputduringhold
70EMIFA_GBLCTL_EK1EN_ENABLE,//eclkout1enableoutput
71EMIFA_GBLCTL_CLK4EN_ENABLE,//clkout4outputenable
72EMIFA_GBLCTL_CLK6EN_ENABLE//clkout6outputenable
73),
740xffffffd3,//64BITSDRAM
75//0xffffff33,//32BITSDRAM
76//0xffffff93,//16bitSDRAM
77//0xffffff83,//8bitSDRAM
780xffffffe3,
790x22a28a22,
800x22a28a22,
81EMIFA_SDCTL_RMK
82(
83EMIFA_SDCTL_SDBSZ_4BANKS,//SDRAMbanksize4banks
84EMIFA_SDCTL_SDRSZ_11ROW,//rownumber=11
85EMIFA_SDCTL_SDCSZ_8COL,//columnnumber=8
86EMIFA_SDCTL_RFEN_ENABLE,//SDRAMrefreshenable
87//EMIFA_SDCTL_INIT_NO,//SDRAM配置完每个CE空间后,不初始化
88EMIFA_SDCTL_INIT_YES,//SDRAM配置完每个CE空间后,初始化
89EMIFA_SDCTL_TRCD_OF
(2),//TRCD=(Trcd/Tcyc)-1
90EMIFA_SDCTL_TRP_OF
(2),//TRP=(Trp/Tcyc)-1,3个
91EMIFA_SDCTL_TRC_OF(8),
92EMIFA_SDCTL_SLFRFR_DISABLE//selfrefreshmodedisable
93),
94EMIFA_SDTIM_RMK
95(
96EMIFA_SDTIM_XRFR_DEFAULT,//EXTTIMERdefault
97EMIFA_SDTIM_PERIOD_OF(2083)//refreshperiod,clockout1=10ns
98),
99EMIFA_SDEXT_RMK
100(
101EMIFA_SDEXT_WR2RD_OF(0),//cyclesbetweenwritetoreadcommand=1,subtract1is0
102EMIFA_SDEXT_WR2DEAC_OF
(1),//cyclesbetweenwritetoprecharge=2
103EMIFA_SDEXT_WR2WR_OF
(1),//cyclesbetweenwritetowrite=2
104EMIFA_SDEXT_R2WDQM_OF
(1),//cyclesbetweenreadtobex=2
105EMIFA_SDEXT_RD2WR_OF(0),//cyclesbetweenreadtowrite=1
106EMIFA_SDEXT_RD2DEAC_OF
(1),//
107EMIFA_SDEXT_RD2RD_OF(0),//
108EMIFA_SDEXT_THZP_OF
(2),//Troh=3cycle
109EMIFA_SDEXT_TWR_OF
(1),//Twr=1clock+6ns
110EMIFA_SDEXT_TRRD_OF(0),//Trrd=12ns
111EMIFA_SDEXT_TRAS_OF(5),//Tras=42ns
112EMIFA_SDEXT_TCL_OF
(1)//caslatency=3clock
113),
1140x00000002,
1150x00000002,
1160x00000002,
1170x00000002
118};
119
120#pragmaDATA_SECTION(sdram_data,"
);
121unsignedintsdram_data[0x400000];
122
123voidmain()
124{
125inti,m[N];
126Uint32good_flag;
127good_flag=0;
128
129DSK6416_init();
130DSK6416_LED_init();
131
132//初始化CSL
133CSL_init();
134
135//配置EMIFA
136EMIFA_config(&
MyEmifaConfig);
137
138for(i=0;
i<
0x400000;
i++)
139{
140sdram_data[i]=0;
141}
142
143//FFT会改变x[i]的值,故先将其存入SDRAM
144printf("
x[i]:
"
145for(i=0;
2*N;
146{
147sdram_data[i]=x[i];
148printf("
%d"
x[i]);
149}
150printf("
\n"
151
152//FFT
153DSP_fft(w,N,x,y);
154
155//FFT结果y[i]的值,存入SDRAM
156printf("
y[i]:
157for(i=0;
158{
159sdram_data[i+2*N]=y[i];
160printf("
y[i]);
161}
162printf("
163
164//FFT结果y[i]的模值平方
165printf("
m[i]:
166for(i=0;
N;
167{
168m[i]=y[2*i]*y[2*i]+y[2*i+1]*y[2*i+1];
169printf("
m[i]);
170}
171printf("
172
173//IFFT将y[i]共轭除以增益系数N(即FFT点数)
174for(i=0;
175{
176
177if(i%2==1)y[i]=-y[i];
178y[i]=y[i]/N;
179}
180
181//IFFT利用FFT进行IFFT
182DSP_fft(w,N,y,x2);
183
184//IFFTFFT会修改y[i]重新把y[i]从SDRAM中读出
185printf("
y[i]fromSDRAM:
186for(i=0;
187{
188y[i]=sdram_data[i+2*N];
189printf("
190}
191printf("
192
193//IFFT将FFT的结果共轭即为IFFT结果
194printf("
x2[i]:
195for(i=0;
196{
197if(i%2==1)x2[i]=-x2[i];
198printf("
x2[i]);
199}
200printf("
201
202//FFT将x[i]的值从SDRAM中读出赋给x1[i]
203printf("
x1[i]:
204for(i=0;
205{
206x1[i]=sdram_data[i];
207printf("
x1[i]);
208}
209printf("
210
211//将IFFT的结果x2[i]与FFT前的数据x1[i]进行比较
212for(i=0;
213{
214if(abs(x2[i]-x1[i])>
10)
215{
216good_flag=0;
217break;
218}
219good_flag=1;
220}
221
222if(good_flag==1)
223{
224DSK6416_LED_on(0);
225DSK6416_LED_on
(1);
226DSK6416_LED_on
(2);
227DSK6416_LED_off(3);
228printf("
IFFTRESULTISOK!
229}
230else
231{
232DSK6416_LED_on(0);
233DSK6416_LED_off
(1);
234DSK6416_LED_off
(2);
235DSK6416_LED_off(3);
236printf("
IFFTRESULTISFAILED!
237}
238
4.3流程图
(1)SDRAM配置流程图
(2)SDRAM配置流程图
5.组内分工
6.功能测试
239
240
6
6.1软件平台
(1)查看变量:
通过View->
Variables可以查看各个变量的值。
(2)图形显示工具:
CCSv5中提供了一个高级图形和图像可视化工具。
它可通过图形形式显示数组,并且可采用多种格式。
查看m序列中的数值,即观测FFT变换后各点模值的平方。
(3)Console控制台显示:
初始序列,即需要进行FFT变换的64点的实部、虚部按序排列;
FFT的结果,即变换后64点的实部、虚部按序排列;
FFT变换所得各点模值平方;
IFFT变换结果,即反变换后64点实部、虚部按序排列;
从SDRAM读出的x[i]原始序列;
结论:
“IFFTRESULTISOK!
”代表变换前后数据一致,否则显示“IFFTRESULTISFAILED!
”。
(4)代码优化:
如果没有进行软件流水,程序运行结束时,clock显示为:
17736121,即程序共需要17736121个时钟周期。
优化后,程序运行结束时,clock显示为:
52753,即程序共需要52753个时钟周期。
6.2DSP
执行程序后,LED测试效果为LED0~2均被点亮,即变换前后一致。
7.重点、难点
(1)断点调试问题
在不同行设置断点,运行结果不同。
在本次实验的调试过程中,应注意将断点设置在最后一行以上,以免出现灰断点,保证单次运行的正常进行。
此外,通过View->
Variables查看各个变量的值,有时会出现原程序执行时不能显示出变量对应值的情况。
经过尝试,发现在只需加入单次运行的断点即可解决这一问题。
(2)IFFT及其验证
在进行IFFT拓展功能时,考虑使用现有函数实现IFFT反变换,但出现错误。
调试无果后决定弃用现有函数库中的函数,利用FFT变换的性质进行IFFT。
虽然简化了对代码的理解,但是仍会有部分误差,无法保证变换前后数据完全一致,因而设置误差范围设定为10,在误差范围内的误差视为可被忽略
(3)SDRAM配置及数据读写
之前没有接触过SDRAM的配置,因而在按照实验指导书中的步骤添加代码段和配置时,花了较长时间理解。
起初按部就班地建立了两个工程,在链接过程中出现了问题,最后尝试将代码合并,但是数据读写的逻辑顺序仍需注意。
FFT可能会改变原序列的值,因为应在FFT变换之前就将x序列写入SDRAM,以备之后读出存入x1中,并与IFFT结果进行比较。
8.心得体会
本次实验是基于DSP中FFT及IFFT进行的,虽然对相关内容的细节稍有
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信号 信息处理 DSP 实验