《信号处理原理》实验指导.doc

上传人:创****公 文档编号:1183037 上传时间:2018-12-17 格式:DOC 页数:17 大小:82KB
下载 相关 举报
《信号处理原理》实验指导.doc_第1页
第1页 / 共17页
《信号处理原理》实验指导.doc_第2页
第2页 / 共17页
《信号处理原理》实验指导.doc_第3页
第3页 / 共17页
《信号处理原理》实验指导.doc_第4页
第4页 / 共17页
《信号处理原理》实验指导.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

1、信号处理原理实验指导【实验要求】(1) 对输入图象文件内容进行 2DFFT 变换,再对所得频谱数据进行 2DIFFT ,将结果重新转换成字符文件保存起来。(2) 对输入图象文件内容进行 2DFFT 变换,再将频谱的大小压缩为(N/2 )*(N/2 ) ,然后对所得频谱数据进行 2DIFFT,将结果重新转换成字符,保存成(N/2)* (N/2)的汉字图像。(3) 对输入图象文件内容进行 2DFFT 变换,再将频谱的大小压缩为(N/2 )*(N/2 ) ,然后对频谱补入一些零,再对频谱进行 2DIFFT ,将结果重新转换成字符,保存成(N/2)*(N/2)的汉字图像。【实验原理】一幅二维数字图像可

2、以用矩阵g(m,n)来表示,g(m,n)是图像在坐标(m,n)处的灰度级(或彩色 RGB值) 。也可以把 g(m,n)视为一个二元函数,它的自变量为 m和 n,则可以用它来表示数字图像在平面上的亮度分布。矩阵可以写成下面的形式: (0,)(0,1)(0,1)1(,)(,)(,)(,)gggNgmnMM 在上面的基础上,我们可以定义下面的二维 DFT:定义 1:二维矩阵向量g(m,n)的 2D-DFT10(,) )( , (NMmMmnpqNnGpqgWFgn, 01p1q从上面的定义我们可以看出:2D-DFT 可以用两次 1D-DFT来实现。一次是对 g(m,n)的各行(即 m相同而 n不同)

3、进行 1D-DFT-如上式中的红色部分所示;再对变换后的结果,再按列进行 1D-DFT-如上式中的蓝色部分所示。【图象压缩与放大原理】要尽量少失真地对图象进行缩放处理,则需从频域着手进行。如果从频谱图中去掉一些频率的分量,然后再作 IFFT,得到时域数据,即可实现对图象的缩小。而如果在频谱中加入一些零值,再作IFFT,得到时域数据,则可实现对图象的放大。【实验数据】实验数据为一图像数据文件,文件格式是纯文本格式。文件正文的第一行的值表示矩阵的大小,即 N值。后面的 N行是点阵图像,每行有 N个数据。N 最大为 256。在图像点阵中, .代表 0(即没有点) , o代表 1(即有点) 。#inc

4、lude #include #include “MyFFT.H“int FFTTest() Comp x4 = 1, 1, 1, 1 ;FFT_1D(x, 2, 1);if (x0 = Comp(4) elsereturn 0;void main() if (FFTTest() = 0) cout POINT_VAL;float CIRCLE_VAL;cout CIRCLE_VAL;float TH;cout TH;ifstream infilestream(“Data.TXT“, ios:in);int N;infilestream N;cout MAX_N)cout inputchar;i

5、f (inputchar = o)Dataij = CIRCLE_VAL;if (inputchar = .)Dataij = POINT_VAL;infilestream.close();int M = 1;while (N (1 TH)outfilestream 实验 *二维傅里叶变换核心算法*/#include / complexusing namespace std;typedef complex Comp; / 复数类型定义const float _2PI_ = 2.0f * 3.14159265f; / 常数 2PI 定义const int MAX_N = 256; / 最大 DF

6、T 点数/*-*-*-*-*-*-*-*-*-*-*-*-*FFT 算法模块接口定义*-*-*-*-*-*-*-*-*-*-*-*-*/ Function name : FFT_1D_Kernel/ Description : FFT 算法核心/ Return type : void / Argument : Comp* x 数据/ Argument : int M 幂次/ Argument : int flag 正逆变换标记void FFT_1D(Comp* x, int M, int flag)/ TODO./ Function name : FFT_2D_Kernel/ Descript

7、ion : 2D FFT 核心算法/ Return type : void / Argument : Comp xMAX_NMAX_N 二维数据/ Argument : int M 幂次/ Argument : int flag 正逆变换标记void FFT_2D(Comp xMAX_NMAX_N, int M, int flag)/ TODO./ 课程实验 2D-FFT“第一小问的主体框架“Xu Mingxing 2000-08-23Tsinghua University*/#include / cout#include / ifstream, ofstream /*-*-*-*-*-*-*

8、-*-*-*-*-*FFT 算法模块接口定义*-*-*-*-*-*-*-*-*-*-*-*/#include “MyFFT.H“ / 数值“ 的参数float POINT_VAL;cout POINT_VAL;float CIRCLE_VAL;cout CIRCLE_VAL;/ 设定 “数值 文本“ 的阈值float TH;cout TH;/ 打开数据文件 Data.TXTifstream infilestream(“Data.TXT“, ios:in);/ 读入图像数据的大小int N;infilestream N;cout MAX_N)cout inputchar;if (inputcha

9、r = o)Dataij = CIRCLE_VAL;if (inputchar = .)Dataij = POINT_VAL;infilestream.close();/ -/ 完成对数据的 2D-FFT 的正变换、频谱处理和逆变换int M = 1;while (N (1 TH)outfilestream / for “complex“using namespace std;typedef complex Comp; / 复数类型定义const float _2PI_ = 2.0f * 3.14159265f; / 常数 2PI 定义const int MAX_N = 256; / 最大 D

10、FT 点数/*-*-*-*-*-*-*-*-*-*-*-*-*FFT 算法模块接口定义*-*-*-*-*-*-*-*-*-*-*-*-*/ Function name : BitReverse/ Description : 二进制倒序操作/ Return type : int / Argument : int src 待倒读的数/ Argument : int size 二进制位数int BitReverse(int src, int size)int tmp = src;int des = 0;for (int i=size-1; i=0; i-)des = (tmp return des;

11、/ Function name : Reorder/ Description : 数据二进制整序/ Return type : void / Argument : Comp xMAX_N 待整序数组/ Argument : int N FFT 点数/ Argument : int M 点数的 2 的幂次void Reorder(Comp xMAX_N, int N, int M)Comp new_xMAX_N;for (int i=0; iN; i+)new_xi = xBitReverse(i, M);/ 重新存入原数据中(已经是二进制整序过了的数据)for (i=0; iN; i+)xi

12、= new_xi;/ Function name : CalcW/ Description : 计算旋转因子/ Return type : void / Argument : Comp WMAX_N 存放因子的数组/ Argument : int N FFT 的点数 / Argument : int flag 正逆变换标记void CalcW(Comp WMAX_N, int N, int flag)for (int i=0; iN/2; i+)if (flag = 1)Wi = exp(Comp(0, -_2PI_ * i / N); / 正 FFT 变换elseWi = exp(Comp(

13、0, _2PI_ * i / N); / 逆 FFT 变换/ Function name : FFT_1D_Kernel/ Description : FFT 算法核心/ Return type : void / Argument : Comp* x 数据/ Argument : int M 幂次/ Argument : int flag 正逆变换标记void FFT_1D(Comp* x, int M, int flag) int N = (1 M);/ 二进制整序Reorder(x, N, M);/ 旋转因子计算Comp WMAX_N;CalcW(W, N, flag);/ 级内群数int GroupNum = N/2; / 第一级的群数为 N/2/ 群内蝶形单元数int CellNum = 1; / 第一级的群内蝶形单元数为 1/ 处理各级for (int i=0; iM; i+)

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 教育教学资料库 > 课件讲义

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。