📄 pretemp.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 + -