信号的频谱分析及MATLAB实现

2010-09-20 03:29张登奇杨慧银
关键词:栅栏傅里叶时域

张登奇 , 杨慧银

(湖南理工学院 信息与通信工程学院, 湖南 岳阳 414006)

信号的频谱分析及MATLAB实现

张登奇 , 杨慧银

(湖南理工学院 信息与通信工程学院, 湖南 岳阳 414006)

DFT是在时域和频域上都已离散的傅里叶变换, 适于数值计算且有快速算法, 是利用计算机实现信号频谱分析的常用数学工具. 文章介绍了利用DFT分析信号频谱的基本流程, 重点阐述了频谱分析过程中误差形成的原因及减小分析误差的主要措施, 实例列举了MATLAB环境下频谱分析的实现程序. 通过与理论分析的对比, 解释了利用DFT分析信号频谱时存在的频谱混叠、频谱泄漏及栅栏效应, 并提出了相应的改进方法.

MATLAB; 频谱分析; 离散傅里叶变换; 频谱混叠; 频谱泄漏; 栅栏效应

引言

信号的频谱分析就是利用傅里叶分析的方法, 求出与时域描述相对应的频域描述, 从中找出信号频谱的变化规律, 以达到特征提取的目的[1]. 不同信号的傅里叶分析理论与方法, 在有关专业书中都有介绍,但实际的待分析信号一般没有解析式, 直接利用公式进行傅里叶分析非常困难. DFT是一种时域和频域均离散化的傅里叶变换, 适合数值计算且有快速算法, 是分析信号的有力工具. 本文以连续时间信号为例,介绍利用DFT分析信号频谱的基本流程, 重点阐述频谱分析过程中可能存在的误差, 实例列出MATLAB环境下频谱分析的实现程序.

1 分析流程

实际信号一般没有解析表达式, 不能直接利用傅里叶分析公式计算频谱, 虽然可以采用数值积分方法进行频谱分析, 但因数据量大、速度慢而无应用价值. DFT在时域和频域均实现了离散化, 适合数值计算且有快速算法, 是利用计算机分析信号频谱的首选工具. 由于DFT要求信号时域离散且数量有限,如果是时域连续信号则必须先进行时域采样, 即使是离散信号, 如果序列很长或采样点数太多, 计算机存储和DFT计算都很困难, 通常采用加窗方法截取部分数据进行DFT运算. 对于有限长序列, 因其频谱是连续的, DFT只能描述其有限个频点数据, 故存在所谓栅栏效应. 总之, 用DFT分析实际信号的频谱,其结果必然是近似的. 即使是对所有离散信号进行DFT变换, 也只能用有限个频谱数据近似表示连续频谱; 如果对离散信号进行了加窗处理, 则会因截断效应产生吉伯斯现象; 倘若是连续信号, 则还会出现频谱混叠. 但如果合理选择参数, 分析误差完全可以控制在允许范围内, 利用DFT分析信号的频谱在工程上是完全可行的[2]. 分析信号频谱的基本流程如图1所示.

图1 信号频谱分析的基本流程

2 分析误差

利用DFT(实际是用FFT)对连续或离散信号进行频谱分析时, 如果信号连续一般要进行采样和截断,即使信号离散也往往需要进行加窗截断. 用有限的离散数据进行DFT变换, 得到有限个DFT数据值, 与原信号的频谱肯定不同, 这种不同就是分析误差. 下面按信号频谱分析的基本流程, 分别介绍误差形成的原因及减小分析误差的主要措施, 为实际分析过程中适当选择参数提供理论依据.

2.1 混叠现象

对连续信号进行频谱分析时, 先要对信号进行采样, 理论上要求采样频率sf必须大于两倍信号的最高频率[3]. 在满足采样定理条件下, 采样序列的数字频谱能准确反映连续信号的模拟频谱, 否则会发生频谱混叠现象. 严格地讲, 实际信号的持续时间有限、频谱无限, 为了尽可能减少频谱混叠, 信号在采样之前一般都要进行预滤波处理. 预滤波也不可能是理想低通, 所以频谱混叠不可避免. 在实际工作中, 为了减小频谱混叠的影响, 可通过适当提高防混叠滤波器的指标和适当增大采样频率来实现, 采样频率常取信号最高频率的2.5~3倍. 各类连续信号采样频率的选取原则与方法可参考文[2].

2.2 截断效应

利用计算机对离散序列或连续信号的采样序列进行DFT运算时, 往往要进行截断, 即将离散序列进行加窗处理. 对离散序列的加窗实际上是将离散序列与窗函数相乘, 加窗后信号的频谱是加窗前信号的频谱与窗函数频谱的卷积, 造成截断后信号的频谱与截断前信号的频谱不同, 这就是所谓截断效应. 截断效应对频谱分析的影响主要表现在两个方面:

(1) 频谱泄漏 原序列经截断后, 频谱会向两边展宽, 通常称这种展宽为泄漏. 频谱泄漏使频谱变模糊, 分辨率变差, 泄漏程度与窗函数幅度谱主瓣宽度有关. 窗型一定, 窗口越长, 主瓣越窄, 频谱泄漏越小. 窗口长度一定, 矩形窗主瓣最窄, 频谱泄漏最小, 但其旁瓣的幅度最大.

(2) 谱间干扰 对原序列截断, 频谱不仅会向附近展宽, 还会形成许多旁瓣, 引起不同频率间的干扰,简称谱间干扰. 特别是强信号谱的旁瓣可能湮没弱信号的主谱或误认为是另一假信号的主谱线. 矩形窗的旁瓣幅度大, 谱间干扰严重. 相对而言, 布莱克曼窗的旁瓣幅度比矩形窗小, 谱间干扰小, 但其主瓣过渡带宽, 分辨率差.

采样频率或采样周期是在满足混叠误差前提下选取的, 当采样频率或采样周期确定后, 适当增加窗口长度有利于减小截断效应. 工程上, 可用试探法确定窗口长度M, 即将M加倍, 分别进行DFT运算, 直到相邻两个长度的计算结果接近, 取长度较小的M, 这样既可满足截断效应要求, 又可使存储单元最小且运算速度最快. 如对频率分辨率有要求, 则窗口长度M可取或大于且接近该值的2的整数幂. 在窗口长度一定情况下, 如果希望引起频谱扩展的过渡带窄, 可选矩形窗, 但其旁瓣大, 谱间干扰严重. 若选用布莱克曼窗, 旁瓣幅度小, 谱间干扰相对较小, 但主瓣过渡带更宽, 分辨率会进一步下降[4].

2.3 栅栏效应

对加窗后的序列进行DFT运算时, DFT长度必须大于或等于加窗序列的长度, 否则会作自动截断处理.实际的DFT运算一般采用FFT算法, 其长度取大于或等于加窗序列的2的整数幂, 不足进行补零处理, 得到的DFT值是对加窗序列的连续谱进行等间隔取样的结果. 这就好比通过一个有很多缝隙的栅栏去观察一个连续频谱, 很多地方会被栅栏挡住, 故称栅栏效应. 在加窗序列的尾部补零可使频谱的取样点更密,相当于加密了栅栏的缝隙, 使原来看不到的谱分量可能看得到, 减小了栅栏效应, 但由于被观察的连续谱并没有发生变化, 故频率分辨率并没有提高, 最多只能说可视分辨率提高了[5]. 要提高信号的频率分辨率,选择主瓣窄的截断窗可有一定的改善, 但谱间干扰会更严重, 根本上只能通过增加原始信号的长度来实现.

3 分析实例

对信号进行频谱分析时, 由于信号不同, 傅里叶分析的频率单位也可能不同, 频率轴有不同的定标方式. 为了便于对不同信号的傅里叶分析进行对比, 这里统一采用无纲量的归一化频率单位, 即模拟频率对采样频率归一化; 模拟角频率对采样角频率归一化; 数字频率对2π归一化; DFT的k值对总点数归一化.同时, 为了便于与理论值进行对比, 理解误差的形成和大小, 这里以确定信号的幅度谱分析为例进行分析说明. 假设信号为:, 分析过程: 首先利用CTFT公式计算其模拟频谱的理论值; 然后对其进行等间隔理想采样, 得到序列, 利用DTFT公式计算采样序列的数字连续频谱理论值, 通过与模拟频谱的理论值对比, 理解混叠误差形成的原因及减小误差的措施; 接下来是对序列进行加窗处理, 得到有限长加窗序列, 再次利用DTFT公式计算加窗后序列的数字连续频谱, 并与加窗前的数字连续频谱进行对比, 理解截断误差形成的原因及减小误差的措施; 最后是对加窗序列进行DFT运算, 得到加窗后序列的DFT值, 它是对数字连续频谱进行等间隔采样的采样值, 通过对比, 理解栅栏效应及DFT点数对栅栏效应的影响. 利用MATLAB实现上述分析过程的程序如下:

clc;close all;clear;

%CTFT程序, 以x(t)=exp(-t) t>=0 为例

%利用数值运算计算并绘制连续信号波形

L=4, %定义信号波形显示时间长度

fs=4,T=1/fs; %定义采样频率和采样周期

t_num=linspace(0,L,100);%取若干时点, 点数决定作图精度

xt_num=exp(-1*t_num);%计算信号在各时点的数值

subplot(3,2,1);plot(t_num,xt_num),%绘信号波形

xlabel('时间(秒)'),ylabel('x(t)'),%加标签

grid,title('(a) 信号时域波形'),%加网格和标题

%利用符号运算和数值运算计算连续信号幅度谱的理论值

syms t W %定义时间和角频率符号对象

xt=exp(-1*t)*heaviside(t),%连续信号解析式

XW=fourier(xt,t,W),%用完整调用格式计算其傅氏变换

%在0两边取若干归一化频点, 点数决定作图精度

w1=[linspace(-0.5,0,50),linspace(0,1.5,150)];

XW_num=subs(XW,W,w1*2*pi*fs);%利用置换函数求频谱数值解

mag1=abs(XW_num);%计算各频点频谱的幅值

subplot(3,2,2);plot(w1,mag1),%绘制归一化频率幅值谱线

xlabel('频率(*2*pi*fs)rad/s'),ylabel('幅度'), %加标签

grid,title('(b) 连续信号幅频理论值'), %加网格和标题

%DTFT程序, 以x(n)=exp(-nT) n>=0 为例

%利用数值运算计算并绘制离散信号图形

N=L*fs+1;n_num=0:N-1;%生成信号波形采样点

xn_num=exp(-1*n_num*T);%计算信号理想采样后的序列值

subplot(3,2,3);stem(n_num,xn_num,'b.'),%绘序列图形

xlabel('n'),ylabel('x(n)'),%加标签

grid,title('(c) 理想采样图形'),%加网格和标题

%利用符号运算和数值运算计算离散信号幅度谱的理论值

syms n z w %定义符号对象

xn=exp(-n*T), %定义离散信号

Xz=ztrans(xn,n,z),%用完整调用格式计算其Z变换

%利用复合函数计算序列傅里叶变换的解析解

Z=exp(j*w);Hejw=compose(Xz,Z,z,w);

Hejw_num=subs(Hejw,w,w1*2*pi); %求频谱数值解

mag2=abs(Hejw_num);%计算各频点频谱的幅度

subplot(3,2,4);plot(w1,mag2*T), %绘制频谱幅度曲线

xlabel('频率(*2*pi)rad'),ylabel('幅度'), %加标签

grid,title('(d) 离散信号幅频理论值'), %加网格和标题

%序列加窗图示及频谱幅值绘制

%利用数值运算计算并绘制加窗后序列xw(n)的图形

M=8;win=(window(@rectwin,M))'; %定义窗点和窗型

xwn=xn_num.*[win,zeros(1,N-M)]; %给离散信号加窗

subplot(3,2,5);stem(n_num,xwn,'b.'), %加窗序列图示

xlabel('n'),ylabel('xw(n)'), %加标签

grid,title('(e) 加窗序列图形'), %加网格和标题

%利用符号运算和数值运算计算加窗序列的频谱幅值

%先求加窗序列的Z变换, 注意表达式长度限制问题

Xwz=0;for n=0:(M-1);Xwz = Xwz+xwn(n+1)*z^(-n); end

%利用复合函数计算加窗序列傅里叶变换的解析解

Zw=exp(j*w);HejwM=compose(Xwz,Zw,z,w);

HejwM_num=subs(HejwM,w,w1*2*pi);%求频谱数值解

mag3=abs(HejwM_num);%计算各频点频谱的幅度

subplot(3,2,6);plot(w1,mag3*T),%绘频谱幅度曲线

%利用DFT计算加窗序列xw(n)的离散谱幅值

Ndft=16, Xk=fft(xwn,Ndft);%定义DFT点数和DFT运算

Xk0=fftshift(Xk)*T;%将DFT值0对称和幅值加权处理

if mod(Ndft,2)==0; N1=Ndft; else N1=Ndft-1; end;

k=[0:(Ndft-1)]-N1/2;wk=k/Ndft;%0对称取值并归一化

hold on;stem(wk,abs(Xk0),'r.'),%绘制DFT图形

legend('幅谱','DFT',0),%加响应图例, 位置自动最佳

xlabel('归一化频率'),ylabel('幅度'),%加标签

grid,title('( f ) 加窗序列幅谱及其DFT幅值'),

plot(w1,mag1,'k:'),%与连续信号幅谱的理论值比较

该程序过程清晰、容易理解, 程序运行结果如图2所示. 图2(a)是信号的时域波形, 图2(b)是对应的幅度谱图. 由于在归一化频率为0.5的地方还有较大幅度,所以对信号进行理想采样后存在较大的混叠失真, 表现在图2(d)中归一化频率为-0.5~0.5范围内的波形与图2(b)的波形明显不同. 图2(e)是理想采样序列加矩形窗得到的图形,对应的幅度谱线如图2(f)中实线所示. 该谱线与图2(d)相比有明显的不同(如波动现象),这是加窗截断的结果. 窗口长度越短截断效应会越明显. 对加窗序列进行DFT运算, 只要DFT点数大于等于窗口长度,算出的DFT值就是对加窗序列的连续频谱在一个周期内进行的等间隔采样的采样值. 在图2(f)中表现为DFT幅值在加窗序列连续幅谱的谱线上, 是连续频谱曲线上的有限个数据点, 即所谓栅栏效应. 图2(f)中用虚线画出了连续信号的幅谱理论值, 与DFT的幅值对比, 存在一定误差, 但只要采样频率足够高, 时窗长度足够长, FFT点数足够大, 得到的DFT值越逼近实际频谱.

图2 频谱分析图解说明

4 结束语

利用傅里叶分析方法可以对各类信号进行频谱分析, DFT在时域和频域均实现了离散, 适合数值运算且有快速算法, 解决了利用计算机分析信号频谱的难题. 在实际分析过程中, 对连续信号先要进行采样,会出现频谱混叠现象. 对离散信号一般要进行加窗处理, 会出现频谱泄漏和谱间干扰等截断效应. 对加窗序列进行DFT运算, 只能得到该序列连续谱的等间隔取样数据, 故存在栅栏效应. 理解了各种误差形成的原因和可能产生的不良后果, 合理选择分析参数, 完全可以使分析结果在工程误差允许范围内.

[1] 吴湘淇. 信号与系统[M]. 第3版. 北京: 电子工业出版社, 2009

[2] 吴湘淇. 肖 熙, 郝晓莉. 信号、系统与信号处理的软硬件实现[M]. 北京: 电子工业出版社, 2002: 45~78

[3] John G. Proakis. 数字信号处理[M]. 方艳梅, 刘永清, 译. 北京: 电子工业出版社, 2006: 282~295

[4] 万建伟, 王 玲. 信号处理仿真技术[M]. 长沙: 国防科技大学出版社, 2008: 77~88

[5] 赵彦斌, 张永瑞. 信号谱分析中参数选择对频率分辨率的影响[J]. 电子科技, 2005,(11): 8~11

[6] 栗学丽, 刘 琚. “数字信号处理”教学中易混淆的问题讨论[J]. 电气电子教学学报, 2009,31(4): 39~41

[7] 汉泽西, 姚英彪. 用DFT分析正弦信号频谱时应注意的几个问题[J]. 西安石油学院学报, 2003,18(2): 67~70

[8] 张志勇. 精通MATLAB6.5[M]. 北京: 北京航空航天大学出版社, 2003

[9] 高西全, 丁玉美. 数字信号处理[M]. 第3版. 西安: 西安电子科技大学出版社, 2008: 95~105

[10] 刘顺兰, 吴 杰. 数字信号处理[M]. 第2版. 西安: 西安电子科技大学出版社, 2008: 137~145

Analysis of Signal Spectrum and Realization Based on MATLAB

ZHANG Deng-qi, YANG Hui-yin
(College of Information and Communication Engineering, Hunan Institute of Science and Technology, Yueyang 414006, China)

DFT is a Fourier Transform which is discrete both in time-domain and frequency-domain, it fits numerical calculation and has fast algorithm, so it is a common mathematical tool which can realize signal spectrum analysis with computer. This paper introduces the basic process of signal spectrum analysis with DFT, emphasizes the causes of error producing in spectrum analysis process and the main ways to decrease the analysis error, and lists the programs of spectrum analysis based on MATLAB. Through the comparison with the theory analysis, the problems of spectrum aliasing, spectrum leakage and picket fence effect are explained when using DFT to analyze signal spectrum, and the corresponding solution is presented.

MATLAB; spectrum analysis; DFT; spectrum aliasing; spectrum leakage; picket fence effect

TN911.6

A

1672-5298(2010)03-0029-05

2010-06-09

张登奇(1968- ), 男, 湖南临湘人, 硕士, 湖南理工学院信息与通信工程学院副教授. 主要研究方向: 信号与信息处理

猜你喜欢
栅栏傅里叶时域
双线性傅里叶乘子算子的量化加权估计
基于小波降噪的稀疏傅里叶变换时延估计
基于时域信号的三电平逆变器复合故障诊断
围栅栏
基于极大似然准则与滚动时域估计的自适应UKF算法
基于傅里叶变换的快速TAMVDR算法
基于时域逆滤波的宽带脉冲声生成技术
嘴巴里的栅栏
快速离散傅里叶变换算法研究与FPGA实现
基于时域波形特征的输电线雷击识别