zoukankan      html  css  js  c++  java
  • 同态包络提取

    同态滤波的简介

    信号被看作是控制信号幅度的缓慢变化分量和表示信号的振荡部分的快速变化分量的乘积。

    x(t)=a(t)o(t)a(t)>0
    a(t) 是幅度分量,o(t)是振荡分量。
    两边同时去对数
    ln|x(t)|=ln|a(t)|+ln|o(t)|
    因此可以使用线性低通滤波器滤除高频成分,得到
    L(ln|x(t)|)=L(ln|a(t)|)+L(ln|o(t)|)L(ln|a(t)|)
    使用不同的节段频率的Butterworth滤波器可以得到滤波后对数域信号。
    最后将反变换就得到了同态包络
    Hen=exp(L(ln|x(t)|))a(t)

    实现步骤:

    (1)使用butter设计Butterworth滤波器对信号滤波,获得传输函数
    (2)对信号做Hilbert变换,求频带信号
    (3)使用零相滤波器filtfilt提取同态包络

    Matlab 中使用butter函数设计Butterwroth滤波器

    巴特沃斯滤波器的特征在于其幅度响应在通带最大限度地平坦和整体单调。在通带和阻带为了单调性牺牲了滚降陡度。除非需要巴特沃斯滤波器的平滑度,否则椭圆或切比雪夫滤波器通常可以提供更陡峭的滚降特性,滤波器阶数更低。

    输出零极点形式

    [z,p,k] = butter(n,Wn)

    设计一个具有归一化截止频率Wn的低通数字巴特沃斯滤波器。 它返回长度为n的列向量z和p中的零点和极点,以及标量k中的增益.

    [z,p,k] = butter(n,Wn,'ftype')

    设计一个滤波器,类型可由‘ftype’指定。‘ftype’可取一下4种:
    ‘high’ 设计一个具有归一化截止频率Wn高通滤波器
    ‘low’ 设计一个具有归一化截止频率Wn低通滤波器
    ‘stop’ 设计一个2*n 阶带阻滤波器,如果Wn是一个二元向量Wn=[W1 W2], 阻带为W1<W<W2.
    ‘bandpass’ 设计一个2*n 阶带通滤波器,如果Wn是一个二元向量Wn=[W1 W2], 通带为W1<W<W2
    如果Wn是一个二元向量Wn=[W1 W2], ‘ftype’默认设计一个带通滤波器。

    截止频率是滤波器的幅度响应为12的频率。归一化截止频率Wn必须是介于0和1之间,其中1对应于奈奎斯特频率,每个样本π弧度。

    输出为传输函数(transfer function)形式

    [b,a] = butter(n,Wn)

    返回长度为n+1的行向量滤波系数b和a,系数为z的降幂,如下式

    H(z)=b(1)+b(2)z1+˙+b(n+1)zn1+a(2)z1++a(n+1)zn

    [b,a] = butter(n,Wn,'ftype')

    设计4种不同滤波器,类型可由‘ftype’指定,同上。

    输出状态空间的形式

    [A,B,C,D] = butter(n,Wn) 
    [A,B,C,D] = butter(n,Wn,'ftype')

    其中A, B ,C ,D为一下方程的解:

    x[n+1]=Ax[n]+Bu[n]
    y[n]=Cx[n]+Du[n]

    Matlab中使用bilbert函数做Hilbert变换

    x = hilbert(xr)
    x = hilbert(xr,n)

    返回信号x=xr+ixi, 虚部信号xi与xr有90°的相位差。xi具有和原始信号相同的幅度和频率信息。

    x = hilbert(xr,n)

    使用n点FFT计算Hilbert变换,将输入数据补0或者截取成长度为n的数据。

    Matlab中使用filtfilt函数做零相滤波

    y = filtfilt(b,a,x)

    filtfilt沿着x的第一个非单引号运行,正向和反向对数据做零相滤波。矢量b提供滤波器的分子系数,矢量a提供分母系数。在正向滤波数据之后,filteredfilt将滤波后的序列反向通过滤波器并返回。 结果具有以下特点:

    • 零相位失真
    • 滤波器传递函数,它等于原始滤波器传递函数的平方幅度
    • 滤波器的阶数是由b和a指定的滤波器阶数的两倍

    filtfilt通过匹配初始条件来最小化启动和结束瞬态i,并且可以将它用于实数和复数输入。 不要使用将微分器和Hilbert FIR滤波器与filtfilt使用,因为这些滤波器的操作在很大程度上取决于它们的相位响应。

    输入信号的长度必须大于3倍的滤波器阶数,最大为max(length(b)-1,length(a)-1)

    y = filtfilt(d,x)

    使用数字滤波器d对输入进行零相滤波。使用函数 designfilt 根据频率响应生成滤波器d。

  • 相关阅读:
    C# 微信小程序模板消息---发送
    (转)python的 __init_, __call__, __new__ 详解
    (转)[Python]实例方法、类方法、静态方法
    (转)Python——gRPC详解及实战避坑方案(下)
    (转)Python——gRPC详解及实战避坑方案(上)
    (转)pika详解(五)登录认证及connectionParameters
    (转)pika详解(四) channel 通道
    (转)pika详解(三)SelectConnection及其他Connection
    (转)pika详解(二) BlockingConnection
    (转)pika详解 (一)
  • 原文地址:https://www.cnblogs.com/siucaan/p/9623212.html
Copyright © 2011-2022 走看看