首页 > 范文大全 > 正文

信号FFT谱分析算法及实现探析

开篇:润墨网以专业的文秘视角,为您筛选了一篇信号FFT谱分析算法及实现探析范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:快速傅里叶变换技术已成为数字信号处理强有力的工具。本论文尝试分析利用该算法实现图像去噪,还给出一种用Matlab系统实现信号频谱分析与显示的方法。

关键词:快速傅里叶变换;Matlab;图像去噪;频谱分析

中图分类号:TP31 文献标识码:A 文章编号:1007-9599 (2011) 23-0000-02

Signal fft Spectrum Analysis Algorithm and Implementation Study

Zhang Guo, Zheng Hongkai

(Chengdu Vocational College of Agricultural Science and Technology,Chengdu 611130,China)

Abstract:Fast Fourier transform techniques have become powerful tools for digital signal processing.This paper attempts to analyze the use of the algorithm for image denoising,but also gives a signal with Matlab system implementation and display spectral analysis method.

Keywords:Fast Fourier transform;Matlab;Image de-noising;Spectral analysis

一、引言

杜基从实际应用的角度提出了用采集的有限长时间序列通过计算相关函数而得到谱估计的方法,奠定了谱分析的实验基础, 被人们称为现代实验谱分析的先驱。1965年他与库利在前人研究成果的基础上,总结出快速傅立叶变换(FFT)算法,极大地减少了傅立叶变换的计算量。由于FFT的出现,大大加速了数字谱分析方法在实际中的应用,开创了数字信号处理的一个新里程。在使用数字信号处理技术的应用领域,FFT算法起着极为重要的作用 。

二、基于Matlab系统的信号FFT频谱分析与显示

在二维平面坐标上,将m作为横坐标,k作为纵坐标,把|X(m,k)|的值作为灰度作图,则得到x(n)的动态频谱图。

对|X(m,k)|的值实施伪彩色映射,可得到伪彩色的动态频谱图,以获得更好的分辨率和视觉效果,并增强频谱图的可读性。把|X(m,k)|的最小值Xmin映射为归一化的0电平,最大值Xmax映射为归一化的1电平,而将|X(m,k)|线性映射为O~1之间的电平值Ci。再利用彩色映射,计算机彩色监视器把Ci显示出来,则获得伪彩色显示的动态频谱图.为了充分利用彩色空间的动态范围,选择适当的基准频谱值Base.小于Base的频谱值都被限定在此基准电平上,而大于Base的谱值则被线性映射到由0~1的归一化彩色值.以C={c(m,k)}表示彩色值矩阵,由|X(m,k)|到c(m,k)的映射的数学表示如下:

其中

B(m,k)=

(一)伪彩色映射和频谱图显示。可直接调用的用于伪彩色映射和频谱图显示的Matlab功能函数主要包括:

1.伪彩色映射函数:colormap(MAP)。其中MAP是所采用的伪彩色映射矢量,它是一个64×3的矩阵。其第一、第二和第三列的值分别表示红色、绿色和蓝色的饱和度。例如,MAP=[0 0 0]表示一个纯黑的映射;MAP=[1 1 1]表示一个纯白的映射;MAP=[1 0 0]表示一个纯红的映射。MAP值也可以是Matlab的注册矩阵(64×3),如:MAP=hsv代表64个RGB色饱和度映射层次;MAP=gray是64个线性灰度值映射层次;MAP=hot是64个从黑-红-黄-白饱和度值递进映射层次;MAP=copper代表64个线性古铜色调的映射层次.

2.频谱图显示函数:imagesc(t,f,C)其中t是时间坐标,f是频率坐标,C则是从幅度谱值经伪彩色映射后的彩色电平值。如果整段语音的分帧数为M,则t是一个M维的行矢量,它的值是每帧起点所对应的时间序号。频谱的频域有效样点为N/2,所以,是一个N/2的行矢量,每个元素对应于频谱幅度值。相应地,C是一个M×(N/2)维的矩阵。

(二)流程示意图。整个FFT频谱分析与显示过程可用图2-1所示的流程图示意.

图2-1 分析与显示流程示意框图

(三)程序。以下给出实现上述方法的一个具体的Matlab程序实倒。

function spgram (SwaveFileNam,Winsiz,Shift,Base,Coltype);

[Signl,Fs]=wavread(SwaveFileNam);

nseg=floor((length(Signl)-Winsiz)/Shift)+1;

A=zeros(Winsiz/2+1,nseg);

for i= 1:nseg

n1=(i-1)*Shift+1; n2=n1+(Winsiz-1);

xx=Signl(n1:n2); xx= xx.*hamming(Winsiz);

y=myfft(xx); y=y(1:Winsiz/2+1);

y=y.*conj(y);y=10*log10(y);A(:,i)=y;

end

L1=(A>Base); L0=(A

C=(B-Base)./(max(max(B))-Base);

y=[0:Winsiz/2]*Fs/Winsiz; x=[0:nseg-1]*Shift;

if Coltype==1 colormap(hot);

else

mycoltype=gray; mycoltype=mycoltype(64:-1:1,:);

colormap(mycoltype);

end

imagesc(x,y,C); axis xy;

三、利用快速傅里叶变换去除图像噪声

图像的平滑处理技术即图像的去噪声处理,主要是为了去除实际成像过程中,因成像设备和环境所造成的图像失真,提取有用信息。众所周知,实际获得的图像在形成、传输、接收和处理的过程中,不可避免地存在着外部干扰和内部干扰,如光电转换过程中敏感元件灵敏度的不均匀性、数字化过程的量化噪声、传输过程中的误差以及人为因素等,均会使图像变质。因此,去除噪声,恢复原始图像是图像处理中的一个重要内容。

(一)相关的Matlab功能函数简介。可直接调用的用于伪彩色映射和频谱图显示的Matlab功能函数主要包括:

1.A=imread (FILENAME,FMT)用于读取图像文件,如果文件是灰阶图像,A是一个二维数组。如果文件是真彩图像时,是一种三维数组。FMT的是一个字符串,指明文件的格式。该文件必须在当前目录。

2.imshow(I,N)显示图像,如果省略参数N,imshow采用256级灰度,24位显示。

(二)流程示意图。整个图像去噪处理可用图3-1所示的流程图示意。

图3-1 图像去噪流程示意框图

(三)程序。以下给出实现上述方法的一个具体的Matlab程序实倒。

I=imread('原图片.jpg');

imshow(I);

title('原图片');

f=double(I); % 数据类型转换,MATLAB不支持图像的无符号整型的计算

g=fft2(f); % 傅立叶变换

g=fftshift(g); % 转换数据矩阵

[M,N]=size(g);

nn=2; % 二阶巴特沃斯(Butterworth)低通滤波器

d0=50;

m=fix(M/2);n=fix(N/2);

for i=1:M

for j=1:N

d=sqrt((i-m)^2+(j-n)^2);

h=1/(1+0.414*(d/d0)^(2*nn)); % 计算低通滤波器传递函数

result(i,j)=h*g(i,j);

end

end

result=ifftshift(result);

J2=ifft2(result);

J3=uint8(real(J2));

figure,imshow(J3); % 显示滤波处理后的图像

title('第一次去噪');

(四)说明。事先用文本编辑器把以上程序编成一个M-file文件。并保证所用的PC机上已正确安装Matlab系统。

“原图片.jpg”必须与M-file文件置于同一目录下。

(五)结果分析。图3-2是有噪声的原始图片,我们可以清楚地看到图片上有许多斑点,经过去第一次降噪处理后,斑点变得模糊,如图3-3。

我们紧接着对经过第一次降噪的图片继续进行降噪处理,可以看到,斑点越来越模糊。如图3-4、图3-5。

通过以上图片结果,可以看到,傅立叶变换能够在一定程度上将图像噪声降低。但是,理论上使用FFT能够将含有噪声的图像还原到与原图象差别很小的状态,可是根据以上结果,噪点在被柔化的同时,我们需要的图象信息也被柔化了,尤其是在面部的黑色噪点,它与面部同时柔化显得非常严重。

图3-2 原始有噪声图片 图3-3 经过第一次降噪处理后图片

图3-4 经过第二次降噪处理后图片 图3-5 经过第三次降噪处理后图片

我认为,造成这种情况是低通滤波器的原因,应该根据图象的实际情况选择或者设计合适的低通滤波器。设计针对不同噪声去噪的低通滤波器将是我下一步研究方向。

参考文献:

[1](美)William H.Press,Saul A.Teukolsky,William T.Veterling,Brian P.Flannery.C数值算法(第二版).傅祖芸,赵梅娜,丁岩石等译.北京:电子工业出版社,2004

[2]俞卞章.数字信号处理.西安:西北工业大学出版社,1993

[3]任淑艳等.应用VHDL语言的FFT算法实现[J].哈尔滨理工大学学报,2003,8(6):24~26

[4]程佩青.数字信号处理[M].北京:清华大学出版社,2002

[5]应启珩,冯一云,窦维蓓.离散时间信号分析和处理.北京:清华大学出版社,2001:1155―1591

[6]李勇,黄遵熹,俞卞章.基于移位离散付立叶变换的线性频率估计方法[J].西北工业大学学报,1995,13(3):414-4171

[作者简介]张果(1984,8-),男,汉族,党员,计算机专业硕士研究生,助教,成都农业科技职业学院教师;郑洪凯(1982,8-),男,汉族,党员,计算机专业硕士研究生,助教,成都农业科技职业学院教师。