i
sempty(which('fastica')) display('add path of FastICA toolbox'); addpath(strcat(pwd,'\FastICA_25'));end% read the data in
% sound files are from http://cnl.salk.edu/~tewon/Blind/blind_audio.html
[x1,Fs] = audioread('ssm1.wav'); % source #1 sound track
[x2,Fs] = audioread('ssm2.wav',[1 size(x1,1)]); % source #2 sound track
[y1,Fs] = audioread('rsm2_mA.wav',[1 size(x1,1)]); % reciever: mic #1 sound track
[y2,Fs] = audioread('rsm2_mB.wav',[1 size(x1,1)]); % reciever: mic #2 sound track
% Fs: sampling rate
% plot the orignal and mixing waveforms
t = linspace(0,size(x1,1)/Fs,size(x1,1)); % time axis
figure(1)subplot(2,2,1);plot(t,x1,'b');title('x1:source #1 sound track');xlabel('Time (s)');ylabel('Amplitude');xlim([0 max(t)]);subplot(2,2,2);plot(t,x2,'r');title('x2: source #2 sound track');xlabel('Time (s)');ylabel('Amplitude');xlim([0 max(t)]);subplot(2,2,3);plot(t,y1,'c');title('y1: reciever: mic #1 sound track');xlabel('Time (s)');ylabel('Amplitude');xlim([0 max(t)]);subplot(2,2,4);plot(t,y2,'m');title('y2: reciever: mic #2 sound track');xlabel('Time (s)');ylabel('Amplitude');xlim([0 max(t)]);% ICA analysis using FastICA
x = [x1,x2]';r = fastica(x,'g','gauss'); % fastica gui command: fasticag
% The output levels of this algorithm are arbitrary, normalize to 1
r = r/max(max(abs(r)));% save output audio file
audiowrite('PC1.wav',r(1,:),Fs);audiowrite('PC2.wav',r(2,:),Fs);% plot the results and original data on the same figure
figure(2);subplot(2,2,1);plot(t,x1,'m');title('x1: true sound wave');xlabel('Time (s)');ylabel('Amplitude');xlim([0 max(t)]);subplot(2,2,2);plot(t,x2,'m');title('x2: true sound wave');xlabel('Time (s)');ylabel('Amplitude');xlim([0 max(t)]);subplot(2,2,3);plot(t,r(1,:),'r');title('IC1: estimated sound wave');xlabel('Time (s)');ylabel('Amplitude');xlim([0 max(t)]);subplot(2,2,4);plot(t,r(2,:),'r');title('IC2: estimated sound wave');xlabel('Time (s)');ylabel('Amplitude');xlim([0 max(t)]);
Best Answer