可预置报警器设计_第1页
可预置报警器设计_第2页
可预置报警器设计_第3页
可预置报警器设计_第4页
可预置报警器设计_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、唐 山 学 院 数字电子技术 课 程 设 计 题 目 可预置报警器设计 系 (部) 信息工程系 班 级 11电信本1 姓 名 孙甲秀 学 号 4110215132 指导教师 马军爽 樊艳 2013 年 7 月 1 日 至 7 月 5 日 共 1 周2013年 7 月 5 日课程设计成绩评定表出勤情况出勤天数 缺勤天数成绩评定出勤情况及设计过程表现(20分)课设答辩(20分)说明书(20分)设计成果(40分)总成绩(100分)提问(答辩)问题情况综合评定 指导教师签名: 年 月 日目 录1 引言12 matlab简介23 设计思路33.1 总体框图33.2 总体思路34 基于matlab的fft

2、运算规律及编程思想44.1 图片的采集44.2 dit-fft算法的基本原理44.3 dit-fft算法的运算规律及编程思想55 matlab程序的实现86 系统人机对话界面106.1 gui界面106.2 界面设计106.3 运行调试127 总结13参考文献14附录115附录2181 引言随着信息时代的到来,计算机科学与技术突飞猛进地发展,数字信号处理已经成为一门极其重要的学科和技术领域。以dsp为核心芯片的处理系统日益变成了数字信号处理系统的主流。对于有限长序列x(n),若要求其n点的傅里叶变换(dft)需要经过次复数乘法运算和n*(n-1)次复数加法运算。随着n的增加,运算量将急剧增加,

3、而在实际问题中,n往往是较大的,如当n=1024时,完成复数乘法和复数加法的次数分别为百万以上,无论是用通用计算机还是用dsp芯片,都需要消耗大量的时间和机器内存,不能满足实时的要求。因此,dft的这种运算只能进行理论上的计算,不适合对实时处理要求高的场合。因此,研究作为dsp的快速算法的fft是相当必要的,快速傅里叶变换(fft)是为提高dft运算速度而采用的一种算法,快速算法的种类很多,而且目前仍在改进和提高,它是根据离散傅里叶变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。基于本学期所学的dit-fft的运算规律和编程思想以及matlab的学习和使用,本课设要求在mat

4、lab环境下编写基2 dit-fft算法实现对离散信号的快速傅里叶变换,再与matlab软件自带的fft函数实现对离散信号的傅里叶变换进行比较,如果得到的频谱相同,那么我们编写的程序就是正确的。我们通过这次课设任务,应用所学的知识,提高了独立设计能力,了解并掌握matlab的一般使用方法。进一步提高综合运用所学的理论知识独立分析和解决问题的能力,与人合作的能力,不断创新的能力,在设计中不断发现弱点,并总结提高。此次课设使我们进一步了解了实践,把知识用到了实践中,为我们以后毕业设计、工作需要提供了必须的基础。2 matlab简介matlab是矩阵实验室(matrix laboratory)的简称

5、,是美国mathworks公司出品的商数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括matlab和simulink两大部分。matlab的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用 matlab函数集)扩展了matlab环境,以解决这些应用领域内特定类型的问题。它以矩阵运算为基础,把计算、可视化、程序设计融合在一个简单易用的交互式工作环境中,是一款数据分析和处理功能都非常强大的工程适用软件。它可以将声音文件变换为离散的数据文件,然后利用其强大的矩阵

6、运算能力处理数据,如数据滤波、傅立叶变换、时域和频域分析、声音回放以及各种图的呈现等,它的信号处理与分析工具箱位语音信号分析提供了十分丰富的功能函数,利用这些功能函数可以快捷而又方便的完成语音信号的处理和分析以及信号的可视化。数字信号处理是matlab重要应用的领域之一。matlab既是一种直观、高效的计算机语言,同时又是一个科学计算平台。它为数据分析和数据可视化、算法和应用程序开发提供了最核心的数学和高级图形工具。操作界面如下图所示:图2-1 matlab操作界面3设计思路3.1总体框图 系统总体流程图如图3-1所示。图像信号采集完成信号时域图完成信号频率响应编写fft程序,画出信号频谱图实

7、现输入信号的倒序实现一级中不同种蝶形算运实现一级中相同种蝶形运算与matlab自带的fft比较图3-1系统总体框图3.2总体思路本设计要求选定一个图片,在matlab环境下编写基2dit-fft算法;利用自己编写的算法对已采集的图像进行频谱分析,并画出图像信号的时域与频谱图,并与matlab数字信号处理工具箱中的fft函数进行对比研究,验证自编算法的正确性。4基于matlab的fft运算规律及编程思想4.1图片的采集保存一张图片,格式为bmp,jpg或者是gif中的任何一种。x=imread(a.jpg) 实现了对图片的读取。if ndims(x)=3 x=rgb2gray(x);end这些代

8、码实现了对图片进行灰度变换,可以将原来是彩色的图片变换成黑白色,目的是为了取点时方便简单,而且速度更快,节省时间 。4.2 dit-fft算法的基本原理有限长序列x(n)的n点的dft定义为:基2fft算法基本思想是把原始的n点序列依次分解成一系列短序列,充分利用旋转因子的周期性和对称性,分别求出这些短序列对应的dft,再进行适当的组合,得到原n点序列的dft,最终达到减少运算次数,提高运算速度的目的。fft算法基本上可分为按时间抽取的fft算法(dit-fft)和按频率抽取的fft算法(dif-fft)。旋转因子的性质:(1)周期性(2)共轭对称性(3)可约性按时间下标的奇偶将n点x(n)分

9、别抽取组成两个n/2点序列,分别记为x1(n)和x2(n),将x(n)的dft转化为x1(n)和x2(n)的dft的计算,求出与之对应的x1(k)和x2(k),然后利用图4-1所示的运算流程进行蝶形运算,得到原n点序列的dft。只要n是2的整数次幂,这种分解就可一直进行下去直到其dft就是本身的1点时域序列。用蝶形运算可表示为如图4-1所示:图4-1 dit-fft蝶形运算流图符号当采用m次fft时,由n=2m求得m=logn,运算流图有m级蝶形,每一级都由n/2个蝶形运算构成,这样每一级蝶形运算都需要n/2次复数乘法和n次复数加法。m级运算共需要复数乘法次数为c=n/2*m,复数加法次数为c

10、=n*m。一个完整的8点dit-fft运算流程如下图所示。图4-2 8点dit-fft运算流程当n值较大时,fft减少运算量的特点表现的越明显。4.3 dit-fft算法的运算规律及编程思想为了编写dit-fft算法的运算程序,首先要分析其运算规律,总结编程思想并绘出程序框图。1. 原位计算对点的fft共进行m级运算,每级由n/2个蝶形运算组成。在同一级中,每个蝶的输入数据只对本蝶有用,且输出节点与输入节点在同一水平线上,这就意味着每算完一个蝶后,所得数据可立即存入原输入数据所占用的数组元素(存储单元),这种原位(址)计算的方法可节省大量内存。2. 蝶形运算实现fft运算的核心是蝶形运算,找出

11、蝶形运算的规律是编程的基础。蝶形运算是分级进行的;每级的蝶形运算可以按旋转因子的指数大小排序进行;如果指数大小一样则可从上往下依次蝶算。对点的fft共有m级运算,用l表示从左到右的运算级数(l=1,2,m )。第l级共有个不同指数的旋转因子,用r表示这些不同指数旋转因子从上到下的顺序(r=0,1,b-1)。第r个旋转因子的指数,旋转因子指数为p的第一个蝶的第一节点标号k从r开始,由于本级中旋转因子指数相同的蝶共有个,且这些蝶的相邻间距为,故旋转因子指数为p的最后一个蝶的第一节点标号k为:,本级中各蝶的第二个节点与第一个节点都相距b点。应用原位计算,蝶形运算可表示成如下形式: (j)= (j)+

12、 (j+b)* (j+b)= (j)-(j+b)* 总结上述运算规律,可采用如下运算方法进行dit-fft运算。首先读入数据,根据数据长度确定运算级数m,运算总点数,不足补0处理。然后对读入数据进行数据倒序操作。数据倒序后从第1级开始逐级进行,共进行m级运算。在进行第l级运算时,先算出该级不同旋转因子的个数(也是该级中各个蝶形运算两输入数据的间距),再从r=0开始按序计算,直到r=b-1结束。每个r对应的旋转因子指数,旋转因子指数相同的蝶从上往下依次逐个运算,各个蝶的第一节点标号k都是从r开始,以为步长,到(可简取极值n-2)结束。整个蝶形运算流程图如图4-2所示。图4-2 整个蝶形运算流程图

13、考虑到蝶形运算有两个输出,且都要用到本级的两个输入数据,故第一个输出计算完毕后,输出数据不能立即存入输入地址,要等到第二个输出计算调用输入数据完毕后才能覆盖。这样数据倒序后的运算可用三重循环程序实现。3. 序列倒序为了保证运算输出的x(k)按顺序排列,要求序列x(n)倒序输入,即在运算前要先对输入的序列进行位序颠倒。如果总点数为的x(n)的顺序数是用m位二进制数表示,则倒序数只需将顺序数的二进制位倒置即可,按照这一规律用硬件电路和汇编语言很容易产生倒序数。但用matlab等高级语言实现倒序时,直接倒置二进制数位的方法不可取,还须找出产生倒序的十进制规律。图4-2中数据倒序的程序流程图如图4-3

14、所示。图4-3倒序的程序流程图将十进制顺序数用i表示,与之对应的二进制数用ib表示。十进制倒序数用j表示,与之对应的二进制数用jb表示。jb是ib的位倒置结果,十进制顺序数i增加1,相当于ib最低位加1且逢2向高位进1,即相当于jb最高位加1且逢2向低位进1。jb的变化规律反映到j的变化分二种情况:如果jb的最高位是0 (j=n/2),则直接由加1 (j=n/2),则要先将最高位变0 (j=j-n/2),再在次高位加1 (j=j+n/4)。但次高位加1时,同样要判断0、1值,如果是0 (jn/4),则直接加1 (j=j+n/4),否则要先将次高位变0 (j=j-n/4),再判断下一位。依此类推

15、,直到完成最高位加1,逢2向右进位的运算。利用这一算法可按顺序数i的递增顺序,依次求得与之对应的倒序数j。为了节省内存,数据倒序可原址进行,当i = j时不需要交换,当i j时需要交换数据。另外,为了避免再次调换前面已经调换过的一对数据,只对ij的情况进行数据交换即可实现数据倒序操作。5 matlab程序实现matlab提供的fft函数是一个计算dft的智能程序,能自动选择快速算法进行dft运算。用a.jpg作为例子,运行调试程序。1. 程序运行开始时,首先点击filenewm-file,出现一个名为editor-untitled的对话框,然后输入程序代码,。2. 输入等程序代码在fft.m文

16、件中,如5-1所示。图5-1 代码输入窗口3. 运行后就会出现如图5-2所示的窗口。图5-2 matlab界面对图片进行进行fft变换,经观察,编写fft程序得到的图片与matlab中自带的fft函数得到的图总是基本一致,但是有细微差别,这是因为编写的快速傅里叶变换计算信号的n点傅里叶变换要求n为2 的整数次幂,不够的话信号将会被补零后运算,即参与运算的信号已经不同(差别很小),所以fft运算后的结果也不尽相同,所示图自然有细微的差别。由用matlab自带fft函数实现的频谱图与用matlab编写的fft程序实现的频谱图相比较,可知,两个算法计算后的结果几乎相同,验证了自编算法的正确性。6 系

17、统人机对话界面6.1 gui简介图形用户界面(gui),是一种提供人机交互的工具和方法。gui是包含图形对象,如窗口、图标、菜单和文本等图文并茂的用户界面。6.2 界面设计用matlab图形用户界面开发环境设计gui点的一般步骤是:1.进行界面设计。2.设计控件属性。3.进行m语言编程。以本设计要求为例介绍:首先运行matlab软件,输入guide,出现一个窗口,如图6-1所示。图6-1 新建gui窗口第一步,该选择本图形用户界面需要的控件:点击ok,就会出现gui的设计界面。按照设计思路,用七个推按钮(push button),六个轴对象(axes),摆好每个空间的位置,并设计数值水平对齐,

18、看起来更美观。设计界面如图6-2所示。图6-2 设计界面第二步,设置控件属性:双击组件可以设置文本框,推按钮的属性,如显示大小,名称和字体等。双击控件,出现属性菜单。设置好属性后就保存,系统自动生成一个.m文件。第三步,编写回调函数:组件事件的发生是通过回调函数进行工作的。控件设置完成后保存,然后运行gui(操作为ctrl+t),就会进入editor窗口,加入各个控件功能的函数代码。完成后保存即可,具体代码见附录。第四步,运行gui:运行editor窗口的程序后,会弹出已经激活的人机对话界面。系统人机对话界面如图6-3所示。图6-3 系统人机对话界面6.3 运行调试运行gui,已经弹出图6-3

19、所示的系统人机对话界面,然后点击各推按钮就会得到本设计的要求。运行结果如图6-4所示。如果运行结束,可以通过点击“退出”推按钮退出该人机对话界面,返回matlab。图6-4 运行结果7 总结为期两周的课程设计在紧张的节奏中接近尾声,时间虽然不是很长,但是这短时间的课设对我有很大的帮助,通过这次课设我发现了许多我应该注意的问题同时也学会了很多器件的用法。从通过设计任务的分析到功能的划分再到确定总体的设计方案,再到最后的每个功能部分的具体实现,整个过程都需要我们组的人充分利用所学的知识进行思考借鉴。可以说,本次课程设计是针对前面所学的知识的一次综合的检测。总的来说,这次课设虽然很累,但非常充实。本

20、次实习的主要内容是通过用matlab实现fft的设计,把自己编写的fft算法与matlab自带fft算法进行比较。通过本课程设计使学生了解数字图像的基本概念,掌握数字图像处理的基本内容,fft基本原理和matlab实现方法。让我掌握了如何学习一门语言,如何进行资料查阅搜集,如何自己解决问题等方法,养成良好的学习习惯。本次课程设计使我还明白了怎样使用matlab软件和gui界面,如何正确的编写代码,如何合理的进行设计与运行。程序运行调试初期,曾经多次出现错误、不能产生图形等问题,但在我翻阅资料认真改正及老师同学的帮助下基本功能还是完成了,经过1个星期的上机实习,程序已得到一些完善,能完成基本的要

21、求的功能。最后经过努力,又深入学习了图形用户界面(gui),完成了选做要求的人机对话界面。但在设计中还有很多不足之处,如果把所设计的应用到实践中,由于设计的时候设想的情况并不是很全面,所以还是需要提高的。不过这都是我今后实践和学习的宝贵经验,以上的不足之处我一定会克服,争取在今后的实践中不再出现上述的情况。我做完了课程设计学到了很多的知识与技能,从书本上学到的是我做课设的基础,是我学习的进一步的应用。通过这次课设我学会了,综合运用课程中所学到的理论知识去独立完成一个设计课题,通过查阅手册和文献资料,培养了我独立分析和解决实际问题的能力。这次课设虽然困难重重但是我感觉我收获很大。因为整个过程都需

22、要充分利用自己所学的知识进行思考借鉴,而且还需要额外补充很多知识。可以说,本次课程设计是针对前面所学的知识的一次比较综合的检测,又是对所学知识的一个补充。参考文献1 范寿康.dsp技术与dsp芯片.北京电子工业出版社,20082 程佩青.数字信号处理教程.北京清华大学出版社出版,20013 高西全,丁玉美等.数字信号处理.北京电子工业出版社,20094 余成波,陶红艳.数字信号处理及matlab 实现.北京清华大学出版社,2008 5 曹弋,赵阳.matlab实用教程.北京电子工业出版社,2007 6 奥本海姆.离散时间信号处理.科学出版社,20007 宗孔德,胡广书.数字信号处理.清华大学出

23、版社,1997附录1matlab源程序:function image_process_fft()x=imread(a.jpg); scrsz=get(0,screensize);figure(position,0 0 scrsz(3)-1 scrsz(4);set(gcf,name,快速傅里叶变换);subplot(2,3,1);imshow(x);title(原始图像);if ndims(x)=3 x=rgb2gray(x);endsubplot(2,3,4);imshow(x);title(灰度图像);r,c=size(x);array=x;t=log2(r);t1=floor(t);t2

24、=ceil(t);if t1=t2 array(2t2,c)=0;endr1,c1=size(array);t=log2(c1);t3=floor(t);t4=ceil(t);if t3=t4 array(r1,2t4)=0;endr1,c1=size(array);n=r1/2;data_col=zeros(1,n,double);for m=1:n data_col(m)=exp(-1i*2*pi*(m-1)/r1);endn=c1/2;data_row=zeros(1,n,double);for m=1:n data_row(m)=exp(-1i*2*pi*(m-1)/r1);endar

25、ray=transform_fft2(array);ft=fftshift(array);s1=log(1+abs(ft);subplot(2,3,2);imshow(s1,);title(自建fft2函数结果);array=transform_ifft2(array);array=abs(array);array=array(1:r,1:c);subplot(2,3,3);imshow(array,);title(自建ifft2函数结果);f=fft2(x);fc=fftshift(f);s=log(1+abs(fc);subplot(2,3,5)imshow(s,);title(内置fft

26、2函数结果);array=ifft2(f);array=round(abs(array);subplot(2,3,6);imshow(array,);title(内置ifft2函数结果);returnfunction array=transform_fft2(array)array=double(array);r1 c1=size(array);for j=1:r1 array(j,:)=transform_fft(array(j,:);endfor j=1:c1 array(:,j)=transform_fft(array(:,j);endfunction array1=transform_

27、fft(array)n=length(array);n=n/2;w=zeros(1,n,double); for m=1:n w(m)=exp(-1i*2*pi*(m-1)/n);end p=log2(n);array1=zeros(1,n,double);for q=1:p t1=2(q-1); t2=2(p-1); for k=0:(t2/t1-1) for j=0:(t1-1) if mod(q,2)=1 data1=array(k*t1+j+1); data2=array(k*t1+j+t2+1); array1(k*t1*2+j+1)=data1+data2; array1(k*t1

28、*2+j+t1+1)=(data1-data2)*w(k*t1+1); else data1=array1(k*t1+j+1); data2=array1(k*t1+j+t2+1); array(k*t1*2+j+1)=data1+data2; array(k*t1*2+j+t1+1)=(data1-data2)*w(k*t1+1); end end endendif mod(p,2)=1 return else array1=array; returnendfunction array=transform_ifft2(array) array=conj(array);r1,c1=size(a

29、rray);for i=1:r1 array(i,:)=transform_fft(array(i,:);endfor i=1:c1 array(:,i)=transform_fft(array(:,i);endarray=array/(r1*c1);附录2gui源程序:function varargout = untitled(varargin)gui_singleton = 1;gui_state = struct(gui_name, mfilename, . gui_singleton, gui_singleton, . gui_openingfcn, untitled_openingf

30、cn, . gui_outputfcn, untitled_outputfcn, . gui_layoutfcn, , . gui_callback, );if nargin & ischar(varargin1) gui_state.gui_callback = str2func(varargin1);endif nargout varargout1:nargout = gui_mainfcn(gui_state, varargin:);else gui_mainfcn(gui_state, varargin:);endfunction untitled_openingfcn(hobject

31、, eventdata, handles, varargin)handles.output = hobject;guidata(hobject, handles);function varargout = untitled_outputfcn(hobject, eventdata, handles)varargout1 = handles.output;function pushbutton1_callback(hobject, eventdata, handles)axes(handles.axes1);x=imread(a.jpg); imshow(x);title(原图);functio

32、n pushbutton2_callback(hobject, eventdata, handles)axes(handles.axes2);img=imread(a.jpg);f=rgb2gray(img);f=fft2(f);fs=fftshift(f);s=log(1+abs(fs);imshow(s,);title(内置fft图);function pushbutton3_callback(hobject, eventdata, handles)axes(handles.axes3);img=imread(a.jpg);f=rgb2gray(img);f=fft2(f);fs=ffts

33、hift(f); s=log(1+abs(fs);fr=real(ifft2(ifftshift(fs); ret=im2uint8(mat2gray(fr);imshow(ret,);title(内置ifft图);function pushbutton4_callback(hobject, eventdata, handles)axes(handles.axes4);x=imread(a.jpg);f=rgb2gray(x);imshow(f);title(灰度图);function pushbutton5_callback(hobject, eventdata, handles)axes(

34、handles.axes5);image=imread(a.jpg);if ndims(image)=3 image=rgb2gray(image);endr,c=size(image);array=image;t=log2(r);t1=floor(t);t2=ceil(t);if t1=t2 array(2t2,c)=0;endr1,c1=size(array);t=log2(c1);t3=floor(t);t4=ceil(t);if t3=t4 array(r1,2t4)=0;endr1,c1=size(array);n=r1/2;data_col=zeros(1,n,double);fo

35、r m=1:n data_col(m)=exp(-1i*2*pi*(m-1)/r1);endn=c1/2;data_row=zeros(1,n,double);for m=1:n data_row(m)=exp(-1i*2*pi*(m-1)/r1);endarray=transform_fft2(array);ft=fftshift(array);s1=log(1+abs(ft);imshow(s1,);title(自建fft图);function array=transform_fft2(array)array=double(array);r1 c1=size(array); for j=1

36、:r1 array(j,:)=transform_fft(array(j,:);endfor j=1:c1 array(:,j)=transform_fft(array(:,j);endfunction array1=transform_fft(array)n=length(array);n=n/2;w=zeros(1,n,double); for m=1:n w(m)=exp(-1i*2*pi*(m-1)/n);endp=log2(n);array1=zeros(1,n,double);for q=1:p t1=2(q-1); t2=2(p-1); for k=0:(t2/t1-1) for

37、 j=0:(t1-1) if mod(q,2)=1 data1=array(k*t1+j+1); data2=array(k*t1+j+t2+1); array1(k*t1*2+j+1)=data1+data2; array1(k*t1*2+j+t1+1)=(data1-data2)*w(k*t1+1); else data1=array1(k*t1+j+1); data2=array1(k*t1+j+t2+1); array(k*t1*2+j+1)=data1+data2; array(k*t1*2+j+t1+1)=(data1-data2)*w(k*t1+1); end end enden

38、dif mod(p,2)=1 return else array1=array; returnendfunction pushbutton6_callback(hobject, eventdata, handles)axes(handles.axes6);image=imread(a.jpg);if ndims(image)=3 image=rgb2gray(image);endr,c=size(image);array=image;t=log2(r);t1=floor(t);t2=ceil(t);if t1=t2 array(2t2,c)=0;endr1,c1=size(array);t=log2(c1);t3=floor(t);t4=ceil(t);if t3=t4 array(r1,2t4)=0;endr1,c1=size(array);n=r1/2;data_col=zeros(1,n,double);for m=1:n data_col

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论