1 基本原理简介1.1 MATLAB 简介MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
1.2傅立叶变换基本原理傅里叶变换能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。
在不同的研究领域,傅里叶变换具有多种不同的变体形式,如连续傅里叶变换和离散傅里叶变换。
最初傅里叶分析是作为热过程的解析分析的工具被提出的[1]。
傅里叶变换属于谐波分析。
傅里叶变换的逆变换容易求出,而且形式与正变换非常类似。
正弦基函数是微分运算的本征函数,从而使得线性微分方程的求解可以转化为常系数的代数方程的求解。
在线性时不变的物理系统内,频率是个不变的性质,从而系统对于复杂激励的响应可以通过组合其对不同频率正弦信号的响应来获取。
卷积定理指出:傅里叶变换可以化复杂的卷积运算为简单的乘积运算,从而提供了计算卷积的一种简单手段。
离散形式的傅里叶变换可以利用数字计算机快速的实现(其算法称为快速傅里叶变换算法(FFT))。
MATLAB中提供的变换函数(1) fft2:用于计算二维快速傅立叶变换,语句格式:B=fft2(I,m,n) 按指定的点数计算m,返回矩阵B的大小为m×n,不写默认为原图像大小。
(2)fftn:用于计算n维快速傅立叶变换(3)fftshift:用于将变换后的图像频谱中心从矩阵的原点移到矩阵地中心,语法格式:B=fftshift(I)(4)ifft2:用于计算图像的二维傅立叶反变换,语法格式B=ifft2(i)(5)ifftn:用于计算n维傅立叶变换快速卷积实验:傅立叶变换一个重要特性是可以实现快速卷积。
设A为M×N矩阵,B为P×Q的矩阵,快速卷积方法如下:*对A和B补0,使其大小都为(M+P-1)×(N+Q-1)*利用fft2对矩阵A和B进行二维变换*将两个FFT结果相乘,利用ifft2对得到的乘积进行傅立叶反变换1.3滤波电路原理及基本滤波器电路介绍滤波的基本概念滤波是信号处理中的一个重要概念。
滤波分经典滤波和现代滤波。
经典滤波的概念,是根据富立叶分析和变换提出的一个工程概念。
根据高等数学理论,任何一个满足一定条件的信号,都可以被看成是由无限个正弦波叠加而成。
换句话说,就是工程信号是不同频率的正弦波线性叠加而成的,组成信号的不同频率的正弦波叫做信号的频率成分或叫做谐波成分。
只允许一定频率范围内的信号成分正常通过,而阻止另一部分频率成分通过的电路,叫做经典滤波器或滤波电路。
实际上,任何一个电子系统都具有自己的频带宽度(对信号最高频率的限制),频率特性反映出了电子系统的这个基本特点。
而滤波器,则是根据电路参数对电路频带宽度的影响而设计出来的工程应用电路。
用模拟电子电路对模拟信号进行滤波,其基本原理就是利用电路的频率特性实现对信号中频率成分的选择。
根据频率滤波时,是把信号看成是由不同频率正弦波叠加而成的模拟信号,通过选择不同的频率成分来实现信号滤波。
当允许信号中较高频率的成分通过滤波器时,这种滤波器叫做高通滤波器。
当允许信号中较低频率的成分通过滤波器时,这种滤波器叫做低通滤波器。
当只允许信号中某个频率范围内的成分通过滤波器时,这种滤波器叫做带通滤波器。
理想滤波器的行为特性通常用幅度-频率特性图描述,也叫做滤波器电路的幅频特性。
理想滤波器的幅频特性如图所示。
图中,w1和w2叫做滤波器的截止频率。
滤波器频率响应特性的幅频特性图对于滤波器,增益幅度不为零的频率范围叫做通频带,简称通带,增益幅度为零的频率范围叫做阻带。
例如对于LP,从-w1当w1之间,叫做LP的通带,其他频率部分叫做阻带。
通带所表示的是能够通过滤波器而不会产生衰减的信号频率成分,阻带所表示的是被滤波器衰减掉的信号频率成分。
通带内信号所获得的增益,叫做通带增益,阻带中信号所得到的衰减,叫做阻带衰减。
在工程实际中,一般使用dB作为滤波器的幅度增益单位。
低通滤波器的基本电路特点是,只允许低于截止频率的信号通过。
二阶低通Butterworth滤波电路如下:下图是用运算放大器设计的二阶低通Butterworth滤波电路。
2 课程设计的基本步骤2.1 检查图片格式info=imfinfo('3.jpg')info =Filename: '3.jpg'FileModDate: '24-Jun-2012 15:00:32'FileSize: 19289Format: 'jpg'FormatVersion: ''Width: 256Height: 256BitDepth: 24ColorType: 'truecolor'FormatSignature: ''NumberOfSamples: 3CodingMethod: 'Huffman'CodingProcess: 'Sequential'Comment: {}从网上下载了一个图像,用MATLAB检查发现是truecolor 格式,ColorType: 'truecolor'。
2.2用MATLAB将其转换为灰度图像a=imread('123.jpg');b=rgb2gray(a);imwrite(b,'456.jpg')>> info=imfinfo('456.jpg')info =Filename: '456.jpg'FileModDate: '24-Jun-2012 15:11:48'FileSize: 10711Format: 'jpg'FormatVersion: ''Width: 256Height: 256BitDepth: 8ColorType: 'grayscale'FormatSignature: ''NumberOfSamples: 1CodingMethod: 'Huffman'CodingProcess: 'Sequential'Comment: {}在 ColorType: 'grayscale' 属性行如此显示,则说明以456.jpg命名的文件为灰度图像2.3图像的二维傅立叶变换实验对一副灰度图片进行二维傅立叶变换,并且显示其幅度值(1)启动MATLAB,设置当前工作路径(2)在当前路径下的文件夹中拷入个灰度图片,“456.jpg”文件。
(3)输入如下命令,完成实验figure(1);RGB=imread('456.jpg');imshow(RGB);figure(2);B=fftshift(fft2(RGB));imshow(log(abs(B)),[]),colormap(jet(64)),colorbar;2.4二阶Butterworth低通滤波按照二阶Butterworth低通滤波器的表达式设计传递函数,对该频谱图像进行低通滤波,对滤波后的频谱图像作逆Fourier变换得到滤波结果,显示结果图I=imread('456.jpg');figure;subplot(2, 2, 1); imshow(I); title('张健原图像');J1 = imnoise(I, 'salt & pepper'); % 叠加椒盐噪声subplot(2, 2, 2); imshow(J1); title('张健加噪声图像');g = fft2(double(J1)); % 傅立叶变换g = fftshift(g); % 转换数据矩阵[M, N]=size(g);nn = 2; % 二阶巴特沃斯(Butterworth)低通滤波器d0 = 20;m = fix(M/2);n = fix(N/2);for i = 1:Mfor j = 1:Nd = sqrt((i-m)^2+(j-n)^2);h = 1/(1+0.414*(d/d0)^(2*nn)); % 计算低通滤波器传递函数result(i,j) = h*g(i,j);T(i, j) = h;endendresult = ifftshift(result);J2 = ifft2(result);J3 = uint8(real(J2));subplot(2, 2, 3); mesh(T); title('张健滤波器示意图')box on;% 显示滤波处理后的图像subplot(2, 2, 4); imshow(J3); title('张健滤波结果')2.5高斯低通滤波传递函数如下:I1=imread('456.jpg'); %读取图像s=fftshift(fft2(I));[M,N]=size(s); %分别返回s的行数到M中,列数到N中n=2; %对n赋初值%GLPF滤波,d0=5,15,30(程序中以d0=30为例)d0=30; %初始化d0n1=floor(M/2); %对M/2进行取整n2=floor(N/2); %对N/2进行取整for i=1:Mfor j=1:Nd=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离 h=1*exp(-1/2*(d^2/d0^2)); %GLPF滤波函数s(i,j)=h*s(i,j); %GLPF滤波后的频域表示endends=ifftshift(s); %对s进行反FFT移动%对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数s=uint8(real(ifft2(s)));figure; %创建图形图像对象imshow(s); %显示GLPF滤波处理后的图像title('张健GLPF滤波(d0=30)'); %为经GLPF滤波后的图像添加标题3. 用MATLAB得到的结果图原图如上上图是对该图像作Fourier变换,得到的频谱图像行低通滤波,对滤波后的频谱图像作逆Fourier变换得到滤波结果,显的示结果图对滤波后的频谱图像作逆Fourier变换得到滤波结果,显示的结果图4 二种滤波器的滤波结果的比较二阶Butterworth低通滤波电路直接采用频域分析方法得到其中k = 1+R1/R2 。