当前位置:   article > 正文

时频重排技术(Reassignment)原理和Matlab代码

时频重排

时频重排技术原理

为了提高时频分析工具的分辨率,提出了时频重排技术。它将时频系数重新分配时频重心的位置,以提高时频表示的可读性。重排可以应用于线性的时频分析工具,例如短时傅里叶变换,小波变换等,也可以应用于二次方法,例如魏格纳分布等。

时频表示的能量不够聚集的原因,主要是因为时频系数分布在了信号的瞬时频率的邻域内。那么,只需要将时频系数在时频面上重新分配到估计的瞬时频率处,就可以提高能量聚集性。具体的原理如下图所示,
在这里插入图片描述

不同于同步压缩变换,重排是在二维的时频面上重排系数。因此,重排后的时频表示质量,取决于估计的群延迟和瞬时频率。以魏格纳分布为例,它们的估计公式如下:
在这里插入图片描述
那么,基于魏格纳分布的重排被定义为

在这里插入图片描述
由于重排在二维平面上重分配系数,因此丧失了重构信号的能力。但是,通常重排的时频分辨率更高。

Matlab代码

function [tfr] = RS(x,hlength);
%   Reassignment transform
%	x       : Signal.
%	hlength : Window length.

%	tfr   : Time-Frequency Representation.

%  This program is distributed in the hope that it will be useful,
%  but WITHOUT ANY WARRANTY; without even the implied warranty of
%  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
%
%  Written by YuGang in Shandong University at 2016.05.13, for my girlfriend.

[xrow,xcol] = size(x);

N=xrow;

if (xcol~=1),
 error('X must be column vector');
end;

if (nargin < 2),
 hlength=round(xrow/8);
end;

t=1:N;
ft = 1:round(N/2);

[trow,tcol] = size(t);

hlength=hlength+1-rem(hlength,2);
ht = linspace(-0.5,0.5,hlength);ht=ht';

% Gaussian window
h = exp(-pi/0.32^2*ht.^2);
% derivative of window
dh = -2*pi/0.32^2*ht .* h; % g'
%
th=h.*ht;

[hrow,hcol]=size(h); Lh=(hrow-1)/2;

tfr1= zeros (N,tcol);
tfr2= zeros (N,tcol);
tfr3= zeros (N,tcol);

va=N/hlength;
    
for icol=1:tcol,
ti= t(icol); tau=-min([round(N/2)-1,Lh,ti-1]):min([round(N/2)-1,Lh,xrow-ti]);
indices= rem(N+tau,N)+1;
rSig = x(ti+tau,1);
tfr1(indices,icol)=rSig.*conj(h(Lh+1+tau));
tfr2(indices,icol)=rSig.*conj(dh(Lh+1+tau));
tfr3(indices,icol)=rSig.*conj(th(Lh+1+tau));
end;

tfr1=fft(tfr1);
tfr2=fft(tfr2);
tfr3=fft(tfr3);

tfr1=tfr1(1:round(N/2),:);
tfr2=tfr2(1:round(N/2),:);
tfr3=tfr3(1:round(N/2),:);

omega = zeros(round(N/2),tcol);
omega2= zeros(round(N/2),tcol);

for b=1:N
omega1(:,b) = (ft-1)'+real(va*1i*tfr2(ft,b)/2/pi./tfr1(ft,b));
end

for a=1:round(N/2)
omega2(a,:) = t+(hlength-1)*real(tfr3(a,t)./tfr1(a,t));
end

omega1=round(omega1);
omega2=round(omega2);

Ts = zeros(round(N/2),tcol);

% Reassignment step
for b=1:N%time
    for eta=1:round(N/2)%frequency
        if abs(tfr1(eta,b))>0.0001
            k1 = omega1(eta,b);
            k2 = omega2(eta,b);
            if k1>=1 && k1<=round(N/2) && k2>=1 && k2<=N
                Ts(k1,k2) = Ts(k1,k2) + abs(tfr1(eta,b));
            end
        end
    end
end

tfr=Ts/(xrow/2);
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96

实验结果

第一幅图是短时傅里叶变换的结果,第二幅图是同步压缩变换的结果,第三幅图是重排的结果。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

[1] Auger F , Flandrin P . Improving the readability of time-frequency and time-scale representation by the reassignment method.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/104984
推荐阅读
相关标签
  

闽ICP备14008679号