小波包及能量频谱的MATLab算法

合集下载

MATLAB小波变换指令及其功能介绍(超级有用)解读

MATLAB小波变换指令及其功能介绍(超级有用)解读

MATLAB小波变换指令及其功能介绍1 一维小波变换的 Matlab 实现(1) dwt函数功能:一维离散小波变换格式:[cA,cD]=dwt(X,'wname')[cA,cD]=dwt(X,Lo_D,Hi_D)别可以实现一维、二维和 N 维DFT说明:[cA,cD]=dwt(X,'wname') 使用指定的小波基函数 'wname' 对信号X 进行分解,cA、cD 分别为近似分量和细节分量;[cA,cD]=dwt(X,Lo_D,Hi_D) 使用指定的滤波器组 Lo_D、Hi_D 对信号进行分解。

(2) idwt 函数功能:一维离散小波反变换格式:X=idwt(cA,cD,'wname')X=idwt(cA,cD,Lo_R,Hi_R)X=idwt(cA,cD,'wname',L)函数 fft、fft2 和 fftn 分X=idwt(cA,cD,Lo_R,Hi_R,L)说明:X=idwt(cA,cD,'wname') 由近似分量 cA 和细节分量 cD 经小波反变换重构原始信号 X 。

'wname' 为所选的小波函数X=idwt(cA,cD,Lo_R,Hi_R) 用指定的重构滤波器 Lo_R 和Hi_R 经小波反变换重构原始信号 X 。

X=idwt(cA,cD,'wname',L) 和 X=idwt(cA,cD,Lo_R,Hi_R,L) 指定返回信号 X 中心附近的 L 个点。

2 二维小波变换的 Matlab 实现二维小波变换的函数别可以实现一维、二维和 N 维 DFT函数名函数功能---------------------------------------------------dwt2 二维离散小波变换wavedec2 二维信号的多层小波分解idwt2 二维离散小波反变换waverec2 二维信号的多层小波重构wrcoef2 由多层小波分解重构某一层的分解信号upcoef2 由多层小波分解重构近似分量或细节分量detcoef2 提取二维信号小波分解的细节分量appcoef2 提取二维信号小波分解的近似分量upwlev2 二维小波分解的单层重构dwtpet2 二维周期小波变换idwtper2 二维周期小波反变换-----------------------------------------------------------(1) wcodemat 函数功能:对数据矩阵进行伪彩色编码函数 fft、fft2 和 fftn 分格式:Y=wcodemat(X,NB,OPT,ABSOL)Y=wcodemat(X,NB,OPT)Y=wcodemat(X,NB)Y=wcodemat(X)说明:Y=wcodemat(X,NB,OPT,ABSOL) 返回数据矩阵 X 的编码矩阵Y ;NB 伪编码的最大值,即编码范围为 0~NB,缺省值 NB=16;OPT 指定了编码的方式(缺省值为 'mat'),即:别可以实现一维、二维和 N 维 DFTOPT='row' ,按行编码OPT='col' ,按列编码OPT='mat' ,按整个矩阵编码函数 fft、fft2 和 fftn 分ABSOL 是函数的控制参数(缺省值为 '1'),即:ABSOL=0 时,返回编码矩阵ABSOL=1 时,返回数据矩阵的绝对值 ABS(X)1. 离散傅立叶变换的 Matlab实现(2) dwt2 函数功能:二维离散小波变换格式:[cA,cH,cV,cD]=dwt2(X,'wname')[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D)说明:[cA,cH,cV,cD]=dwt2(X,'wname')使用指定的小波基函数'wname' 对二维信号 X 进行二维离散小波变幻;cA,cH,cV,cD 分别为近似分量、水平细节分量、垂直细节分量和对角细节分量;[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D) 使用指定的分解低通和高通滤波器 Lo_D 和 Hi_D 分解信号 X 。

Matlab中的小波变换技术详解

Matlab中的小波变换技术详解

Matlab中的小波变换技术详解1. 引言小波变换是一种数学工具,可将任意信号分解成不同尺度和频率成分。

它在信号处理、图像压缩等领域得到广泛应用。

Matlab作为一种功能强大的数值计算和数据可视化软件,提供了丰富的小波变换函数和工具箱。

本文将详细介绍Matlab中小波变换的原理、应用和实现方法。

2. 小波变换原理小波变换利用小波函数的一组基来表示信号。

小波函数是一种局部振荡函数,具有时域和频域局部化的特性。

通过将信号与小波函数进行内积运算,可以得到不同尺度和频率的小波系数,从而揭示信号的局部特征。

小波变换具有多分辨率分析的优势,能够在时间和频率上同时提供较好的分析结果。

3. 小波变换函数在Matlab中,可以使用wavelet工具箱提供的函数来进行小波变换。

最常用的函数是cwt,用于连续小波变换。

通过设置小波函数、尺度范围和采样频率等参数,可以得到连续小波系数矩阵。

另外,还有其他函数如dwt、idwt用于离散小波变换和反离散小波变换。

4. 小波函数小波变换的关键在于选择合适的小波函数。

常用的小波函数有多种,如哈尔、Daubechies、Symlets等。

这些小波函数在时域和频域上都有不同的特性,适用于不同类型的信号。

Matlab提供了丰富的小波函数库,可以根据需要选择合适的小波基函数。

5. 小波分析与信号处理小波变换在信号处理中有广泛的应用。

它可以用于信号去噪、特征提取、边缘检测等方面。

通过对小波系数进行阈值去噪,可以有效地去除信号中的噪声。

小波变换还能够提取信号的局部特征,捕捉信号的边缘信息。

此外,小波变换还可以用于图像压缩、图像分割等领域。

6. Matlab中的小波分析实例为了更好地理解Matlab中小波变换的应用,下面将给出一个实例。

假设我们有一个包含某种周期性成分和噪声的信号,我们希望通过小波变换将其分解成不同尺度的成分,并去除噪声。

首先,我们使用Matlab中的cwt函数对信号进行连续小波变换,并得到小波系数矩阵。

MATLAB中的时频分析方法与小波变换

MATLAB中的时频分析方法与小波变换

MATLAB中的时频分析方法与小波变换引言时频分析是一种将信号在时间和频率域上进行联合分析的方法。

在很多实际应用中,信号的频谱随时间的变化是非常重要的信息。

为了从信号中获得这种信息,人们已经开发了许多时频分析方法。

在MATLAB中,有许多工具和函数可以用于实现时频分析,其中小波变换是最常用和有效的方法之一。

本文将介绍MATLAB 中的时频分析方法和小波变换的原理以及如何在MATLAB中实现时频分析。

一、时频分析的概述时频分析是一种联合分析信号在时间和频率域上的方法。

传统的傅里叶变换只能提供信号的频谱信息,不能提供信号的时间信息。

而时频分析方法可以通过将信号分解为一系列窄带频率分量,在时间和频率上进行联合分析,从而获得信号的时频信息。

时频分析主要用途包括:信号处理、通信系统、音乐分析和地震学等领域。

在信号处理领域中,时频分析可以用来分析非平稳信号,在图像处理领域中,可以用于提取图像的纹理特征。

在音频处理领域中,时频分析可以用来分析不同乐器的音色特征。

在地震学领域中,时频分析可以用来分析地震信号的频谱和震级。

二、时频分析的方法时频分析方法有很多种。

常用的时频分析方法包括:短时傅里叶变换(STFT)、维纳-辛钦(Wigner-Ville)分布、光谱平均、希尔伯特-黄变换(HHT)等。

这些方法在不同的应用场景中有不同的适用性和性能。

在MATLAB中,有许多工具和函数可以用于实现时频分析。

其中,smallft函数可以用于计算信号的短时傅里叶变换。

spectrogram函数可以用于计算信号的谱图。

wvd函数可以用于计算信号的维纳-辛钦分布。

这些函数都可以通过设置一些参数来调整分析的精度和效果。

三、小波变换的原理小波变换是一种将信号分解为一系列小波基函数的方法。

小波基函数是带有局部特征的小波函数,通常在时域上具有紧凑支持和带通特性。

小波变换可以将信号分解为不同频率、不同时间的小波系数,从而实现时频分析。

小波变换具有许多优点,例如可以提供更好的时频局部化能力、提取信号中的瞬态特征和边缘信息等。

小波变换的matlab实现

小波变换的matlab实现
*
举例: A1=upcoef('a','cA1','db1',1,ls); D1=upcoef('d','cD1','db1',1,ls);
subplot(1,2,1);plot(A1);title('Approximation A1')
subplot(1,2,2);plot(D1);title('Detail D1')
重构原始信号
*
2D图形接口
*
显示
*
小波分析用于信号处理
01
信号的特征提取
信号处理
常用信号的小波分析
GUI进行信号处理
*
正弦波的线性组合
S(t)=sin(2t)+sin(20t)+sin(200t)
*
2019
间断点检测
01
2020
波形未来预测
02
2021
各分信号的频率识别
03
2022
信号从近似到细节的迁移
*
多尺度二维小波
命令:wavedec2
格式: [C, S]=wavedec2(X,N,’wname’) [C, S]=wavedec2(X,N,Lo_D,Hi_D)
*
[C,S] = wavedec2(X,2,'bior3.7'); %图像的多尺度二维小波分解
提取低频系数
命令:appcoef2 格式: 1. A=appcoef2(C,S,’wname’,N) 2. A=appcoef2(C,S,’wname’) 3. A=appcoef2(C,S,Lo_R,Hi_R) 4. A=appcoef2(C,S,Lo_R,Hi_R,N) cA2 = appcoef2(C,S,'bior3.7',2); %从上面的C中提取第二层的低频系数

小波包变换 matlab

小波包变换 matlab
end
能量谱函数
function E = wavelet_energy_spectrum( wpt,n )
%% 计算每一层每一个节点的能量
% wpt-wavelet packet tree
% n-第n层能量
%
% Author hubery_zhang
% Date 20170714
%%
% 求第n层第i个节点的系数
cfs2=wpcoef(wpt,[n 2]);
cfs3=wpcoef(wpt,[n 3]);
figure;
subplot(5,1,1);
plot(x);
title('原始信号');
subplot(5,1,2);
plot(cfs0);
title(['结点 ',num2str(n) ' 1',' 系数'])
% s4=X305_FE_time(1:1:10000,1);% 外圈12点位置情况下驱动端数据
n=3;
ji='db5';
wpt=wpdec(s1,n,ji);%使用db5小波包分解正常信号到底三层,使用shannon熵
% plot(wpt);
rcfs10=wprcoef(wpt,[n,0]);%利用相应的频段进行重构
% s1=X098_FE_time(1:1:10000,1);% 正常情况下驱动端数据
load in.mat;%加载内圈故障信号
% load fan_in.mat;%加载风扇端内圈故障信号
load 106.mat;
s2=X106_DE_time(19001:1:20000,1);% 内圈故障信号情况下驱动端数据

matlab 小波包分解

matlab 小波包分解

matlab 小波包分解
小波分析是一种分析时间-频率结构的信号处理方法,可以帮助提高信号处理和分析的精度。

小波包分解将信号进一步分解成多个子信号,在每个子信号上进行小波分析,以更加准确地描述信号特征。

在Matlab中,小波包分解的常用方法有:
1. 单层小波包分解:通过wavedec函数,可以将信号分解为一系列系数,然后可以使用wpcoef函数提取单层小波包分解。

freq参数指定每个分解分量中的子信号的编号。

2. 多层小波包分解:使用wpdec函数可以得到多层小波包分解,其中wplevel参数指定分解的层数。

3. 小波包重构:使用wprec函数进行小波包重构,其中T是存储小波包分解系数的数组,db1为小波基函数。

MATLAB之小波包变换

MATLAB之小波包变换
科学技术的迅速发展使人类进入了信息时代。在信息社会中人们在 各种领域中都会涉及各种信号(语音、音乐、医学信号、图像……)的 分析、加工、识别、传输和压缩、存储等问题。
Fourier变换:使用的是一种全局的变换,无法表述非平稳信号最根 本和最关键的时—频局域性质。 加窗Fourier变换:把时域和频域分解为大小相等的小窗口,对信号 的任何部分都采用相同的时间和频率分辨率,不能在时间和频率两个 空间同时以任意精度逼近被测信号。 小波变换:是一种窗口大小(即窗口面积)固定但形状可以改变,时 间窗和频率窗都可以改变的时—频局部化分析方法,在高频段频率分 辨率较差,而在低频段时间分辨率较差。 小波包变换:将频带部分多层次划分,对多分辨率分析没有细分的高 频部分进一步分解,并能够根据被分析信号的特征,自适应地选择相 应的频带,使之与信号频谱相匹配,从而提高了时频分辨率。
小波包的定义
设 ( x)和 ( x)分别是尺度函数和小波 函数 令 0 ( x)= ( x)
1 ( x)= ( x)
k l
2l ( x)
k
h (2 x k )
k

2l 1 ( x)
g (2 x k )
k l

定义的函数 n }称为关于尺度函数 ( x)的小波包。 {
小 波 去 噪
小 波 包 去 噪
Fourier变换
1、处理稳定 和渐变信号。 2、实时信号 处理。
加窗Fourier变换
1、处理渐变信号。 2、实时信号处理。
小波变换
1、处理突 变信号或 具有孤立 奇异性的 函数。 2、自适应 信号处理。
U
5 6 0 0
3 1
U U U U U U U U

用matlab小波分析的实例

用matlab小波分析的实例

1 绪论1.1概述小波分析是近15年来发展起来的一种新的时频分析方法。

其典型应用包括齿轮变速控制,起重机的非正常噪声,自动目标所顶,物理中的间断现象等。

而频域分析的着眼点在于区分突发信号和稳定信号以及定量分析其能量,典型应用包括细胞膜的识别,金属表面的探伤,金融学中快变量的检测,INTERNET的流量控制等。

从以上的信号分析的典型应用可以看出,时频分析应用非常广泛,涵盖了物理学,工程技术,生物科学,经济学等众多领域,而且在很多情况下单单分析其时域或频域的性质是不够的,比如在电力监测系统中,即要监控稳定信号的成分,又要准确定位故障信号。

这就需要引入新的时频分析方法,小波分析正是由于这类需求发展起来的。

在传统的傅立叶分析中,信号完全是在频域展开的,不包含任何时频的信息,这对于某些应用来说是很恰当的,因为信号的频率的信息对其是非常重要的。

但其丢弃的时域信息可能对某些应用同样非常重要,所以人们对傅立叶分析进行了推广,提出了很多能表征时域和频域信息的信号分析方法,如短时傅立叶变换,Gabor变换,时频分析,小波变换等。

其中短时傅立叶变换是在傅立叶分析基础上引入时域信息的最初尝试,其基本假定在于在一定的时间窗内信号是平稳的,那么通过分割时间窗,在每个时间窗内把信号展开到频域就可以获得局部的频域信息,但是它的时域区分度只能依赖于大小不变的时间窗,对某些瞬态信号来说还是粒度太大。

换言之,短时傅立叶分析只能在一个分辨率上进行。

所以对很多应用来说不够精确,存在很大的缺陷。

而小波分析则克服了短时傅立叶变换在单分辨率上的缺陷,具有多分辨率分析的特点,在时域和频域都有表征信号局部信息的能力,时间窗和频率窗都可以根据信号的具体形态动态调整,在一般情况下,在低频部分(信号较平稳)可以采用较低的时间分辨率,而提高频率的分辨率,在高频情况下(频率变化不大)可以用较低的频率分辨率来换取精确的时间定位。

因为这些特定,小波分析可以探测正常信号中的瞬态,并展示其频率成分,被称为数学显微镜,广泛应用于各个时频分析领域。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一根断条:>> %采样频率fs=10000;nfft=10240;%定子电流信号fid=fopen('duantiao.m','r');%故障N=2048;xdata=fread(fid,N,'int16');fclose(fid);xdata=(xdata-mean(xdata))/std(xdata,1);%功率谱figure(1);Y=abs(fft(xdata,nfft));plot((0:nfft/2-1)/nfft*fs,Y(1:nfft/2));xlabel('频率 f/Hz');ylabel('功率谱 P/W');

%3层小波包分解T=wpdec(xdata,3,'db4');%重构低频信号y1=wprcoef(T,[3,1]);%y1的波形figure(2);subplot(2,2,1);plot(1:N,y1);xlabel('时间 t/n');ylabel('电流 I/A');%y1的功率谱Y1=abs(fft(y1,nfft));subplot(2,2,2);plot((0:nfft/2-1)/nfft*fs,Y1(1:nfft/2));xlabel('频率 f/Hz');ylabel('功率谱 P/W');

图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。如:大面积的沙漠在图像中是一片灰度变化缓慢的区域,对应的频率值很低;而对于地表属性变换剧烈的边缘区域在图像中是一片灰度变化剧烈的区域,对应的频率值较高。傅立叶变换在实际中有非常明显的物理意义,设f是一个能量有限的模拟信号,则其傅立叶变换就表示f的谱。从纯粹的数学意义上看,傅立叶变换是将一个函数转换为一系列周期函数来处理的。从物理效果看,傅立叶变换是将图像从空间域转换到频率域,其逆变换是将图像从频率域转换到空间域。换句话说,傅立叶变换的物理意义是将图像的灰度分布函数变换为图像的频率分布函数,傅立叶逆变换是将图像的频率分布函数变换为灰度分布函数。这样通过观察傅立叶变换后的频谱图,也叫功率图,我们首先就可以看出,图像的能量分布,如果频谱图中暗的点数更多,那么实际图像是比较柔和的(因为各点与邻域差异都不大,梯度相对较小),反之,如果频谱图中亮的点数多,那么实际图像一定是尖锐的,边界分明且边界两边像素差异较大的。对频谱移频到原点以后,可以看出图像的频率分布是以原点为圆心,对称分布的。将频谱移频到圆心除了可以清晰地看出图像频率分布以外,还有一个好处,它可以分离出有周期性规律的干扰信号,比如正弦干扰,一副带有正弦干扰,移频到原点的频谱图上可以看出除了中心以外还存在以某一点为中心,对称分布的亮点集合,这个集合就是干扰噪音产生的,这时可以很直观的通过在该位置放置带阻滤波器消除干扰。另外我还想说明以下几点: 1、图像经过二维傅立叶变换后,其变换系数矩阵表明: 若变换矩阵Fn原点设在中心,其频谱能量集中分布在变换系数短阵的中心附近(图中阴影区)。若所用的二维傅立叶变换矩阵Fn的原点设在左上角,那么图像信号能量将集中在系数矩阵的四个角上。这是由二维傅立叶变换本身性质决定的。同时也表明一股图像能量集中低频区域。 2 、变换之后的图像在原点平移之前四角是低频,最亮,平移之后中间部分是低频,最亮,亮度大说明低频的能量大(幅角比较大)。

从计算机处理精度上就不难理解,一个长度为N的信号,最多只能有N/2+1个不同频率,再多的频率就超过了计算机所能所处理的精度范围)

X[]数组又分两种,一种是表示余弦波的不同频率幅度值:Re X[],另一种是表示正弦波的不同频率幅度值:Im X[],Re是实数(Real)的意思,Im是虚数(Imagine)的意思,采用复数的表示方法把正余弦波组合起来进行表示,但这里我们不考虑复数的其它作用,只记住是一种组合方法而已,目的是为了便于表达(在后面我们会知道,复数形式的傅立叶变换长度是N,而不是N/2+1)。

用Matlab实现快速傅立叶变换FFT是离散傅立叶变换的快速算法,可以将一个信号变换到频域。有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了。这就是很多信号分析采用FFT变换的原因。另外,FFT可以将一个信号的频谱提取出来,这在频谱分析方面也是经常用的。 虽然很多人都知道FFT是什么,可以用来做什么,怎么去做,但是却不知道FFT之后的结果是什意思、如何决定要使用多少点来做FFT。 现在就根据实际经验来说说FFT结果的具体物理意义。一个模拟信号,经过ADC采样之后,就变成了数字信号。采样定理告诉我们,采样频率要大于信号频率的两倍,这些我就不在此啰嗦了。 采样得到的数字信号,就可以做FFT变换了。N个采样点,经过FFT之后,就可以得到N个点的FFT结果。为了方便进行FFT运算,通常N取2的整数次方。 假设采样频率为Fs,信号频率F,采样点数为N。那么FFT之后结果就是一个为N点的复数。每一个点就对应着一个频率点。这个点的模值,就是该频率值下的幅度特性。具体跟原始信号的幅度有什么关系呢?假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A的N/2倍。而第一个点就是直流分量,它的模值就是直流分量的N倍。而每个点的相位呢,就是在该频率下的信号的相位。第一个点表示直流分量(即0Hz),而最后一个点N的再下一个点(实际上这个点是不存在的,这里是假设的第N+1个点,也可以看做是将第一个点分做两半分,另一半移到最后)则表示采样频率Fs,这中间被N-1个点平均分成N等份,每个点的频率依次增加。例如某点n所表示的频率为:Fn=(n-1)*Fs/N。由上面的公式可以看出,Fn所能分辨到频率为Fs/N,如果采样频率Fs为1024Hz,采样点数为1024点,则可以分辨到1Hz。1024Hz的采样率采样1024点,刚好是1秒,也就是说,采样1秒时间的信号并做FFT,则结果可以分析到1Hz,如果采样2秒时间的信号并做FFT,则结果可以分析到0.5Hz。如果要提高频率分辨力,则必须增加采样点数,也即采样时间。频率分辨率和采样时间是倒数关系。 假设FFT之后某点n用复数a+bi表示,那么这个复数的模就是An=根号a*a+b*b,相位就是Pn=atan2(b,a)。根据以上的结果,就可以计算出n点(n≠1,且n<=N/2)对应的信号的表达式为:An/(N/2)*cos(2*pi*Fn*t+Pn),即2*An/N*cos(2*pi*Fn*t+Pn)。对于n=1点的信号,是直流分量,幅度即为A1/N。由于FFT结果的对称性,通常我们只使用前半部分的结果,即小于采样频率一半的结果。 下面以一个实际的信号来做说明。假设我们有一个信号,它含有2V的直流分量,频率为50Hz、相位为-30度、幅度为3V的交流信号,以及一个频率(f0)为75Hz、相位为90度、幅度为1.5V的交流信号。用数学表达式就是如下:S=2+3*cos(2*pi*50*t-pi*30/180)+1.5*cos(2*pi*75*t+pi*90/180)。式中cos参数为弧度,所以-30度和90度要分别换算成弧度。我们以256Hz的采样率对这个信号进行采样,总共采样256点。按照我们上面的分析,Fn=(n-1)*Fs/N,我们可以知道,每两个点之间的间距就是1Hz,第n个点的频率就是n-1。我们的信号有3个频率:0Hz、50Hz、75Hz,应该分别在第1个点、第51个点、第76个点上出现峰值,其它各点应该接近0。实际情况如何呢?我们来看看FFT的结果的模值如图所示。从图中我们可以看到,在第1点、第51点、和第76点附近有比较大的值。我们分别将这三个点附近的数据拿上来细看: 1点: 512+0i 2点: -2.6195E-14 - 1.4162E-13i 3点: -2.8586E-14 - 1.1898E-13i 50点:-6.2076E-13 - 2.1713E-12i 51点:332.55 - 192i 52点:-1.6707E-12 - 1.5241E-12i 75点:-2.2199E-13 -1.0076E-12i 76点:3.4315E-12 + 192i 77点:-3.0263E-14 +7.5609E-13i 很明显,1点、51点、76点的值都比较大,它附近的点值都很小,可以认为是0,即在那些频率点上的信号幅度为0。接着,我们来计算各点的幅度值。分别计算这三个点的模值,结果如下: 1点: 512 51点:384 76点:192 按照公式,可以计算出直流分量为:512/N=512/256=2;50Hz信号的幅度为:384/(N/2)=384/(256/2)=3;75Hz信号的幅度为192/(N/2)=192/(256/2)=1.5。可见,从频谱分析出来的幅度是正确的。 然后再来计算相位信息。直流信号没有相位可言,不用管它。先计算50Hz信号的相位,atan2(-192, 332.55)=-0.5236,结果是弧度,换算为角度就是180*(-0.5236)/pi=-30.0001。再计算75Hz信号的相位,atan2(192, 3.4315E-12)=1.5708弧度,换算成角度就是180*1.5708/pi=90.0002。可见,相位也是对的。根据FFT结果以及上面的分析计算,我们就可以写出信号的表达式了,它就是我们开始提供的信号。

总结:假设采样频率为Fs,采样点数为N,做FFT之后,某一点n(n从1开始)表示的频率为:Fn=(n-1)*Fs/N;该点的模值除以N/2就是对应该频率下的信号的幅度(对于直流信号是除以N);该点的相位即是对应该频率下的信号的相位。相位的计算可用函数atan2(b,a)计算。atan2(b,a)是求坐标为(a,b)点的角度值,范围从-pi到pi。要精确到xHz,则需要采样长度为1/x秒的信号,并做FFT。要提高频率分辨率,就需要增加采样点数,这在一些实际的应用中是不现实的,需要在较短的时间内完成分析。解决这个问题的方法有频率细分法,比较简单的方法是采样比较短时间的信号,然后在后面补充一定数量的0,使其长度达到需要的点数,再做FFT,这在一定程度上能够提高频率分辨力。具体的频率细分法可参考相关文献。

附贴上上述例子的matlab程序:Matlab的例子(一)t=0:1/256:1;%采样步长y= 2+3*cos(2*pi*50*t-pi*30/180)+1.5*cos(2*pi*75*t+pi*90/180);N=length(t); %样点个数plot(t,y);fs=256;%采样频率df=fs/N;%分辨率f=(0:N-1)*df;%其中每点的频率Y=fft(y)/N*2;%真实的幅值%Y=fftshift(Y);figure(2)plot(f,abs(Y));

相关文档
最新文档