⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pretemp.m

📁 独立分量分析中的时域预测代码 matlab格式 希望有用
💻 M
字号:
function [ys,W] = slfilter(x)
% COMPUTE V AND U.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[n,T]=size(x);
x	= x - mean(x')' * ones(1,T);%去均值
m=n;
%%% whitening & projection onto signal subspace
%   ===========================================
%if verbose, fprintf('jade -> Whitening the data\n'); end
 [U,D] 		= eig((x*x')/T)	; 
 [puiss,k]	= sort(diag(D))	;
 rangeW		= n-m+1:n			; % indices to the m  most significant directions
 scales		= sqrt(puiss(rangeW))		; % scales
  W  		= diag(1./scales)  * U(1:n,k(rangeW))'	;	% whitener
 iW  		= U(1:n,k(rangeW)) * diag(scales) 	;	% its pseudo-inverse
 x		= W*x; %白化 
% Set short and long half-lives.
shf 		= 1; 
lhf 		= 900000; 	
max_mask_len= 500;
n			= 8; % n = num half lives to be used to make mask.
%输入混合信号时,信号若不为列向量,则转置
[dim,sample]=size(x);
if dim<sample
    num_sample=sample;
    x=x';
else
    num_sample=dim;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Get masks to be used to find (x_tilde-x) and (x_bar-x)
% Set mask to have -1 as first element,
% and remaining elements sum to unity.

% Short-term mask.
%h=shf; t = n*h; lambda = 2^(-1/h); temp = [0:t-1]'; 
%lambdas = ones(t,1)*lambda; mask = lambda.^temp;
%mask(1) = 0; mask = mask/sum(abs(mask));  mask(1) = -1;
%s_mask=mask; s_mask_len = length(s_mask);

%**********改写滤波系数***********
h=shf;
t=8;
lambda = 2^(-1/h);
temp = [0:t-1]';
mask = lambda.^temp;
mask(1) = 0; 
mask = mask/sum(abs(mask));  
mask(1) = -1;
s_mask=mask;
%*************************
% Long-term mask.
%h=lhf;t = n*h; t = min(t,max_mask_len); t=max(t,1);
%lambda = 2^(-1/h); temp = [0:t-1]'; 
%lambdas = ones(t,1)*lambda; mask = lambda.^temp;
%mask(1) = 0; mask = mask/sum(abs(mask));  mask(1) = -1;
%l_mask=mask; l_mask_len = length(l_mask);
%%%%%%改写滤波系数%%%%%%%%%%%%%%%%%%%%%
h=lhf;
t=500;
lambda = 2^(-1/h);
temp = [0:t-1]';
mask = lambda.^temp;
mask(1) = 0; 
mask = mask/sum(abs(mask));  
mask(1) = -1;
l_mask=mask;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Filter each column of mixtures array.
S=filter(s_mask,1,x); 	L=filter(l_mask,1,x);

% Can also use this for L: L = zero_mean_cols(mixtures);

% Find short-term and long-term covariance matrices.
U=cov(S,1);		V=cov(L,1);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Find eigenvectors W and eigenvalues d.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[W d]=eig(V,U); 

%**************************************

W=real(W);


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Recover source signals.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

ys = x*W;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% PLOT RESULTS
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Rescale ys to zero-mean and unit variance, for display purposes.

temp=repmat(mean(ys),[num_sample 1]'); 	ys=ys-temp;
temp=repmat(std(ys,1),[num_sample 1]');	ys=ys./temp;
[dim,sample]=size(ys);
if dim>sample
    ys=ys';
end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -