数字信号处理课设基于MATLAB的FFT算法的设计Word格式文档下载.docx
- 文档编号:20322595
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:36
- 大小:526.49KB
数字信号处理课设基于MATLAB的FFT算法的设计Word格式文档下载.docx
《数字信号处理课设基于MATLAB的FFT算法的设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数字信号处理课设基于MATLAB的FFT算法的设计Word格式文档下载.docx(36页珍藏版)》请在冰豆网上搜索。
周期性
共轭对称性
可约性
本次课设要求用用基2的按时间抽取的FFT算法(DIT-FFT)实现FFT功能,设序列x(n)的长度为N,且N满足N=2M,M为正整数。
若N不能满足上述关系,可以将序列x(n)补零实现。
按时间抽取基2-FFT算法的基本思路是将N点序列按时间下标的奇偶分为两个N/2点序列,计算这两个N/2点序列的N/2点DFT,计算量可减小约一半;
每一个N/2点序列按照同样的划分原则,可以划分为两个N/4点序列,最后,将原序列划分为多个2点序列,将计算量大大降低。
按时间下标的奇偶将N点x(n)分别抽取组成两个N/2点序列,分别记为
和
,将x(n)的DFT转化为x1(n)和x2(n)的DFT的计算。
利用旋转因子的可约性,即:
用蝶形运算可表示为如图2-1所示:
图2-1DIT-FFT蝶形运算流图符号
以此类推,还可以把
按n值得奇偶分为两个序列,这样就达到了降N得目的,从而减少了运算量。
FFT对DFT的数学运算量改进:
直接采用DFT进行计算,运算量为
次复数乘法和
次复数乘法。
当采用M次FFT时,由
求得M=logN,运算流图有M级蝶形,每一级都由N/2个蝶形运算构成,这样每一级蝶形运算都需要N/2次复数乘法和N次复数加法。
M级运算共需要复数乘法次数为
,复数加法次数为
。
当N值较大时,FFT减少运算量的特点表现的越明显。
3基于MATLAB的FFT算法实现与分析
3.1MATLAB简介
MATLAB是“矩阵实验室”(MATrixLLABoratoy)的缩写,是目前应用极为广泛的一种集科学运算、程序运算、高质量的图形可视化与界面设计,以便于与其它程序和语言接口的软件。
目前,MATLAB已成为自动控制、数字信号处理、动态系统仿真等诸多学科极有效的工具。
MATLAB启动后,产生的工作环境界面如下图3-1所示,它包含一个工作栏、三个区域、四个工作窗口。
中四个工作窗口分别为指令窗口(CommandWindows)、指令历史窗口(commondhistory)、工作空间窗口(workspace)和当前路径窗口(currentdirectory)。
图3-1MATLAB默认的用户界面
图3-1是MATLAB启动后桌面布置方式的默认设置。
MATLAB的指令窗口(CommandWindows)是MATLAB十分重要的做成部
分,是用户与MATLAB交互的工具。
MATLAB的功能是通过大量的函数或者指
图3-2MATLAB的指令窗口
令来实现的,这些函数有些可以通过MATLAB的图形用户界面直接使用,而大多数函数是通过MATLAB的指令窗口,由用户直接键入相应的函数或命令来调用。
在MATLAB指令历史窗(commondhistory)中主要记录了在MATLAB窗中输入的所有指令,还可以被再次执行。
它们不仅能够复制到MATLAB的指令窗口,还可以通过这些指令的记录直接创建M文件。
图3-3MATLAB的指令历史窗
MATLAB中工作空间(workspace)是运行MATLAB的函数或指令所生成的所有变量和MATLAB常量构成的空间。
工作空间和指令窗的区别是,指令窗是一个实体,他是用户输入函数和程序的一个窗体,大多数变量都是通过这个窗体产生的,保留了指令窗运行的所有变量。
工作空间窗就是显示目前保存在内存中的MATLAB的数学结构、字节数、变量名,以及类型的窗口。
图3-4MATLAB的工作空间窗口
可以在指令窗中执行pathtool,或者在MATLAB桌面、指令窗的菜单中选择File|Path打开路径设置对话框,即当前路径(currentdirectory)窗。
其主要作用是帮助用户组织管理当前路径下的M文件,并且通过该工具,能够运行、编辑相应的文件,加载MATLAB数据文件等,这些操作都可以通过对应的右键快捷菜单完成。
图3-5当前路径窗
M文件编辑/调制窗是一个及编辑和调试两种功能于一体的工作环境。
如果一个程序稍复杂一些,则需要采用文件方式,把程序写成一个由多条语句构成的文件,就需要用到文本编辑器。
在MATLAB文本编辑器窗口中建立的文件默认为.m文件。
图3-6MATLAB的M文件窗口
以上为MATLAB功能简介方便对此软件的了解,下属程序就是采MATLAB进行运算,以实现想要的结果。
3.2MATLAB中FFT算法实现程序
3.2.1原图程序及分析
实现读取原始图像并且显示出来的程序段如下:
[filename,pathname]=uigetfile({'
*.jpg;
*.tif;
*.bmp;
*.gif'
},'
FileSelector'
);
image=imread(strcat(pathname,filename));
scrsz=get(0,'
ScreenSize'
figure('
position'
[00scrsz(3)-1scrsz(4)]);
set(gcf,'
Name'
'
快速傅里叶变换'
subplot(2,4,1);
imshow(image);
title('
原始图像'
MATLAB处理结果如下:
图3-7原始图像
上图是通过选择图片,并将图片显示出来的原始图像。
3.2.2灰度图程序及分析
实现原始图像变成灰度图像并且显示出来的程序段如下:
ifndims(image)==3
image=rgb2gray(image);
end
%figure('
subplot(2,4,2);
灰度图像'
图3-8灰度图像
上图是通过原始图像经过灰度处理变成的灰度图像。
3.2.3自建的FFT程序及分析
自编的FFT算法程序如下:
functionarray=transform_fft2(array)
array=double(array);
[r1c1]=size(array);
forj=1:
r1
array(j,:
)=transform_fft(array(j,:
));
c1
array(:
j)=transform_fft((array(:
j)));
利用自编的FFT算法实现对灰度图像处理的程序段如下:
array=transform_fft2(array);
Ft=fftshift(array);
S1=log(1+abs(Ft));
subplot(2,4,3);
imshow(S1,[]);
自建FFT2函数结果'
图3-9自建FFT结果
上图是利用自编FFT算法实现对图像的FFT变换处理结果。
3.2.4自建的IFFT程序及分析
自编的FFT算法程序段如下:
functionarray=transform_ifft2(array)
array=conj(array);
[r1,c1]=size(array);
fori=1:
array(i,:
)=transform_fft(array(i,:
i)=transform_fft(array(:
i));
array=array/(r1*c1);
利用自编的IFFT算法实现对灰度图像处理的程序段如下:
array=transform_ifft2(array);
array=abs(array);
array=array(1:
r,1:
c);
subplot(2,4,4);
imshow(array,[]);
自建IFFT2结果'
图3-10自建IFFT结果
上图是利用自编IFFT算法实现对图像的IFFT变换处理结果。
3.2.5内置的FFT程序及分析
利用MATLAB自带的FFT算法实现对灰度图像处理的程序如下:
F=fft2(image);
FC=fftshift(F);
S=log(1+abs(FC));
subplot(2,4,7)
imshow(S,[]);
内置FFT2结果'
图3-11MATLAB自带FFT结果
上图是利用MATLAB自带FFT算法实现对图像的FFT变换处理结果。
3.2.6内置的IFFT程序及分析
利用MATLAB自带的IFFT算法实现对灰度图像处理的程序段如下:
array=ifft2(F);
array=round(abs(array));
subplot(2,4,8);
内置IFFT2结果'
图3-12MATLAB自带FFT结果
3.3自建FFT与内置FFT图形及比较
利用自建FFT和MATLAB自带的FFT算法实现对灰度图像处理如下:
图3-13自建FFT结果图3-14MATLAB自带FFT结果
上图3-13是利用自建的FFT对图片进行的变换处理,图3-14是利用MATLAB自带的FFT函数对图片进行的处理。
比较两图可以看出自建的FFT结果比自带的图片颜色稍深,而且自建的FFT结果中的频域图像与自带FFT结果频域图像稍有不同。
3.4IFFT结果与原灰度图形及比较
IFFT算法是在对图像进行FFT算法处理的基础上对图片进行的快速傅里叶反变换。
利用自建IFFT实现对灰度图像处理如下图所示。
下图3-11是利用自建的IFFT对图片进行的变换处理,图3-12是原灰度图。
图3-15自建IFFT结果图3-16灰度图像
上图3-15是利用自建的IFFT对图片进行的变换处理,图3-16是原灰度图。
比较两图可以看出而且自建的FFT结果和原灰度图大致相同稍有不同,而且没有原图的清晰度高,但是能够基本正确的经FFT后反变换回原图,实现了时域变换到频域又边换到时域的过程。
4FFT算法用GUI的实现与分析
4.1GUI简介
图形用户界面(GraphicalUserInterfaces,GUI)是一种人机交互的工具和方法。
GUI是包含图形对象,如窗口、图标、菜单和文本等图文并茂的用户界面。
用AMTLAB图形用户界面开发环境的一般步骤是:
(1)进行界面设计.
(2)设置控制属性。
(3)进行M语言编程。
在MATLAB中启动GUI,进入可GUI默认窗口界面,这里选择空白界面类型(BlackGUI),单击“OK”按钮,MATLAB中启动GUI,如下图4-1所示是GUI的界面。
图4-1具有空白界面的GUI
在GUI空白界面中,位于中央的深色部分为绘制控件的画布,拖动右下角小黑点可以调整画布尺寸大小。
在GUI左侧的为MATLAB控制面板。
控制面板的外观可以通过设置GUIDE的属性进行简要的修改,选择GUIDE中的“File”菜单下的“Preferences”命令,在弹出的对话框中选择“ShownamesinComponentpalette”复选框,单击“OK”按钮后,控制面板中在不同的控件旁边会显示相应控件的名称,如下图4-3所示。
从控制面板中选择上述控件,用鼠标将控件拖动到画布上。
一般组件在没有编辑属性前,其属性值都是默认值。
打开属性属性编辑器的方法是双击器件。
组建事件的发生是通过回调函数进行工作的。
回调函数是用户用户指定组件需要完成的一个动作函数。
一个组件中可以包含多个回调函数,但是每一组都有的属性是Callback属性。
图4-2GUI属性对话框图4-3显示控件名称
GUIDE可以创建一个M回调函数文件的构架,文件将自动处理并将所有的语柄传递到handles结构数组中。
Handles是GUI中一个特殊的结构数组,它是GUI中所有组件共用的一个结构,该结构中包含了所有界面对象的Tag属性,通过该属性可以直接获取或者修改控件性质,而且在handles结构数组中还可以添加用户自定义的,在不同的回调函数之间共享的数据。
为了能够创建M构架文件,还需要执行“tools”菜单下的“GUIOption”命令。
在弹出的对话框中选择“GenerateFIG-fileandM-file”单选框,在激活界面的同时,执行相应的M文件,如图4-4所示。
编写好回调函数后,就可以直接运行GUI。
图4-4选择生成M文件的属性
以上为GUI功能简介方便对此的了解,下属程序就是采用GUI进行实现,以实现想要的结果。
4.2GUI实现FFT算法
4.2.1界面设计
用MATLAB图形用户界面开发环境设计GUI点的一般步骤是:
第一步,该选择本图形用户界面需要的控件:
9个推按钮(Pushbutton),用来运行和退出。
8个轴对象(axes)用来显示两个原图,两个灰度图,自建FFT结果图,自建IFFT结果图,内置FFT结果图和内置IFFT结果图。
完成人机设计界面如下图所示:
图4-5完成人机界面
第二步,设置控件属性:
双击组件可以设置文本框,推按钮的属性,如显示大小,名称和默认值等。
第三步,编写回调函数。
组件事件的发生是通过回调函数进行工作的。
控件设置完成后保存,然后运行GUI(操作为ctrl+T),就会进入editor窗口,加入各个控件功能的函数代码。
完成后保存即可。
第四步,运行GUI。
运行editor窗口的程序后,会弹出已经激活的人机对话界面。
系统人机对话界面如图4-6所示。
图4-6系统人机对话界面
pushbutton1的作用是实现输出原图,pushbutton2的作用是实现输出灰度图,pushbutton3的作用是实现输出自建FFT结果,pushbutton4的作用是实现输出自建IFFT结果,pushbutton5的作用是实现输出原图,pushbutton6的作用是实现输出灰度图,pushbutton7的作用是实现输出内置FFT结果,pushbutton8的作用是实现输出内置IFFT结果。
4.2.2运行调试
运行GUI,已经弹出图4-6的系统人机对话界面,根据推按钮就会得到本设计的要求。
运行结果如图4-7所示。
如果运行结束,可以通过点击“退出”推按钮退出该人机对话界面,返回MATLAB。
图4-7GUI运行结果
按下原图按钮能在axes1中输出原图,按下原图按钮能在axes2中输出灰度图,按下原图按钮能在axes3中输出自建FFT结果图,按下原图按钮能在axes4中输出自建IFFT结果图,按下原图按钮能在axes5中输出原图,按下原图按钮能在axes6中输出灰度图,按下原图按钮能在axes7中输出内置FFT结果图,按下原图按钮能在axes8中输出内置IFFT图,按下退出则退出界面。
4.3运行结果分析比较
比较利用自建FFT和MATLAB自带的FFT算法实现对灰度图像处理两图可以看出两图大致相同稍有不同。
自建的FFT结果比自带的图片颜色稍深,而且自建的FFT结果中的频域图像与自带FFT结果频域图像稍有不同。
比较IFFT结果与原灰度图两图可以看出FFT结果和原灰度图稍有不同,而且没有原图的清晰度高,但是能够基本正确的经FFT后反变换回原图,实现了时域变换到频域又边换到时域的过程。
5总结体会
这次的设计,给我的印象很深。
刚拿到课程设计的题目时侯感觉这次课程设计的内容不太难,但是当开始进行设计的时候感觉原理比较简单,但是程序的实现比较难。
后来在查了一些资料和计算后对各个参数的选择有了大致的了解,然后在老师的帮助下经过多次的的修改终于设计出比较满意的作品。
通过本次课程设计,对本课题有了一定的了解。
但是,在对该课题有一定的了解的前提下,也发现了很多问题。
认识到理论与实践之间的差距,联系实际的应用去理解只是比一大堆理论来的直接与清晰明了。
在设计中难免会遇到很多学习中不会注意到的问题,比如说在FFT算法设计的过程中,根据参考考资料编写的算法程序总是运行不正确,后来在老师的指导下发现应该对二维图像进行编写程序,在好事的帮助下终于做出了比较好的设计。
在软件MATLAB平台上所做的GUI界面,可以清楚地看到设计的结果。
利用MATLAB软件可以对DSP许多试验进行实现,且具有组建快捷、方便、波形图像直观、效果理想等优点。
做课程设计同时也是对课本知识的巩固和加强,由于课本上的知识太多,平时课间的学习并不能很好的理解和运用,而且考试内容有限,所以在这次课程设计中,我们了解了很多MATLAB功能,并且对于其在MATLAB的使用有了更多的认识。
认识来源于实践,实践是认识的动力和最终目的,实践是检验真理的唯一标准。
所以这个课程设计对我们的作用是非常大的,同时通过这次课程设计使我懂得了理论与实际结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考能力。
此次课程设计学到了许多可能学不到的东西,比如多利思考解决问题的能力,出现差错的随机应变,和与人合作共同提高,我们都受益匪浅,今后的制作应该更加轻松。
最后感谢指导老师和同学给我的帮助。
参考文献
[1]苏金明,张莲花,刘波.MATLAB工具箱应用[M].电子工业出版社
[2]奥本海姆.离散时间信号处理[M].科学出版社,2000
[3]宗孔德,胡广书.数字信号处理[M].清华大学出版社,1997
[4]程佩青.数字信号处理教程[M].北京:
清华大学出版社出版,2001
[5]高西全,丁玉美等.数字信号处理[M].北京:
电子工业出版社,2009
[6]陈杰.Matlab宝典[M].电子工业出版社
附录I
functionimage_process_FFT()
[filename,pathname]=uigetfile({'
subplot(2,4,5);
subplot(2,4,6);
[r,c]=size(image);
array=image;
t=log2(r);
t1=floor(t);
t2=ceil(t);
ift1~=t2
array(2^t2,c)=0;
t=log2(c1);
t3=floor(t);
t4=ceil(t);
ift3~=t4
array(r1,2^t4)=0;
n=r1/2;
data_col=zeros(1,n,'
double'
%按列方向计算时用到的
form=1:
n
data_col(m)=exp(-1i*2*pi*(m-1)/r1);
n=c1/2;
data_row=zero
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字信号 处理 基于 MATLAB FFT 算法 设计