信息综合课设 - 语音信号的盲分离

发布时间 : 星期三 文章信息综合课设 - 语音信号的盲分离更新完毕开始阅读

武汉理工大学《信息处理课综合训练与设计群》课程设计

附录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分 最终评定成绩(以优、良、中、及格、不及格评定)

指导教师签字:

年 月 日

联系合同范文客服:xxxxx#qq.com(#替换为@)