B=*AR3+<<16-*AR4-<<16
A=A+*AR4<<12
B=A+*AR5<<-12
A=B-#06789H<<16
B=B+*AR7+0B+CARRY
A=A-*AR2--BORROW
SUBC(@25,A)
A=A-UNS(*AR7+)
T=#9ACDH
B=DADST(*AR4,T)
A=DADST(*AR7,T)
C16=1
A=A+DBL(*AR5+)
A=A-DBL(*AR5-)
T=#7654H
C16=0
A=DADST(*AR5+,T)
C16=1
A=DSADT(*AR5-,T)
A=DBL(*AR5+)-A
*AR3+=HI(B)
||B=A+*AR5+0%<<16
*AR4-=HI(A)||A=*AR3-<<16-B
GOTONEXT
;
SXM=0
A=#89ABH
A=A+#4567H<<16
*AR3=#9999H
A=A&*AR3-
B=#8897H
B=B+#079ADH<<16
A=A|B<<-12
A=#8897H
A=A+#079ADH<<16
A=B^#0567DH<<12
DP=#04
@7AH=@7AHACD6H
.end
四、实验步骤:
1、输入以上程序,并进行编译;
2、打开codeExplore,并把编译好的程序装载,并进行调试
3、逐步调试,并观察各种特殊寄存器的值和预期值是否对应,着重了解各种寻址的特点,及相对应的指令。
五、实验心得
第一次实验并没有掌握程序的操作方法以及对于程序的不理解,导致操作不熟练,而且程序错误较多,花费了大量的时间在程序的纠错和调试上。
实验二DSPFIR低通滤波器
一、实验目的
1、通过实验程序理解DSP程序的编写。
2、掌握CIC-500系统的A/D转化,串口通信的编程。
3、掌握FIR低通滤波器在DSP中的具体实现,进一步了解各种寻址方式的实际应用。
二、实验原理
FIR滤波器的主要操作控制为
设计一个低通滤波器,条件如下:
1、采样频率为9.26KHZ,系统工作频率为10MHZ。
2、截至频率为Flpc为1KHZ。
3、输入信号为14位带符号数值。
4、共取80阶点作运算。
滤波器设计好后的系数放在"lp_coeff.asm"文件内其他文件应拷贝到同一文件夹下。
三、FIR设计方法
1、数字滤波器设计步骤
数字滤波器的实质是一个离散的多项式表达式,通过这个表达式来满足一定的需求。
因此数字滤波器的设计步骤如下:
A、了解滤波器的技术要求
B、实现系数计算
C、实现,即把传函转换为合适的滤波器网络或结构
D、有限字长效应分析,主要考虑滤波器系数、输入数据量化和固定字长对滤波器性能的影响
E、工程实现
2、滤波器的技术指标
:
峰值通带偏差
:
阻带偏差
:
通带边缘频率
:
阻带边缘频率
3、用窗口法设计滤波器的步骤
第一步:
指定理想的或期望的滤波器频率响应
;
第二步:
通过傅立叶反变换求期望的滤波器的冲击响应,
第三步:
选择一个满足通带或衰减指标的窗函数,然后利用滤波器长度与过渡带宽之间的关系确定滤波器的系数数目。
第四步:
对于选取的窗函数求w(n)的值,并且将
的值与w(n)相乘求得实际的FIR系数h(n)。
4、标准频率选择性滤波器的理想冲击响应总结
滤波器类型
低通
高通
-
1-
带通
-
-
带阻
-
1-
+
5、常用窗函数及重要特征总结。
窗函数名
归一化过渡带宽(HZ)
通带波纹(dB)
相对于旁瓣的主瓣(dB)
阻带衰减(dB)
窗函数表达式
矩形窗
0.9/N
0.7614
13
21
1
Hanning窗
3.1/N
0.0546
31
44
Hamming窗
3.3/N
0.0194
41
53
布莱克曼
5.5/N
2.93/N
0.0017
0.0274
57
75
50
凯塞
4.32/N
5.71/N
0.00275
0.000275
70
90
四、随机数产生方法
实验程序范例
.title"lowpassfilter"
.mmregs
.width80
.length55
;.setsect".text",0x1800,0;theseassemblerdirectivesspecify
;.setsect".data",0x0200,1;theabsoluteaddressesofdifferent
;.setsect"vectors",0x0180,0;sectionsofcode
.sect"vectors";interruptvectortableresidesat
.copy"lp_vecs.asm";location0x0180
.data
seed.word07e6dh;seedforrandomvariable
temp.word0
XN.word0,0,0,0,0,0,0,0,0,0;80datalocationsfor80
XN1.word0,0,0,0,0,0,0,0,0,0;stagedelayline.
XN2.word0,0,0,0,0,0,0,0,0,0;
XN3.word0,0,0,0,0,0,0,0,0,0;
XN4.word0,0,0,0,0,0,0,0,0,0;
XN5.word0,0,0,0,0,0,0,0,0,0;
XN6.word0,0,0,0,0,0,0,0,0,0;
XN7.word0,0,0,0,0,0,0,0,0;
XNLAST.word0;
OUTPUT.word0;extrawordforthebitbucket
.text
.copy"lp_coeff.asm"
.copy"lp_ac01.asm"
start:
intm=1;disableallinterrupts
dcallAC01INIT;initializeAnaloginterface.
DP=#0
nop
pmst=#01a0h;Interruptpointermapsvectorstopage#3(3*128=180h)
sp=#0ffah;stackpointerlocatedinCommunicationsKernal
imr=#240h;unmaskTDMRINTandHPIINT(hostportinterface)
intm=0;enableallinterrupts
WAIT:
gotoWAIT;waitforreceiveinterrupt.
receive:
DP=#seed;ThissetsDataMemoryPagePointer
;topageXN,whichisdefined
;earlierintheprogram.
;---------randomnoiseGenerator(P-5csModulator)-------------------
a=@seed<<1
a=@seed^a
@temp=a<<2
a=@temp^a
a=#8000h&a
a=a+@seed<<16
@seed=hi(a)<<1
a=@seed<<11
a=afffch<<15
repeat(#12)
a=a<;--------getsampleandrunthroughlowpassfilter---------
b=DRR1;LOADACCUMULATORWITHWORD
;RECEIVEDFROMAIC!
@XN=A<<0;STORETHEVALUEOFRECEIVED
;WORDTOVARIABLEXN!
AR0=#XNLAST;LOADAR0WITHADDRESSOFLAST
;DELAYELEMENT!
A=#0;ZEROACCUMULATORA!
repeat(#79);Repeatnextinstructions80times.
macd(*AR0-,h0,A);ComputeFIRoutput.
@OUTPUT=hi(A)<<0;Storethefilteredinputinto
;variableOUTPUT.
A=@OUTPUT<<0;OUTPUT==>AccumulatorA
A=#0FFFCh&A;TWOLSB'sMUSTBEZEROFORAIC!
DXR1=A;SENDTOTRANSMITREGISTER!
return_enable;Enableinterruptsandreturn
;frominterrupt.
transmit:
return_enable;Enableinterruptsandreturn
;frominterrupt.
.end
四、实验步骤
1、连接CIC-500DSP发展实验系统
2、载入程序,从J2端输入音乐,运行一段时间后暂停,观察实验结果。
3、观察不同频宽的音乐,把结果进行比较。
五、实验心得
通过实验了解到了DSP程序的编写和A/D转化,以及串口通信的编程,进一步了解了各种寻址方式的实际应用,依据上次实验的经验,这次的操作过程更为熟练。
实验三FFT算法的实现
—、实验目的
1.掌握FFT算法。
2、进一步掌握FFT的DSP编程。
3、指出FFT算法中的各种寻址方式,结合算法掌握寻址方式的使用技巧。
4、认真分析各功能模块的具体功能,和课堂所讲的算法步骤关联起来。
二、实验原理
实验原理依据课堂所授的蝶形变换
设计1024个点的FFT变换,输入数据放在in.dat文件里面。
在输入实验的时候把bit_rev.asm、fft.asmunpack.asm、power.asm拷贝至同一个目录下
实验主程序:
.width80
.length55
.title"RealFastFourierTransfrom"
.mmregs
.copy"vectors.asm"
.copy"initrfft.asm"
.text
start:
SP=#BOS
DP=#0
OVM=#0
FRCT=#1
ASM=#0
CALLbit_rev
CALLfft
CALLunpack
CALLpower
hangloose:
NOP
gotohangloose
.copy"bit_rev.asm"
.copy"fft.asm"
.copy"unpack.asm"
.copy"power.asm"
.end
三、实验步骤:
1、认真阅读四个子程序,理解四个子程序的作用
2、认真进行调试,通过时域频域图对比算法的精度
3、认真思考,改进算法。
四、实验心得
掌握FFT算法,以及相关的FFT的DSP编程。
认真分析各功能模块的具体功能,和课堂所讲的算法步骤关联起来,通过实验能够了解到FFT算法的一些简单的应用以及算法的运算准则。
实验七设计PID控制器或设计矩阵乘法程序
—实验目的
1、根据以前做实验的所培养的经验,写出PID控制器或矩阵乘法程序
二、实验原理
1、PID控制原理
2、矩阵乘法原理
3、矩阵乘法程序
main.asm
.width80
.length55
.title"矩阵乘法"
.mmregs
.copy"vectors.asm"
.data
XN.word1,4,7,2,5,8,3,6,9,1,2,3,4,5,6,7
.word0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
YN.word1,2,3,4,5,6,7,8,9,1,1,3,2,4,4,2
.text
start:
ar3=#XN
ar4=#YN
ar5=#(YN+17)
sp=#07ffh
bk=#9
callmulx1
callmulx1
callmulx1
callmulx1
wait:
nop
gotowait
mulx1:
callmulad3
ar0=#4
mar(*ar3-0)
callmulad3
ar0=#4
mar(*ar3-0)
callmulad3
ar0=#4
mar(*ar3-0)
callmulad3
return_enable
nop
mulad3:
a=#0
ar0=#1
repeat(#2)
a=a+*ar3+**ar4+0%
*ar5+=a
nop
return_enable
.end
三、实验步骤
1、首先自己参考前三个程序,设计自己的程序。
2、编译自己的程序,挑出错误,生成目标文件。
3、加载程序,査询数据存储器的内容验证程序是否正确。
四、实验心得
在这几次的实验之后,我对书本上的相关知识有了更深的体会,在最后一个实验操作过程中,矩阵乘法的设计很有难度的,需要我们在充分了解矩阵乘法知识的基础上才能转换成我们所要的4*4矩阵,在多次修改,调试后实验才取得了成功。
,