当前位置:首页 > 信息综合课设 - 语音信号的盲分离
武汉理工大学《信息处理课综合训练与设计群》课程设计
附录3 算法的matlab程序
FAST-ICA算法和PCA算法代码:
(1)FAST-ICA算法
X=MixedS_white; % 以下算法将对X进行操作 [VariableNum,SampleNum]=size(X); %获取输入矩阵的行/列数,行数为观测数据的数目,列数为采样点
numofIC=VariableNum; % 在此应用中,独立元个数等于变量个数3 B=zeros(numofIC,VariableNum) % 初始化列向量w的寄存矩阵,B=[b1 b2 ... bd] ,3*3矩阵(分离矩阵) for r=1:numofIC
i=1;maxIterationsNum=100; % 设置最大迭代次数(即对于每个独立分量而言迭代均不超过此次数) IterationsNum=0;
b=rand(numofIC,1)-.5; % 随机设置b初值
b=b/norm(b); % 对b标准化 norm(b):向量元素平方和开根号 while i<=maxIterationsNum+1
if i == maxIterationsNum % 循环结束处理
fprintf('\\n第%d分量在%d次迭代内并不收敛。', r,maxIterationsNum); 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; % 核心公式 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
ústICA算法语音分离
ICAedS=B'*Q*MixedS_bak % 计算ICA后的矩阵 % fastICA分离语音信号
30
武汉理工大学《信息处理课综合训练与设计群》课程设计
subplot(4,3,7),plot(ICAedS(1,:)),title('fastICA分离语音信号1') subplot(4,3,8),plot(ICAedS(2,:)),title('fastICA分离语音信号2') subplot(4,3,9),plot(ICAedS(3,:)),title('fastICA分离语音信号3') (2)PCA算法
[V,D]=eig(MixedS_cov); % 协方差矩阵对角化 Vtmp=zeros(size(V,1),1);
for j=1:2 % 选择最大的主元向量并排序 for i=1:2
if D(i,i) tmp=D(i,i);Vtmp=V(:,i); D(i,i)=D(i+1,i+1);V(:,i)=V(:,i+1); D(i+1,i+1)=tmp;V(:,i+1)=Vtmp; end end end %PCA算法语音分离 t1=(MixedS'*V(:,1))'; t2=(MixedS'*V(:,2))'; t3=(MixedS'*V(:,3))'; subplot(4,3,10),plot(t1),title('PCA分离语音信号1') subplot(4,3,11),plot(t2),title('PCA分离语音信号2') subplot(4,3,12),plot(t3),title('PCA分离语音信号3') %分离后语音信号时域波形图和频域频谱 fs=52050; %语音信号采样频率为52050 y11=fft(ICAedS(1,:),1024); %对信号做1024点FFT变换 f=fs*(0:511)/1024; figure(2) subplot(3,2,1); plot(ICAedS(1,:)) %做分离语音信号1的时域图形 title('fastICA分离语音信号1'); subplot(3,2,2); plot(abs(y11(1:512))) %做分离语音信号1的FFT频谱图 title('fastICA分离语音信号1的FFT频谱') y12=fft(ICAedS(2,:),1024); %对信号做1024点FFT变换 subplot(3,2,3); plot(ICAedS(2,:)) %做分离语音信号2的时域图形 title('fastICA分离语音信号2'); subplot(3,2,4); 31 武汉理工大学《信息处理课综合训练与设计群》课程设计 plot(abs(y12(2:512))) %做分离语音信号2的FFT频谱图 title('fastICA分离语音信号2的FFT频谱') y13=fft(ICAedS(2,:),1024); %对信号做1024点FFT变换 subplot(3,2,5); plot(ICAedS(3,:)) %做分离语音信号3的时域图形 title('fastICA分离语音信号3'); subplot(3,2,6); plot(abs(y13(1:512))) %做分离语音信号3的FFT频谱图 title('fastICA分离语音信号3的FFT频谱') sound(ICAedS(1,:),52050) 32 武汉理工大学《信息处理课综合训练与设计群》课程设计 附录4 录音的matlab程序 clc; fs=50000; channel=1; t=5; fprintf('按任意键后开始 %d 秒录音:',t); pause; fprintf('录音中...');%文字提示 y=wavrecord(t*fs, fs,channel,'double');%录制语音信号 fprintf('录音结束\\n');%文字提示 wavwrite(y,fs,'D:\\Documents\\Desktop\\gequ1.wav');% 存储录音信号,先创建文件 33 武汉理工大学《信息处理课综合训练与设计群》课程设计 本科生课程设计成绩评定表 姓 名 专业、班级 课程设计题目:语音信号的盲分离 课程设计答辩或质疑记录: 性 别 通信1103 成绩评定依据: 序 号 1 2 3 4 内 容 完成相关算法的设计 通过编写与调试程序,完成基本功能 设计报告的完成 课程设计答辩 分值 25分 35分 20分 20分 最终评定成绩(以优、良、中、及格、不及格评定) 指导教师签字: 年 月 日
共分享92篇相关文档