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

📄 slfilter.m

📁 这是盲信号的代码 都已经通过编译了 做这方面的同仁可以参考一下 我觉得蛮惯用的
💻 M
字号:
function [ys,W,V,U] = slfilter(x)
% COMPUTE V AND U.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 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 + -