資源簡介
語音信號盲分離,應用程序FastICA,可以應用matlab直接運行,并且文件夾內包含語音信號,無需另外下載

代碼片段和文件信息
%%%%%%%%%%%%%%%%%%%%%%%%%%??初始化??%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;clear?all;close?all;
%%%%%%%%%%%%%%??讀入原始圖像,混合,并輸出混合圖像??%%%%%%%%%%%%%%%%%%
%?讀入混合前的原始圖片并顯示
I1=wavread?(‘man.wav‘)‘;?????????
I2=wavread?(‘dragen.wav‘)‘;
I3=wavread?(‘music.wav‘)‘;
subplot(431)plot(I1)title(‘輸入聲音1‘)
subplot(432)plot(I2)title(‘輸入聲音2‘)
subplot(433)plot(I3)title(‘輸入聲音3‘)
%?將其組成矩陣
S=[I1;I2;I3];??????????????????????????%?圖片個數即為變量數,圖片的像素數即為采樣數
???????????????????????????????????????%?因此S_all是一個變量個數*采樣個數的矩陣
Sweight=rand(size(S1));???????????????%?取一隨機矩陣,作為信號混合的權矩陣
MixedS=Sweight*S;??????????????????????%?得到三個圖像的混合信號矩陣
%?將混合矩陣重新排列并輸出
subplot(434)plot(MixedS(1:))title(‘混合聲音1‘)
subplot(435)plot(MixedS(2:))title(‘混合聲音2‘)
subplot(436)plot(MixedS(3:))title(‘混合聲音3‘)
MixedS_bak=MixedS;?????????????????????????%?將混合后的數據備份,以便在恢復時直接調用
%%%%%%%%%%%%%%%%%%%%%%%%%%??標準化??%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
MixedS_mean=zeros(31);
for?i=1:3
????MixedS_mean(i)=mean(MixedS(i:));
end????????????????????????????????????????%?計算MixedS的均值
for?i=1:3
????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算法??%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
X=MixedS_white;????????????????????????????%?以下算法將對X進行操作
[VariableNumSampleNum]=size(X);
numofIC=VariableNum;???????????????????????%?在此應用中,獨立元個數等于變量個數
B=zeros(numofICVariableNum);??????????????%?初始化列向量w的寄存矩陣B=[b1??b2??...???bd]
for?r=1:numofIC
????i=1;maxIterationsNum=100;???????????????%?設置最大迭代次數(即對于每個獨立分量而言迭代均不超過此次數)
????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‘*g*b+u*X*g)/SampleNum-mean(dg)*b;
???????????????????????????????????????????%?核心公式,參見理論部分公式2.52
????????b=b-B*B‘*b;????????????????????????%?對b正交化
????????b=b/norm(b);?
????????if?abs(abs(b‘*bOld)-1)<1e-9????????%?如果收斂,則
?????????????B(:r)=b;?????????????????????%?保存所得向量b
?????????????break;
?????????end
????????i=i+1;????????
????end
%????B(:r)=b;????????????????????????????????%?保存所得向量b
end
%%%%%%%%%%%%%%%%%%%%%%%%%%??ICA計算的數據復原并構圖??%%%%%%%%%%%%%%%%%%%%%%%%%
ICAedS=B‘*Q*Mixed
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????882138??2006-05-28?15:32??Fast?ICA\dragen.wav
?????文件??????882044??2006-05-28?15:31??Fast?ICA\man.wav
?????文件??????882142??2006-05-28?15:32??Fast?ICA\music.wav
?????文件????????4373??2009-04-08?19:55??Fast?ICA\soundOK.asv
?????文件????????4373??2009-04-08?19:57??Fast?ICA\soundOK.m
?????目錄???????????0??2018-04-28?10:51??Fast?ICA\
評論
共有 條評論