一种欠定盲源分离方法及其在模态识别中的应用(Matlab代码实现)

👨‍🎓个人主页:研学社的博客  

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

2.1 算例1

 2.2 算例2

 2.3 算例3

🎉3 参考文献

🌈4 Matlab代码、数据、文章


💥1 概述

文献来源:

提出了一种新型盲源分离方法。
在结构动力分析中,盲源分离( Blind Source Separation,BSS )技术被认为是模态识别最有效的方法之一,其中如何利用有限的传感器提取模态参数是该领域极具挑战性的任务。在本文中,我们首先回顾了传统BSS方法的缺点,然后提出了一种新的欠定BSS方法来解决有限传感器的模态识别问题。模态响应信号的(所提方法建立在时频( Time-Frequency , TF )聚类特征上)变换。研究发现,属于不同单调模态的TF能量可以聚类成不同的直线。同时,我们给出了详细的定理来解释聚类特征。此外,每个模态的TF系数被用来重建所有单调信号,这有助于单独识别模态参数。在实验验证中,通过两个实验验证了所提方法的有效性。

📚2 运行结果

2.1 算例1

 

 

 

 2.2 算例2

 

 

 2.3 算例3

 

 

 

部分代码:

function [x,t] = tfristft(tfr,t,h,trace);
%TFRISTFT Inverse Short time Fourier transform.
%    [X,T]=TFRSTFT(tfr,T,H,TRACE) computes the inverse short-time 
%    Fourier transform of a discrete-time signal X. This function
%    may be used for time-frequency synthesis of signals.

%    X     : signal.
%    T     : time instant(s)          (default : 1:length(X)).
%    H     : frequency smoothing window, H being normalized so as to
%            be  of unit energy.      (default : Hamming(N/4)). 
%    TRACE : if nonzero, the progression of the algorithm is shown
%                                     (default : 0).
%    TFR   : time-frequency decomposition (complex values). The
%            frequency axis is graduated from -0.5 to 0.5.
%
%    Example :
%        t=200+(-128:127); sig=[fmconst(200,0.2);fmconst(200,0.4)]; 
%        h=hamming(57); tfr=tfrstft(sig,t,256,h,1);
%        sigsyn=tfristft(tfr,t,h,1);
%        plot(t,abs(sigsyn-sig(t)))


if (nargin<3),
 error('At least 3 parameters required');
elseif (nargin==3),
 trace=0;
end;

[N,NbPoints]=size(tfr);
[trow,tcol] =size(t);
[hrow,hcol] =size(h); Lh=(hrow-1)/2; 

if (trow~=1),
 error('T must only have one row'); 
elseif (hcol~=1)|(rem(hrow,2)==0),
 error('H must be a smoothing window with odd length');
elseif (tcol~=NbPoints)
 error('tfr should have as many columns as t has rows.');
end; 

Deltat=t(2:tcol)-t(1:tcol-1); 
Mini=min(Deltat); Maxi=max(Deltat);
if (Mini~=1) & (Maxi~=1),
 error('The tfr must be computed at each time sample.');
end;

h=h/norm(h);


tfr=ifft(tfr);

x=zeros(tcol,1);

for icol=1:tcol,
 valuestj=max([1,icol-N/2,icol-Lh]):min([tcol,icol+N/2,icol+Lh]);
 for tj=valuestj,
  tau=icol-tj; indices= rem(N+tau,N)+1; 
  % fprintf('%g %g %g\n',tj,tau,indices);
  x(icol,1)=x(icol,1)+tfr(indices,tj)*h(Lh+1+tau);
 end;
 x(icol,1)=x(icol,1)/sum(abs(h(Lh+1+icol-valuestj)).^2);
end;

function [tfr,t,f] = tfrstft(x,t,N,h,trace);
%TFRSTFT Short time Fourier transform.
%    [TFR,T,F]=TFRSTFT(X,T,N,H,TRACE) computes the short-time Fourier 
%    transform of a discrete-time signal X. 

%    X     : signal.
%    T     : time instant(s)          (default : 1:length(X)).
%    N     : number of frequency bins (default : length(X)).
%    H     : frequency smoothing window, H being normalized so as to
%            be  of unit energy.      (default : Hamming(N/4)). 
%    TRACE : if nonzero, the progression of the algorithm is shown
%                                     (default : 0).
%    TFR   : time-frequency decomposition (complex values). The
%            frequency axis is graduated from -0.5 to 0.5.
%    F     : vector of normalized frequencies.
%
%    Example :
%     sig=[fmconst(128,0.2);fmconst(128,0.4)]; tfr=tfrstft(sig);
%     subplot(211); imagesc(abs(tfr));
%     subplot(212); imagesc(angle(tfr));
%

[xrow,xcol] = size(x);
if (nargin < 1),
 error('At least 1 parameter is required');
elseif (nargin <= 2),
 N=xrow;
end;

hlength=floor(N/4);
hlength=hlength+1-rem(hlength,2);

if (nargin == 1),
 t=1:xrow; h = tftb_window(hlength); trace=0;
elseif (nargin == 2) | (nargin == 3),
 h = tftb_window(hlength); trace = 0;
elseif (nargin == 4),
 trace = 0;
end;

if (N<0),
 error('N must be greater than zero');
end;
[trow,tcol] = size(t);
if (xcol~=1),
 error('X must have one column');
elseif (trow~=1),
 error('T must only have one row'); 
end; 

[hrow,hcol]=size(h); Lh=(hrow-1)/2; 
if (hcol~=1)|(rem(hrow,2)==0),
 error('H must be a smoothing window with odd length');
end;

h=h/norm(h);

tfr= zeros (N,tcol) ;  

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; 
 tfr(indices,icol)=x(ti+tau,1).*conj(h(Lh+1+tau));
end;
tfr=fft(tfr); 

if (nargout==0),
 tfrqview(abs(tfr).^2,x,t,'tfrstft',h);
elseif (nargout==3),
 if rem(N,2)==0, 
  f=[0:N/2-1 -N/2:-1]'/N;
 else
  f=[0:(N-1)/2 -(N-1)/2:-1]'/N;  
 end;
end;
 

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

🌈4 Matlab代码、数据、文章

  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值