搜索
您的当前位置:首页正文

《信号处理原理》上机实验任务书和指导书

来源:榕意旅游网
课程名称:信号处理原理 上机学时:16

适用专业:计算机科学与技术 先修课程:C语言

一、上机实验总体目标

信号处理原理是计算机科学与技术专业本科生的一门专业课程。实验目的是使学生掌握信号处理,尤其是数字信号处理的基本原理和方法。要求学生通过实验熟练掌握基2时域抽选的快速傅立叶变换算法的基本原理,为快速傅立叶变换的实际应用打下坚实基础,了解二维快速傅立叶变换的算法原理及其应用。

二、上机实验课时分配 序号 上机实验项目 实验类型 每组人数 上机学时 1 整序算法程序设计与调试 设计 4 2 基2时域抽选的FFT程序设计与调试 设计 4 3 基2时域抽选的快速傅立叶反变换程序设设计 4 计与调试 4 FFT与IFFT的实际应用程序设计与调试 设计 4 三、上机实验环境

硬件:CPU P3 500Hz,内存256MB,硬盘500MB或以上 软件:Windows 98/2000/XP,Turbo C或Visual C++ 四、参考书

1、董绍平,陈世耕,王洋.数字信号处理基础.哈尔滨工业大学出版社,1999 2、程佩青.数字信号处理教程.清华大学出版社,2000 3、黄顺吉.数字信号处理及其应用.国防工业版社,1999 4、陈永彬.数字信号处理.南京工业学院出版社,1999 5、王世仪.数字信号处理.北京工业学院出版社,2001

6、吴镇扬.数字信号的原理与实现.东南大学出版社,1997. 7、赵尔沅等.数字信号处理实用教程.人民邮电出版社,1999. 8、姚天任等.现代数字信号处理.华中理工出版社,1999. 9、丁玉美等.数字信号处理.西安电子科大出版社(第2版),2001. 10、A.V.奥本海姆,R.W.谢弗著,黄建国等译.离散时间信号处理.科学出版社,2000.

实验1 整序算法程序设计与调试

【实验目的】

使学生掌握整序算法的基本原理,为实现基2时域抽选的快速傅立叶变换算法做好准备,了解快速傅立叶变换算法的基本原理。

【实验准备】

1.原位计算

从基2时域抽选FFT运算流图可知,在某列进行蝶形运算的任意两个节点(行)k和j的节点变量就完全可以确定蝶形运算的结果,与其它行(节点)无关。这样,蝶形运算的两个输出值仍可放回蝶形运算的两个输入所在的存储器中,即实现所谓原位运算。 2.倒位序规律

由基2时域抽选FFT运算流图可知,输出X(k)按正常顺序排列在存储单元,而输入是按顺序:x(0)、x(4)、x(2)、x(6)、x(1)、x(5)、x(3)、x(7),这些数据表面上是乱序的,实际上是有规律的,恰为二进制意义下的倒序,这种顺序称作倒位序。

设N=8点FFT运算,输入序列的序号为n,二进制为(n2n1 n0)2 ,倒位序顺序用n’表示,其倒位序二进制为(n0 n1 n2)2,如下表:

自然顺序n 0 1 2 3 4 5 6 7 二进制n2n1 n0 0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 倒位序二进制n0 n1 n2 0 0 0 1 0 0 0 1 0 1 1 0 0 0 1 1 0 1 0 1 1 1 1 1 倒位顺序n’ 0 4 2 6 1 5 3 7

3.整序算法原理

输入序列先按自然顺序存入存储单元A,然后经整序(变址运算)来实现倒位序排列。

存储单元 A(0) A(1) A(2) A(3) A(4) A(5) A(6) A(7) 自然顺序I x(0) x(1) x(2) x(3) x(4) x(5) x(6) x(7) 变址

倒位序 J x(0) x(4) x(2) x(6) x(1) x(5) x(3) x(7)

图1:变址处理方法

其中I表示顺码,J表示倒码。从上图可以看出,只要按图中连线指示换位,就可以实现整序。可以看出I=J时不用换位,I≠J时换位。若IJ就不需要再换位了。通常把倒码和换位两个过程总称为整序。

2

【实验内容】

1.编写一个函数,求某个数的二进制倒码。

int IBR(int i,int m)

即求i的二进制倒码。其中m表示二进制位数。

例:若i=1,m=3;则1的3位二进制编码为001,001的倒码为100,100的十进制值为4,所以m=3时1的二进制倒码为4,即IBR(1,3)的值为4。 2.编写一个函数,实现整序功能。

void ReverseOrder(flaot A[],int m)

即实现将序列A中的数据按倒位序重新排列。其中m表示二进制位数。 例:若数组A中原有数据依次为:A0、A1、A2、A3、A4、A5、A6、A7,经过调用函数ReverseOrder(A,3)后,数组A中的数据依次为A0、A4、A2、A6、A1、A5、A3、A7,此时A中的数据表面上是乱序的,实际上是有规律的,恰为二进制意义下的倒序。 3.实验的测试

编写测试用的主程序,对已编写的IBR和ReverseOrder函数进行测试并给出测试结果。

【思考题】

1.在基2时域抽选的FFT算法中,为什么要对输入数据进行整序?

3

实验2 基2时域抽选的FFT程序设计与调试

【实验目的】

使学生掌握信号处理,尤其是数字信号处理的基本原理和方法。要求学生通过实验熟练掌握基2时域抽选的快速傅立叶变换算法(FFT)的基本原理,了解二维及多维快速傅立叶变换算法。

【实验准备】

1.复数类型

对于FFT算法涉及的复数运算,使用自定义的COMPLEX来定义复数类型,其使用方法与常规类型(如int,float,double)相似。 typedef struct { float real, imag; } COMPLEX; 2.FFT基本原理

FFT改进了DFT的算法,减少了运算量,主要是利用了旋转因子W(a)W的周期性:W= W (b) W的对称性:W=-W

FFT把N点DFT运算分解为两组N/2点的DFT运算,然后求和:

kX(k)X1(k)WNX2(k)

Nk X(k)X1(k)WNX2(k), k0,1,,N212N12N12的两个性质:

其中,

X1(k)x1(r)WNrkx(2r)WNrk

r0N22r0N221212

X2(k)x2(r)WNrkx(2r1)WNrkr0r0 在计算X1(k)与X2(k)时,仍利用上述公式,把它们看成是新的X(k)。如此递归下去,便是FFT算法。

3.蝶形运算

从基2时域抽选FFT运算流图可知:

① 蝶形两节点的距离为2m-1,其中,m表示第m列,且m =1,… ,L。 例如N=8=23, 第一级(列)距离为21-1=1, 第二级(列)距离为22-1=2, 第三级(列)距离为23-1=4。

② 考虑蝶形运算两节点的距离为2m-1,蝶形运算可表为: Xm(k)=Xm-1(k)+Xm-1(k+2m-1) WNr

Xm(k+2m-1)= Xm-1(k)-Xm-1(k+2m-1) WNr

由于N为已知,所以将r的值确定即可确定WNr。为此,令k=(n2n1n0)2 ,再将k左移(L-m)位,右边位置补零,就可得到(r)2 的值,即(r)2 =(k)22L-m 。

例如 N=8=23

(1) k=2 , m=3 的r值,∵k=2=(010)2 左移L-m=3-3=0 ,∴ r=(010)2=2; (2) k=3 ,m=3 的r值;k= 3=(011)2,左移0位,r=3;

(3) k=5 ,m=2的值;k=5=(101)2 左移L-m=1位 r=(010)2 =2。 4.存储单元

4

存输入序列 x(n),n=0,1, ,N-1,计N个单元;

存放系数WNr, r=0,1, ,(N/2)-1;需N/2个存储单元; 共计(N+N/2)个存储单元。 5.程序框图

开 始送入x(n),MN=2 M倒 序L=1 , M1B 2 L£J=0 , B£ 1LP=2 M £Jk= J , N£1 , 2LpX(k)X(k)X(kB)WNpX(kB)X(k)X(kB)WN输出结 束

【实验内容】

1.编写一个实现FFT算法的函数。

void fft(COMPLEX A[ ] , int m)

其中,COMPLEX是复数类型的名称,A是要变换的数据,m是FFT点数N的以2为底的幂次m

(即N=2 )。

2.编写测试用的主程序对fft函数进行测试,并给出测试结果。

【思考题】

1. 计算基2时域抽选FFT算法的运算量。

2.序列x(n)=1(0≤n≤3),对其作4点和8点的FFT运算,其结果是否相同?为什么?

5

实验3 基2时域抽选的快速傅立叶反变换程序设计与调试

【实验目的】

使学生通过实验熟练掌握基2时域抽选的快速傅立叶反变换(IFFT)算法的基本原理,了解快速傅立变换算法的实际应用。

【实验准备】

1.IFFT算法原理

nkX(k)DFTx(n)x(n)WNn0N11x(n)IDFTX(k)NX(k)Wk0N1

nkN比较两式可知,只要DFT的每个系数WNnk换成WN-nk,最后再乘以常数1/N就可以得到IDFT的快速算法—IFFT,所以稍微变动FFT程序和参数可实现IFFT。

另外,可以将常数1/N分配到每级运算中。∵1/N=1/2L=(1/2)L,也就是每级蝶形运算均乘以1/2。

【实验内容】

1.编写一个的函数,快速傅立叶反变换(IFFT)算法。 void ifft(COMPLEX A[ ] , int m)

其中,COMPLEX是复数类型的名称,A是要变换的数据,m是FFT点数N的以2为底的幂次(即N=2 )。

2.编写测试用的主程序对fft和ifft函数进行联合测试。

首先调用fft函数对输入数据进行正变换,给出中间结果;然后调用ifft函数进行反变换,并给出测试结果。

m

【思考题】

1.除了本实验采用的方法,快速傅立叶反变换(IFFT)还有哪些方法?

6

实验4 FFT与IFFT的实际应用程序设计与调试

【实验目的】

使学生掌握二维FFT算法原理,掌握利用二维FFT与IFFT实现去除燥声的方法,理解FFT变换在信号处理中的作用。

【实验准备】

1. 二维FFT(IFFT)算法原理

在图像处理的广泛领域中,傅立叶变换起着非常重要的作用,包括图像的增强、图像分析、图像复原和图像压缩等。在图像数据的数字处理中常用的是二维离散傅立叶变换,它能把空间域的图像转变到频域上进行研究,从而很容易地了解到图像各空间频域成分,进行相应处理。

二维FFT(IFFT)实际上就是对二维数组的行和列分别进行一维FFT(IFFT)。其流程如下: ① 先逐行进行一维FFT(IFFT),计算结果存入矩阵中, ② 再逐列进行一维FFT(IFFT),即先取得第j列的数据col[i] = x[i][j];对第j列数据进行一

维FFT(IFFT)计算结果在数组col中,将结果放回矩阵第j列中。

2. 文本数据转化成数值

用.和 O组成的“国”字图形存储在文本文件中,需要转换成数值才能进行FFT变换。其处理方法如下: 首先设置点(.)对应的数值POINT_VAL=0,圈(o)对应的数值CIRCLE_VAL=1.0;

然后,初始化Data[][]用于存储图像数据的复数矩阵;

然后打开文件,读取文件中的文本数据,每次读取一个字符,如果为'o',则Data[i][j].real=CIRCLE_VAL;如果如果为'.',则Data[i][j].real=POINT_VAL;

最后,关闭文件。

3.数值转化成文本数据

经过处理后的Data[][]中的数值数据,需要转换成用.和 O组成的“国”字图形,才知其是否已经去除噪声。其处理方法如下:

首先设置数值转化为字符的控制阈值TH=0.5;

然后,打开文件,依次读取Data[][]中数值,如果大于TH,向文件输出'o',如果小于TH,向文件输出'.';

最后,关闭文件

4.去除燥声

用.和 O组成的“国”字图形,个别地方有燥声,调用二维FFT与IFFT实现对它进行二维FFT变换与反变换还得到原图形,适当调整参数可在反变换后去除燥声。处理流程如下:

① 打开数据文件(Data.txt)读取数据,并将文本数据转化成数值,存入矩阵中 ② 进行二维FFT变换 ③ 对频谱进行处理

④ 进行二维FFT的逆变换

⑤ 将变换结果转换成文本,存人结果文件(RES.txt)中

【实验内容】

1.编成实现去除图形中的燥声

文件Data.txt中是用“.”和“o”组成的“国”字图形,个别地方有燥声,编成实现去除燥声。用文件RES.txt存放去除燥声后的图形。

【思考题】

1.举例说明FFT的应用领域及其应用情况。

7

................................................................ 实验用的图形Data.txt的内容如下:(64×64)

................................................................ ................................................................ ...oooooooooooooooooooooooooooooooooooooooooooooooooo........... ...oooooooooooooooooooooooooooooooooooooooooooooooooo........... ...oooooooooooooooooooooooooooooooooooooooooooooooooo........... ...oooo..........................................oooo........... ...oooo..........................................oooo........... ...oooo..........................................oooo........... ...oooo..ooooooooooooooooooooooooooooooooooooo...oooo........... ...oooo..ooooooooooooooooooooooooooooooooooooo...oooo........... ...oooo..ooooooooooooooooooooooooooooooooooooo...oooo........... ...oooo...................ooo....................oooo........... ...oooo...................ooo....................oooo........... ...oooo...................ooo....................oooo........... ...oooo...................ooo....................oooo........... ...oooo...................ooo....................oooo........... ...oooo...................ooo....................oooo........... ...oooo...................ooo........o...........oooo........... ...oooo...................ooo....................oooo........... ...oooo...................ooo....................oooo........... ...oooo.....ooooooooooooooooooooooooooooooo......oooo........... ...oooo.....ooooooooooooooooooooooooooooooo......oooo........... ...oooo.....ooooooooooooooooooooooooooooooo......oooo........... ...oooo...................ooo....................oooo........... ...oooo...................ooo....................oooo........... ...oooo...................ooo....................oooo........... ...oooo......o............ooo...ooo..............oooo........... ...oooo...................ooo...ooo..............oooo........... ...oooo...................ooo....ooo.............oooo........... ...oooo...................ooo.....ooo............oooo........... ...oooo...................ooo......ooo...........oooo........... ...oooo...................ooo.......ooo..........oooo........... ...oooo...................ooo....................oooo........... ...oooo...................ooo....................oooo........... ...oooo...................ooo....................oooo........... ...oooo..ooooooooooooooooooooooooooooooooooooo...oooo........... ...oooo..ooooooooooooooooooooooooooooooooooooo...oooo........... ...oooo..ooooooooooooooooooooooooooooooooooooo...oooo........... ...oooo..........................................oooo........... ...oooo..........................................oooo........... ...oooo..........................................oooo........... ...oooooooooooooooooooooooooooooooooooooooooooooooooo........... ...oooooooooooooooooooooooooooooooooooooooooooooooooo........... ...oooooooooooooooooooooooooooooooooooooooooooooooooo........... ...oooo..........................................oooo........... ...oooo..........................................oooo........... ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................ ................................................................

8

因篇幅问题不能全部显示,请点此查看更多更全内容

Top