时频分析 订阅
时频分布是一项让我们能够同时观察一个讯号的时域和频域资讯的工具,而时频分析就是在分析时频分布。传统上,我们常用傅里叶变换来观察一个讯号的频谱。然而,这样的方法不适合用来分析一个频率会随着时间而改变的讯号。 展开全文
时频分布是一项让我们能够同时观察一个讯号的时域和频域资讯的工具,而时频分析就是在分析时频分布。传统上,我们常用傅里叶变换来观察一个讯号的频谱。然而,这样的方法不适合用来分析一个频率会随着时间而改变的讯号。
信息
外文名
Joint Time-Frequency Analysis
概    述
设计时间和频率的联合函数
重要性
信号时域和频域之间具有紧密联系
中文名
时频分析
简    介
时频联合域分析
时频分析简介
时频分析(JTFA)即时频联合域分析(Joint Time-Frequency Analysis)的简称,作为分析时变非平稳信号的有力工具,成为现代信号处理研究的一个热点,它作为一种新兴的信号处理方法,近年来受到越来越多的重视。时频分析方法提供了时间域与频率域的联合分布信息,清楚地描述了信号频率随时间变化的关系。时频分析的基本思想是:设计时间和频率的联合函数,用它同时描述信号在不同时间和频率的能量密度或强度。时间和频率的这种联合函数简称为时频分布。利用时频分布来分析信号,能给出各个时刻的瞬时频率及其幅值,并且能够进行时频滤波和时变信号研究。 [1] 
收起全文
精华内容
下载资源
问答
  • 常用时频分析工具集,matlab运行环境,用作信号时频分析
  • Matlab时频分析工具箱,包含常用的时频分析函数
  • 时频分析

    2019-12-09 23:25:10
    时频分析的几种方法 时频分析算法主要有以下几种: FFT(傅里叶变换),只适合对稳定信号做分析,不能体现信号成分随着时间的变化 STFT(短时傅里叶变换),在FFT的基础上,加上一个窗函数。主要问题是:窗函数的...

    时频分析的几种方法

    时频分析算法主要有以下几种:

    FFT(傅里叶变换),只适合对稳定信号做分析,不能体现信号成分随着时间的变化

    STFT(短时傅里叶变换),在FFT的基础上,加上一个窗函数。主要问题是:窗函数的选取问题。窗太窄,窗内的信号太短,会导致频率分析不够精准,频率分辨率差。窗太宽,时域上又不够精细,时间分辨率低。

    小波变换

    EMD(经验模态分解)

    HHT(希尔伯特变换)

    展开全文
  • PTFR_时频分析_参数化时频分析_closelyhev_时频分析matlab.zip
  • 利用参数化时频分析方法绘制时频曲线的matlab程序
  • PTFR_时频分析_参数化时频分析_closelyhev_时频分析matlab_源码.zip
  • 时频分析matlab程序,包含主流的时频分析程序
  • 时频分析程序,时频分析方法,matlab源码
  • 小波分解变换,时频分析,可用于信号处理,信号特征提取
  • matlab时频分析之连续小波变换cwt

    万次阅读 多人点赞 2019-04-28 13:29:40
    matlab时频分析之连续小波变换cwt1 小波分析简介2 小波分析基本原理3 cwt的matlab实现 1 小波分析简介 和傅里叶变换比,小波变换和短时傅里叶变换都有着相同的优点,就是可以同时在时域和频域观察信号。所以小波...


    (2020年7月更新,第3节绘制了一个实部、虚部的关系图)

    1 小波分析简介

    和傅里叶变换比,小波变换和短时傅里叶变换都有着相同的优点,就是可以同时在时域和频域观察信号。所以小波变换非定常信号的分析中有很大的作用。

    有关短时傅里叶变换的文章,可以参见我之前写的:
    matlab时频分析之短时傅里叶变换 spectrogram
    https://blog.csdn.net/weixin_42943114/article/details/88735799

    和短时傅里叶变换相比,小波变换有着窗口自适应的特点,即高频信号分辨率高(但是频率分辨率差),低频信号频率分辨率高(但是时间分辨率差),而在工程中常常比较关心低频的频率,关心高频出现的时间,所以近些年用途比较广泛。

    在数学上,小波还有正交化等优点,应用领域广泛。
    但是,本文只讨论如何利用matlab实现cwt的时频分析

    2 小波分析基本原理

    小波的含义,即为时间上衰减快,和傅里叶的正弦波相比要短。
    一个典型的morlet小波如下图:
    在这里插入图片描述
    matlab有很多自带的小波函数,利用wavemngr(‘read’,1)可以进行小波的查看,利用waveinfo可以查看小波的相关信息。

    在时间域上,可以通过小波在时间上的移动,逐一比较不同位置的窗口信号,得到小波系数,小波系数越大,则证明小波与该段信号的拟合程度越好。计算中用小波函数与该窗口信号的卷积,作为该窗口下的小波系数。窗口的长度和小波的长度是相同的。
    在这里插入图片描述
    在频率域上,通过拉伸或压缩小波的长度,来改变小波的长短和频率,实现不同频率下的小波系数。相应的,窗口长度也会随着小波长度变化。由于高频处小波被压缩,时间窗变窄,使得时间分辨率更高。

    将不同频率下的小波系数组合起来,便得到了时频变换的小波系数图。
    在这里插入图片描述
    从图上可以看到,低频处频率分辨率要好于高频处的。小波时频图的特点为整体呈现高频处高而瘦,低频处矮而宽。

    小波中,一般用尺度scale来衡量小波的频率f,两者之间的转换关系为:
    s c a l e ∗ f = F s ∗ w c f scale * f=Fs * wcf scalef=Fswcf
    公式中,Fs代表信号的采样频率,wcf为小波的中心频率(wave central freq),在matlab里可以用 centfrq(wavename) 来查询。

    3 cwt的matlab实现

    matlab自带的有两种实现方式,一种是2006年版本推出的函数cwt,一种是2016年版本推出的函数cwt。两个函数名称相同,用法不同。
    (我也不知道为什么会这样。。。-_-||)

    由于名称一样,在使用中,要想调用不同的版本,只能用输入输出格式来区分。

    旧版本cwt用法为:

    coefs = cwt(x,scales,'wname')
    

    新版本cwt用法为:

    [wt,f] = cwt(x,wname,fs)
    

    最明显的区别在于,新版本取消了自定义尺度函数scales的功能。同时新版本还更新替换了一部分小波函数。旧版本支持 ‘haar’,‘db’,‘sym’,‘cmor’,‘mexh’,‘gaus’,‘bior’等小波,新版本支持’morse’, 'amor’和 'bump’小波。

    新版小波的介绍可以参见:
    https://ww2.mathworks.cn/help/wavelet/gs/choose-a-wavelet.html

    新版本的小波函数用法如下:

    % 定义信号信息
    fs=2^6;    %采样频率
    dt=1/fs;    %时间精度
    timestart=-8;
    timeend=8;
    t=(0:(timeend-timestart)/dt-1)*dt+timestart;
    L=length(t);
    
    z=4*sin(2*pi*linspace(6,12,L).*t);
    
    %matlab自带的小波变换
    %新版本
    figure(1)
    [wt,f,coi] = cwt(z,'amor',fs);
    pcolor(t,f,abs(wt));shading interp
    

    旧版本的小波函数用法如下:
    这里用到了cmor小波,以及频率转尺度的方法。

    % 定义信号信息
    fs=2^6;    %采样频率
    dt=1/fs;    %时间精度
    timestart=-8;
    timeend=8;
    t=(0:(timeend-timestart)/dt-1)*dt+timestart;
    L=length(t);
    
    z=4*sin(2*pi*linspace(6,12,L).*t);
    %旧版本
    wavename='cmor1-3'; %可变参数,分别为cmor的
    %举一个频率转尺度的例子
    fmin=2;
    fmax=20;
    df=0.1;
    
    f=fmin:df:fmax-df;%预期的频率
    wcf=centfrq(wavename); %小波的中心频率
    scal=fs*wcf./f;%利用频率转换尺度
    coefs = cwt(z,scal,wavename);
    figure(2)
    pcolor(t,f,abs(coefs));shading interp
    

    对于cmor小波Fc和Fb的选取,可以认为最终结果只与Fc*√Fb的乘积大小有关就行。实际应用中具体值需要根据最终效果选择。

    cmor小波最终得到的coefs小波系数,是一个复数矩阵,绝对值abs()代表信号的幅值,角度angle()代表信号的相位。一般用小波系数的实部real()来同时表示信号正负变化。
    在这里插入图片描述
    实部、虚部、相位、振幅的关系如下图所示:
    在这里插入图片描述

    其实cwt的原理很简单,就是用不同尺度的小波逐个窗口去卷积,得到小波系数矩阵。所以根据原理,可以自己编程实现小波变换。

    自己编程的cwt函数如下,这里主要算法参考了matlab官方的文档。这里我依然用的是cmor小波作为例子,morlet函数公式可以查询到,也可以用cmorwavf()函数调用:

    fs=2^6;    %采样频率
    dt=1/fs;    %时间精度
    timestart=-8;
    timeend=8;
    t=(0:(timeend-timestart)/dt-1)*dt+timestart;
    L=length(t);
    z=4*sin(2*pi*linspace(6,12,L).*t);
    
    %定义计算范围和精度
    fmin=2;
    fmax=20;
    df=0.1;
    totalscal=(fmax-fmin)/df;
    f=fmin:df:fmax-df;%预期的频率
    wcf=centfrq(wavename); %小波的中心频率
    scal=fs*wcf./f;
    
    %自己实现的小波函数
    coefs2=cwt_cmor(z,1,3,f,fs);
    figure(3)
    pcolor(t,f,abs(coefs2));shading interp
    
    
    %后面是函数
    function coefs=cwt_cmor(z,Fb,Fc,f,fs)
    %1 小波的归一信号准备
    z=z(:)';%强行变成y向量,避免前面出错
    L=length(z);
    %2 计算尺度
    scal=fs*Fc./f;
    
    %3计算小波
    shuaijian=0.001;%取小波衰减长度为0.1%
    tlow2low=sqrt(Fb*log(1/shuaijian));%单边cmor衰减至0.1%时的时间长度,参照cmor的表达式
    
    %3小波的积分函数
    iter=10;%小波函数的区间划分精度
    xWAV=linspace(-tlow2low,tlow2low,2^iter);
    stepWAV = xWAV(2)-xWAV(1);
    val_WAV=cumsum(cmorwavf(-tlow2low,tlow2low,2^iter,Fb,Fc))*stepWAV;
    %卷积前准备
    xWAV = xWAV-xWAV(1);
    xMaxWAV = xWAV(end);
    coefs     = zeros(length(scal),L);%预初设coefs
    
    %4小波与信号的卷积
    for k = 1:length(scal)    %一个scal一行
        a_SIG = scal(k); %a是这一行的尺度函数
    
        j = 1+floor((0:a_SIG*xMaxWAV)/(a_SIG*stepWAV));
            %j的最大值为是确定的,尺度越大,划分的越密。相当于把一个小波拉伸的越长。
        if length(j)==1 , j = [1 1]; end
        
        waveinscal = fliplr(val_WAV(j));%把积分值扩展到j区间,然后左右颠倒。f为当下尺度的积分小波函数
        
        %5 最重要的一步 wkeep1取diff(wconv1(ySIG,f))里长度为lenSIG的中间一段
        %conv(ySIG,f)卷积。
        coefs(k,:) = -sqrt(a_SIG)*wkeep1(diff(conv2(z,waveinscal, 'full')),L);
        %
    end
    end
    

    输出的结果如下,可以看到和matlab自带的函数得到的结果基本相同。
    在这里插入图片描述

    4 cwt的边缘效应与影响锥

    利用自带的cwt函数,可以很方便的绘制出影响锥。

    cwt(z)
    

    在这里插入图片描述
    由于小波计算中,小波系数是利用窗口函数和小波卷积而来的,当窗口在信号的边缘时,窗口内会存在一部分没有信号。这时,matlab就把窗口内这部分不完整的信号补零处理,凑够长度。

    此时由于信号在边缘被强制补零,导致信号会失真,具体在时频图中表示为频率变宽,信号强度降低。严重的时候,甚至整个低频部分都会出现失真。这就是cwt的边缘效应。

    为了确定边缘效应的影响,绘制出了一条影响曲线,曲线内部的信号影响小或者不受影响,曲线外部影响较大。曲线像一个锥形,高频处靠近两侧,低频处靠近中间,所以也被叫做影响锥。
    在这里插入图片描述
    所以根据边缘效应的原理,可以知道,之所以高频处影响范围小,是因为高频处小波被压缩,所以窗口更窄。低频处小波被拉伸,所以对应着窗口更宽。窗口的长度和小波的长度是相同的。

    关于影响范围的评价,有很多种,这里为了方便说明,我直接用小波的半长度作为影响范围,来绘制影响锥。具体的思路如下,我认为超过小波长度一半的范围都是失真的,然后通过频率求出每一点的小波长度,再在图上连线绘制出来。
    在这里插入图片描述

    代码如下,依然以cmor小波为例,为了反应相位的影响,这里用的是real():

    %小波变换展示
    clear
    fs=2^6;    %采样频率
    dt=1/fs;    %时间精度
    timestart=-8;
    timeend=8;
    t=(0:(timeend-timestart)/dt-1)*dt+timestart;
    L=length(t);
    
    z=sin(2*pi*5.*t)+sin(2*pi*9.*t)+sin(2*pi*15.*t);
    
    %定义范围
    wavename='cmor1-3'; %可变参数
    fmin=2;
    fmax=20;
    df=0.1;
    totalscal=(fmax-fmin)/df;
    f=fmin:df:fmax-df;%预期的频率
    wcf=centfrq(wavename); %小波的中心频率
    scal=fs*wcf./f;
    
    %旧版本
    coefs = cwt(z,scal,wavename);
    figure(2)
    pcolor(t,f,real(coefs));shading interp
    
    tlow2low=sqrt(1*log(1/0.001));%单边cmor衰减至0.1%时的时间长度
    tcoi41=tlow2low*scal;%小波一半长度
    bur=(tcoi41<L/2);
    fcoi4=f(bur);
    tcoi41=tcoi41(bur);
    tcoi42=-tcoi41+L;
    hold on
    plot(tcoi41/fs+timestart,fcoi4,'r','LineWidth',2)
    plot(tcoi42/fs+timestart,fcoi4,'r','LineWidth',2)
    hold off
    

    在这里插入图片描述

    5 cwt的重构——icwt

    如果用的是matlab新版的默认小波,那么可以直接把cwt之后小波系数icwt即可。

    load mtlb;
    wt = cwt(mtlb);
    xrec = icwt(wt);
    

    对于morlet小波,可以直接 sum(real(coefs),1) 来实现重构。但是,这里尺度最好用默认尺度,否则会出现重复叠加导致幅值出现问题。

    具体用法可以参见帮助文档。

    6 增加cwt的分辨率的wsst

    利用wsst可以显著的提高cwt的频率分辨率。具体用法如下:

    clear
    fs=2^6;    %采样频率
    dt=1/fs;    %时间精度
    timestart=-8;
    timeend=8;
    t=(0:(timeend-timestart)/dt-1)*dt+timestart;
    L=length(t);
    z=4*sin(2*pi*linspace(6,12,L).*t);
    
    [sst,f] = wsst(z,fs);
    figure(4)
    pcolor(t,f,abs(sst));shading interp
    

    与普通cwt的对比图如下:
    在这里插入图片描述
    左图是cwt的时频图,右图是wsst的时频图。
    wsst同样可以利用iwsst进行重构,具体方法可以参见iwsst的帮助文档。

    如果想要提高wsst的精度,可以在matlab里选中wsst,然后Ctrl+D进入wsst的代码界面,把里面的na参数,强行改的大一点。

    具体方法为在下面代码后,加上一个na=512(这里不一定是512,具体根据na实际值进行适当放大,在我这里的例子中,na=288。如果怕出错,建议备份)。

    na = noct*params.nv;
    na=512
    

    这样做的优点是,在不影响iwsst的运行结果的基础上,显著的提高分解的精度。

    在这里插入图片描述

    展开全文
  • 前言:为什么需要做时频分析 脑电信号为非平稳信号,不能直接使用傅里叶变换进行操作 时频分析将连续数据划分为一个个小片再做傅里叶变换 谱分析不能反映各个频段能量随时间的变化 1、时频分析的原理——卷积...

    前言:为什么需要做时频分析

    • 脑电信号为非平稳信号,不能直接使用傅里叶变换进行操作
    • 时频分析将连续数据划分为一个个小片再做傅里叶变换
    • 谱分析不能反映各个频段能量随时间的变化

    1、时频分析的原理——卷积(Convolution)

    上次提到的谱分析的原理是将需要处理的信号跟kernel函数进行点积处理,这样就能得到谱分析的结果,但是时频分析的是卷积
    其实和点积有相同的原理,只不过时频分析需要得到随时间变化的信息,所以需要这个kernel函数随着时间,不断的往前推进, 都做一个点积,这个流程就是一个卷积,但是因为是随着时间往前推进,在两端的地方难免存在一些信息的泄露,因此我们需要进行一些信息补充,称之为padding,用0补充,不影响原始结果,信息也不会泄露太多。
    在这里插入图片描述

    2、短时傅里叶变换(STFT)

    短时傅里叶变换又称为窗口傅里叶变换,是傅里叶变换简单的一个扩展,主要就是解决在谱分析中傅里叶的两个局限性,用于处理非平稳信号和随时间变换的power值的变化
    在这里插入图片描述
    短时傅里叶变换的原理是认为我们框选的一小部分信号(图中黄色虚线部分)是属于平稳信号,我们对这个框内的信号做傅里叶变换,得到不同频率下的power值变化,然后将它转换成在时域上显示

    这个有个问题,我们在原始信号处是得到一个时间窗的函数,最后我们得到的结果是一个时间点的数据,因为我们最后得到的一个时间点数据是根据附近的一些数据转换处理得到的,对应于时间窗中点的那个时间点,就是最后得到的结果,我们最后得到的时间点的power值,并不是真正的时间点上的power值,因为真正的单个时间点的值我们是得不到的,我们都是通过这个时间点临近的时间数据得出来的

    (STFT)短时傅里叶变换的缺点

    这个变换的窗口是没有自适应性的,只适合分析所有特征尺度大致相同的信号,不适合分析多尺度信号和突变信号

    时间段的长度在时间和频率分辨率之间提供了权衡:在较段的时间段以牺牲频率分辨率为代价提供更好的时间分辨率,而较长的时间段以牺牲时间分辨率为代价提供更好的频率分辨率

    测不准原理(The Uncertainty Principle)

    不能同时拥有任意好的时间和频率分辨率,如果想要更清晰的时间分辨率,将牺牲频率分辨率,反之亦然。

    一般情况我们选择一个折中,两者都能保持在一个平衡的状态下
    在这里插入图片描述
    这里用一个实例讲诉一下:
    在这里插入图片描述
    我们将原始信号提取出来,得到i一个能量主要集中在60hz的频段,那么我用不同长度的时间窗口进行提取,看一下不同长度时间窗口下的一个频率power值变化情况

    最左边的是短的最小的窗口,最右边是一个最长的窗口

    我们可以看到在第一个的时候,红色最深的部分是在1s左右的附近,很明显,这个时候时间分辨率比较高,在时间上面体现的比较明显,随着窗口的长度的加大,表示频率的信息被压缩,越来越接近真正的频率范围处,最后得到了在60hz附近的一个信息显示,这个时候时间上就会变得比较模糊

    滑动时间窗
    • 时间窗口的长度固定,与频率无关——短时傅里叶变换
    • 时间窗口的长度随着频率的增加而减小(频率越高,时间窗的长度越短)
      在这里插入图片描述

    3、小波变换(wavelet Analysis)

    小波变换是近三十年来才发展起来的一种数学工具,是继一百多年前傅里叶分析之后的又一个重大突破

    对应各个频段适应的时间分辨率(随频率变化的窗口长度)

    • 低频对应长的窗口
    • 高频对应短的窗口
      在这里插入图片描述
      小波母函数不单单是指一种函数,而是可以是符合条件的多种函数的一个集合,组成小波族
      在这里插入图片描述
      我们比较多的应用的是Morlet函数
    Morlet小波变换的实现过程

    (1)先得到Morlet小波基:给出某个频率段范围的一个sin函数
    (2)然后使用高斯窗函数跟上面的函数进行相乘
    (3)最后我们得到的就是Morlet小波基
    (4)然后们将得到的函数和需要处理的信号进行卷积处理,就可以得到Morlet小波变换
    在这里插入图片描述
    高斯窗函数的n是代表高斯函数的宽度的,而且小波基的函数也和高斯窗函数呈现正比关系,所以我们可以通过修改高斯窗函数的n修改小波基的宽度
    在这里插入图片描述
    小波宽度(周期)决定时频分辨率,“长”小波导致频率分辨率相对较窄,但是时间分辨率较差
    “短”小波导致更宽的频率分辨率,但是更精确的时间分辨率

    小波变换也可以作为一种带通滤波的手段

    三者比较(傅里叶变换、短时傅里叶变换、小波变换)

    在这里插入图片描述
    我们原似乎得到的信号是一个时域的信号,得到的只有一个随时间变化的power信息,分别使用三种变换进行处理

    1. 首先进行傅里叶变换,这个变换不需要用到窗口函数,最后得到的是各个频段上面的信息,没有了随时间变化的信息
    2. 第二个是使用了短时傅里叶变换,设定一个固定的窗口,就可以得到一个具有固定时间分辨率和频率分辨率的一个结果
    3. 通过使用小波变换,根据不同的频率可以使用不同长度的时间窗口函数,最后得到的结果是在高频的时候我能够获得一个好的时间分辨率,在低频的时候我能很好的获得一个频率分辨率
      在这里插入图片描述

    总结

    一、傅里叶变换

    适用于平稳信号
    没有反映出随时间变化的信号频率成分的变化情况

    二、短时傅里叶变换

    窗口是固定的,无法满足非稳态信号变化的频率的需求

    三、小波变换

    随频率改变的"时间-频率"窗口
    适合于分析非稳态信号和提取信号的局部特征
    对信号具有自适应性

    参考来源:
    https://www.bilibili.com/video/BV1M5411W72B

    展开全文
  • 传统时频分析方法,包含STFT等matlab算法
  • MATLAB时频分析算法和相关函数,非常实用
  • MATLAB时频分析工具箱-MATLAB时频分析工具箱.rar MATLAB时频分析工具箱 matlab_time_frequency.JPG
  • 用于时频分析的广义s变换变换代码(时频分析特别有用),采用matlab编写
  • Matlab 时频分析工具箱,matlab时频分析工具箱安装,matlab源码
  • 时频分析matlab代码分析 tftb tftb(时频工具箱)是用于使用SciPy和matplotlib进行时频分析和可视化构建的Python模块。 tftb项目是由FrançoisAuger,Olivier Lemoine,PauloGonçalvès和Patrick Flandrin开发的...
  • 小波变换及短时傅里叶变换
  • 一种时频分析方法,EWT,经验小波分析工具箱
  • EWT经验小波分析_小波时频分析_时频分析_EWT_经验小波分析工具箱_经验小波.zip
  • 时频分析的toolboxb时频分析技术及其应用part1
  • EWT经验小波分析_小波时频分析_时频分析_EWT_经验小波分析工具箱_经验小波_源码.rar
  • 提出了一种新的时频分析(TFA)方法,称为参数STFT(PSTFT)。 并且它可以实现对强非平稳信号的理想 TF 表示。 相应的论文“A method to the Ideal time-frequency representation for strong non-stationary ...
  • 这段代码可以帮助我们为强非... 我的研究兴趣包括盲源分离、模态识别、时频分析、机器状态监测、故障诊断和瞬时声压级计算。 我想找一个博士后职位继续相关的研究。 有人可以为我提供合适的职位吗? 我对此非常感激。
  • 自适应时频分析工具包及其中文手册。 内核程序是c++写的,GUI是matlab函数。 其时频分辨率远高于短期傅立叶变换。 用法:将tfagui.m和tfagui.fig解压到matlab的存在路径中,然后将atfr.exe解压到系统路径中(例如“C...
  • 针对时频分析方法STFT、WVD和CWD进行了分析对比,并给出了对比指标及其性能分析

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,977
精华内容 1,990
关键字:

时频分析