实验五离散余弦变换(DCT)算法实验
一、实验目的
学习DCT算法的实现方法。
二、实验设备
计算机,CCS 2.0 版软件,实验箱,DSP仿真器。
三、实验原理
离散余弦变换与离散傅立叶变换紧密相关的,属于正弦类正交变换,由于其优良的去冗余性能及高效快速算法的可实现性,被广泛用于语音及图象的有损和无损压缩。在开始实验之前,应了解以下基本原理。
1.语音或图象的压缩手段;
2.DCT变换在数据压缩中的作用与应用。
四、实验步骤
1.阅读本实验所提供的样例子程序;
2.运行样例程序,分析结果;
3.样例程序实验操作说明
A.实验前准备
1)正确完成计算机、DSP仿真器和实验箱连接后,开关K9拨到右边,即仿真器选择连接右边的CPU:CPU2;系统上电;
2)“A/D转换单元”的拨码开关设置:
B.实验
启动CCS 2.0,Project/Open打开“Algorithm”目录中“exp05_cpu2”子目录下“Exp-DCT-AD.pjt”工程文件;双击“Exp-DCT-AD.pjt”及“Source”可查看各源程序;加载“Exp-DCT-AD.out”;在主程序中,在flag = 0处设置断点;单击“Run”运行程序,程序将运行至断点处停止;
用View / Graph / Time/Frequency打开两个图形观察窗口;采用双踪观察在启始
地址分别为x和y,长度为128的单元中数值的变化,数值类型为32位浮点型,这两个数组分别存放的是经A/D转换的输入信号和对该信号进行DCT变换的结果;
再打开一个图形观察窗口,设置观察变量为z;变量z为输入信号的DCT变换及逆DCT变换的结果,长度128,32位浮点型,即输入信号的重构信号;
调整各图形观察窗口,观察正变换与逆变换结果;
单击“Animate”运行程序,调整各图形观察窗口,动态观察变换结果;改变输入信号的波形、频率、幅值,动态观察变换结果;
单击“Halt”暂停程序运行,关闭窗口,实验结束;
实验结果:在CCS2.0环境,同步观察输入信号及其DCT变换结果。
五、思考题
1.压缩的实质是什么?
2.实际压缩处理时,应该有那些流程?
六、实验报告要求
1.简述DCT的基本原理。
2.说明DCT系数是如何确定的?
1.以8*8矩阵描述输入、输出。
七、DCT子程序
变换的核函数
式中系数:
1
,
,1,0
,
2
)1
2(
cos
21
,
-
=
+
=∑
-
=
N
n
k
N
k
n
g
N
C
N
n
k
n
k
π
?
?
?
≠
=
=
1
2
1
k
k
g
k
void dct1c2 (double x[], double y[], int n):DCT正变换子程序;
void idct1c2 (double y[], double z[], int n):逆DCT变换子程序;
两子程序中,各参数为:
数组x :输入信号经A/D转换后,转为浮点型后,生成x数组,长度128;
数组y :DCT正变换输出信号数组,也是逆DCT变换输入数组,浮点型,长度128;数组z :逆DCT变换输出信号数组,即重构信号,浮点型,长度128。
八、程序流程图(DCT)
实验六相关(Correlation)算法
一、实验目的
1.学习相关的概念;
2.学习相关算法的实现方法。
二、实验设备
计算机,CCS 2.0版软件,实验箱、DSP仿真器。
三、实验原理
1.概率论中相关的概念;
2.随机信号相关函数的估计。
四、实验步骤
1.熟悉基本原理;阅读实验提供的程序;
2.运行CCS,记录相关系数;
3.填写实验报告。
4.实验程序操作说明
A.实验前准备
1)正确完成计算机、DSP仿真器和实验箱连接后,开关K9拨到右边,即仿真器选择连接右边的CPU:CPU2;系统上电;
2)“A/D转换单元”的拨码开关设置:
拨码开关设置:
B.实验
启动CCS 2.0,Project/Open打开“Algorithm”目录中“exp06_cpu2”子目录下“Exp-COR-AD.pjt”工程文件;双击“Exp-COR-AD.pjt”及“Source”可查看各源程序;加载“Exp-COR-AD.out”;在主程序中,在i++及flag = 0处分别设置断点;单击“Run”运行程序,程序将运行至第一个断点处停止;
用View / Graph / Time/Frequency打开一个图形观察窗口;采用双踪观察变量x及y 的波形,长度为128,数值类型为32位浮点型;此时,这两个信号由程序产生;
再打开一个图形观察窗口,以观察变量x与y相关运算的结果;该观察窗口的
参数设置为:变量为cor,长度为255,数据类型为32位浮点数;
调整图形观察窗口,观察两路输入信号相关运算的结果;
单击“Run”,程序运行至第二个断点处停止,此时,两路输入信号由信号源单元产生,并完成自相关运算;
单击“Animate”运行程序,调整各图形观察窗口,动态观察自相关运算的结果;改变输入信号的波形、频率、幅值,动态观察结果;
程序中,mode可赋0或1,赋0时,完成相关函数无偏估计的计算;赋1时,完成
相关函数有偏估计的计算;x和y为参与相关运算的两路信号,当x = y时,完成自相关
函数的计算,而当x ≠ y 时,完成互相关函数的计算。修改以上参数,进行“Rebuild All ”,并重新加载程序,运行程序可以得到不同的实验结果。 关闭工程文件,关闭各窗口,实验结束。 五、思考题
用其他数学工具计算相关系数,并与实验结果比较(如:SPSS ,MATLAB )。 六、相关算法 时域表达式:
七、程序参数说明
x[Length] // 原始输入数据A y[Length] // 原始输入数据B cor[Lengthcor] // 相关估计数值 Length // 输入数据长度 Lengthcor // 相关计算结果长度 mode = 0 // 无偏估计 mode = 1 // 有偏估计 八、程序流程图:
()()()
∑--=+=
l
N l
n n s l n s l R 12
1
实验九语音信号的FFT分析
一、实验目的
1.加深对DFT算法原理和基本性质的理解;
2.熟悉FFT算法原理和FFT子程序的应用;
3.学习用FFT对连续信号和时域信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确应用FFT。
二、实验设备
计算机,CCS 2.0 版软件,实验箱,DSP仿真器,音频线,音源。
三、基本原理
1、离散傅立叶变换DFT的定义:将时域的采样变换成频域的周期性离散函数,频
域的采样也可以变换成时域的周期性离散函数,这样的变换称为离散傅立叶变换,简称DFT。
2、FFT是DFT的一种快速算法,将DFT的N2步运算减少为(N/2)log2N步,极
大的提高了运算的速度。
3、旋转因子的变化规律。
4.蝶形运算规律。
5.基2FFT算法。
四、实验步骤
1、复习DFT的定义、性质和用DFT作谱分析的有关内容;
2、复习FFT算法原理与编程思想,并对照DIT-FFT运算流程图和程序框图,了解
本实验提供的FFT子程序;
3、阅读本实验所提供的样例子程序;
4、运行CCS软件,对样例程序进行跟踪,分析结果;记录必要的参数。
5、填写实验报告。
6.提供样例程序实验操作说明
A.实验前准备:
1利用自备的音频信号源,或把计算机当成音源,从实验箱的“语音单元”的音频接口“麦克输入”输入音频信号,进行AD采集。
2开关K9拨到左边,即仿真器选择连接左边的CPU:CPU1;
3拨码开关设置说明
SW1拨码开关:
用音频对录线,连接实验箱语音单元的麦克输入与外部音频源;
拨码开关S6: 1、2 OFF
B.实验
启动CCS 2.0,用Project/Open打开“Algorithm”目录中“exp09_cpu1”子目录下的“audiofft.pjt”工程文件;双击“audiofft.pjt”及“Source”可查看源程序;加载“audiofft.out”;在主程序中,k++处设置断点;单击“Run”运行程序,程序将运行至断点处停止;
用View / Graph / Time/Frequency打开一个图形观察窗口;设置该观察图形窗口变量及参数;采用双踪观察在启始地址分别为px和pz,长度为128的单元中数值的变化,数值类型为16位有符号整型变量,这两段存储单元中分别存放的是经A/D转换后的语
音信号和对该信号进行FFT变换的结果;
单击“Animate”运行程序,或按F10运行;调整观察窗口并观察输入信号波形及其FFT变换结果;单击“Halt”暂停程序运行,关闭窗口,本实验结束。
实验结果:在CCS2.0环境,同步观察输入语音信号波形及其FFT变换结果。
二.思考题
1.对于不同的N,幅频特性会相同吗?为什么?
2.FFT进行谱分析,可以应用的什么方面?
三.实验报告要求
1.简述实验原理及目的;
2.结合实验中所给定典型序列幅频特性曲线,与理论结果比较,并分析说明误差产生的原因以及用FFT作谱分析时有关参数的选择方法。
3.总结实验所得主要结论。
四.程序参数说明
void kfft(pr,pi,n,k,fr,fi,l,il):基2快速傅立叶变换子程序,n为变换点数,应满足2的整数
次幂,k为幂次(正整数);
数组x :输入信号数组,A/D转换数据存放于地址为px数组中,转为浮
点型后,生成x数组,长度128;
数组mo:FFT变换数组,长度128,浮点型,整型后,写入pz数组中。
五.子程序流程图:
实验十 DTMF(双音多频)信号的产生和检测
一、实验目的
1. 了解DTMF信号的基本原理和用途;
2. 学习DTMF信号产生和检测算法。
二、实验设备
计算机,CCS 2.0 版软件,DSP仿真器,实验箱。
三、实验原理
1.概述
DTMF(Dual-Tone Multifrequency)通信技术中的一种信号传输方法,这里的tone代表一个固定频率的声音片断,而dual-tone则是由两个不同的tone产生的复频信号。数字式电话的12个键分别代表了12种不同的复频组合,借助于对频率组合的侦测,计算机可分辨出所按的是哪一个键,从而达到与电话另一端的使用者互动控制的目的。通过这种技术可以使计算机将控制命令从复杂的声音讯号中判别出来,从而使我们能够通过电话按键控制计算机的运作。DTMF信号发生器将按键或数字信号转化成双音信号,DTMF信号检测器检测双音信号中的信息。下图是一般双音多频电话的双音频率情况:
图1 双音频电话键盘
2.DTMF信号的产生
正弦信号算法和频率控制
设有一系统:其传输函数)
H没有零点,只有一对处在单位圆上的共扼极点,则
(z
单位冲击响应为恒幅度振荡,即产生了正弦信号。
2
21
10
1)(--++=
z
a z
a b z H
式中:00sin ωA b =,01cos 2ω-=a ,12=a ;
经离散变换后得:
)2()1(cos 2)(0---?=n y n y n y ω
式中:0)1(=-y ,0sin )2(ωA y -=-,s f f 002πω=; A 为正弦波幅值,s f 为采样频率,0f 为正弦波频率。
图2 正弦波振荡器原理图
对于DTMF 所要产生的频率和采样频率为: ROW 频率: 697、770、852、941Hz COLUMN 频率: 1209、1336、1477、1633Hz 采样频率:s f = 8kHz DTMF 信号时序控制 根据AT&T 技术规范:
(1)数字号码最大传输速度为每秒10个,即一个号码占100ms 时间片。 (2)在100ms 时间片内双音多频信号持续不少于45ms 且不多于55ms 的时间。 (3)一个数字按键有两个作业:Tone Task 和Quiet Task 。 工作流程
键中断将启动一个作业(Start Task )
执行Quiet Task :
o 插入双音信号间的间隔 o 置Tone Task 的计数大小 o Unpack New Digit
执行Tone Task :
o置Quiet Task的计数大
3.DTMF信号的检测
双音频率信息获取算法:Goertzel算法
Goertzel算法用来从输入信号中提取出所需要信号,运算速度比DFT算法快。
对N点采样计算表达式为:
式中:
DTMF信号的判别方法:
?信号强度大于THR-SIG
?双音信号(行、列)功率差:THR-TWIREV~THR-TWISTD
?比邻近双音信号强度大THR-ROWREL,THR-COLREL
?二次谐波强度小于THR-ROW2nd,THR-COL2nd
运算量与存储需求
表1 产生DTM信号所需的运算速度和内存
表2 检测DTM信号所需的运算速度和内存
四、实验步骤
1.熟悉DTMF的基本原理和规范;
2.阅读实验提供的程序;
3.运行样例程序,观察DTMF信号的产生和检测过程;
4.写实验报告。
5.样例程序实验操作说明
A.实验前准备
1)开关K9拨到左边,即仿真器选择连接左边的CPU:CPU1;
2)正确完成计算机、DSP仿真器和实验箱的连接后,系统上电;
B.实验
启动CCS 2.0,用Project/Open打开“Exp10_cpu1”目录下的“DTMF.pjt”工程文件;双击工程文件及“Source”可查看各源程序;并加载“DTMF.out”;在程序最后“i = 0”处,设置断点;单击“Run”运行程序,至断点处停止;
分别用View / Graph / Time/Frequency打开三个图形观察窗口,以观察产生的行频、列频、双音频信号以及2)
X信号;设置第一个图形观察窗口,观察起始地址分
(k
别为xr和xc ,长度为102、32位浮点型的两组数据,分别为行频和列频的产生信号;