资源简介
基于FastICA算法的语音信号分离,以及对分离结果的评价
代码片段和文件信息
%%%%%%%%%%%%%%%%%%%%%%%%%% 初始化 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;clear all;close all;
n=440964;fs=40000;d=8;
%%%%%%%%%%%%%% 读入原始声音,混合,并输出混合声音 %%%%%%%%%%%%%%%%%%
% 读入混合前的原始声音并显示
I1=wavread (‘man.wav‘[1n])‘;
I2=wavread (‘dragen.wav‘[1n])‘;
I3=wavread (‘music.wav‘[1n])‘;
I4=wavread(‘Eglish.wav‘[1n])‘;
I5=wavread(‘yu.wav‘[1n])‘;
I6=wavread(‘L.wav‘[1n])‘;
figure
subplot(321)plot(I1)title(‘输入声音1‘)
subplot(322)plot(I2)title(‘输入声音2‘)
subplot(323)plot(I3)title(‘输入声音3‘)
subplot(324)plot(I4)title(‘输入声音4‘)
subplot(325)plot(I5)title(‘输入声音5‘)
subplot(326)plot(I6)title(‘输入声音6‘)
hold on
% 将其组成矩阵
S=[I1*2;I2;I3;I4*2;I5;I6]; % 声音个数即为变量数,图片的像素数即为采样数
% 因此S_all是一个变量个数*采样个数的矩阵
Sweight=rand(size(S1)); % 取一随机矩阵,作为信号混合的权矩阵
MixedS=Sweight*S; % 得到三个图像的混合信号矩阵
% 将混合矩阵重新排列并输出
figure
subplot(321)plot(MixedS(1:))title(‘混合声音1‘)
subplot(322)plot(MixedS(2:))title(‘混合声音2‘)
subplot(323)plot(MixedS(3:))title(‘混合声音3‘)
subplot(324)plot(MixedS(4:))title(‘混合声音4‘)
subplot(325)plot(MixedS(5:))title(‘混合声音5‘)
subplot(326)plot(MixedS(6:))title(‘混合声音6‘)
hold on
wavwrite(MixedS(2:)fs‘M.wav‘);
MixedS_bak=MixedS; % 将混合后的数据备份,以便在恢复时直接调用
%%%%%%%%%%%%%%%%%%%%%%%%%% 标准化 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
MixedS_mean=zeros(51);
for i=1:6
MixedS_mean(i)=mean(MixedS(i:));
end % 计算MixedS的均值
for i=1:6
for j=1:size(MixedS2)
MixedS(ij)=MixedS(ij)-MixedS_mean(i);
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%% 白化 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
MixedS_cov=cov(MixedS‘); % cov为求协方差的函数
[ED]=eig(MixedS_cov); % 对矩阵的协方差函数进行特征值分解
Q=inv(sqrt(D))*(E)‘; % Q为白化矩阵
MixedS_white=Q*MixedS; % MixedS_white为白化后的图片矩阵
IsI=cov(MixedS_white‘); % IsI应为单位阵
%%%%%%%%%%%%%%%%%%%%%%%% FASTICA算法 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
t0=cputime;
X=MixedS_white; % 以下算法将对X进行操作
[VariableNumSampleNum]=size(X);
numofIC=VariableNum; % 在此应用中,独立元个数等于变量个数
B=zeros(numofICVariableNum); % 初始化列向量w的寄存矩阵B=[b1 b2 ... bd]
for r=1:numofIC
i=1;maxIterationsNum=50; % 设置最大迭代次数(即对于每个独立分量而言迭代均不超过此次数)
IterationsNum=0;
b=rand(numofIC1)-.5; % 随机设置b初值
b=b/norm(b); % 对b标准化 norm(b):向量元素平方和开根号
while i<=maxIterationsNum+1
if i == maxIterationsNum % 循环结束处理
fprintf(‘\n第%d分量在%d次迭代内并不收敛。‘ rmaxIterationsNum);
break;
end
bOld=b;
a2=1;
u=1;
t=X‘*b;
g=t.*exp(-a2*t.^2/2);
dg=(1-a2*t.^2).*exp(-a2*t.^2/2);
b=((1-u)*t‘*
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-06-06 23:08 Fast ICA\
文件 881972 2006-05-28 15:32 Fast ICA\dragen.wav
文件 441240 2013-05-02 18:45 Fast ICA\e.wav
文件 882456 2013-05-02 18:45 Fast ICA\Eglish.wav
文件 1764844 2013-05-23 11:11 Fast ICA\gu.wav
文件 17422 2013-04-29 15:56 Fast ICA\hs_err_pid3272.log
文件 881972 2013-06-06 21:45 Fast ICA\K.wav
文件 881972 2013-11-10 13:51 Fast ICA\K1.wav
文件 881972 2013-11-10 13:51 Fast ICA\K2.wav
文件 881972 2013-11-10 13:51 Fast ICA\K3.wav
文件 881972 2013-11-10 13:51 Fast ICA\K4.wav
文件 881972 2013-11-10 13:51 Fast ICA\K5.wav
文件 881972 2013-11-10 13:51 Fast ICA\K6.wav
文件 882444 2013-03-15 23:08 Fast ICA\L.wav
文件 881972 2013-11-10 13:50 Fast ICA\M.wav
文件 881972 2006-05-28 15:31 Fast ICA\man.wav
文件 881972 2006-05-28 15:32 Fast ICA\music.wav
文件 882436 2013-05-23 10:59 Fast ICA\qin.wav
文件 5649 2013-06-06 22:57 Fast ICA\soundOK.m
文件 881972 2013-06-03 16:23 Fast ICA\V.wav
文件 881972 2013-11-10 13:51 Fast ICA\V1.wav
文件 881972 2013-11-10 13:51 Fast ICA\V11.wav
文件 881972 2013-11-10 13:51 Fast ICA\V2.wav
文件 881972 2013-11-10 13:51 Fast ICA\V3.wav
文件 881972 2013-11-10 13:51 Fast ICA\V4.wav
文件 881972 2013-11-10 13:51 Fast ICA\V5.wav
文件 881972 2013-11-10 13:51 Fast ICA\V6.wav
文件 882436 2013-05-23 11:02 Fast ICA\wang.wav
文件 882456 2013-05-02 18:45 Fast ICA\yu.wav
评论
共有 条评论