完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
clear all;
[speech,fs,nbits]=wavread('d.wav'); %读入语音文件 %-----------------------------参数定义------------------------------ winsize=256; %窗长 n=0.04; %噪声水平 size=length(speech); %语音长度 numofwin=floor(size/winsize); %帧数 ham=hamming(winsize)'; %产生汉明窗 hamwin=zeros(1,size); %定义汉明窗的长度 enhanced=zeros(1,size); %定义增强语音的长度 x=speech'+n*randn(1,size); %产生带噪信号 noisy=n*randn(1,winsize); %噪声估计 N=fft(noisy); %对噪声傅里叶变换 nmag=abs(N); %噪声功率谱 %----------------------------分帧---------------------------------- for q=1:2*numofwin-1 frame=x(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2); %对带噪语音帧间重叠一半取值 hamwin(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)= hamwin(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)+ham; %加窗 y=fft(frame.*ham); %对带噪语音傅里叶变换 mag=abs(y); %带噪语音功率谱 phase=angle(y); %带噪语音相位 %-------------------------幅度谱减--------------------------------- for i=1:winsize; if mag(i)-nmag(i)>0 clean(i)=mag(i)-nmag(i); else clean(i)=0; end end %-------------------在频域中重新合成语音----------------------------- spectral=clean.*exp(j*phase); %-----------------反傅里叶变换并重叠相加----------------------------- enhanced(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)=enhanced(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)+real(ifft(spectral)); end %--------------------出去汉明窗引起的增益---------------------------- for i=1:size if hamwin(i)==0 enhanced(i)=0; else enhanced(i)=enhanced(i)/hamwin(i); end end %---------------------计算增强前后信噪比------------------------------ SNR1=10*log10(var(speech')/var(noisy)); %加噪语音信噪比 SNR2=10*log10(var(speech')/var(enhanced-speech')); %增强语音信噪比 wavwrite(x,fs,nbits,'noisy.wav'); %输出带噪信号 wavwrite(enhanced,fs,nbits,'enhanced.wav'); %输出增强语音 %------------------------画波形-------------------------------------- figure(1); subplot(3,1,1);plot(speech'); title('原始语音波形'); xlabel('样点数');ylabel('幅度'); axis([0 2.5*10^4-0.3 0.3]); subplot(3,1,2);plot(x); title('加噪语音波形'); xlabel('样点数');ylabel('幅度'); axis([0 2.5*10^4-0.3 0.3]); subplot(3,1,3);plot(enhanced); title('增强语音波形'); xlabel('样点数');ylabel('幅度'); axis([0 2.5*10^4-0.3 0.3]); |
|
相关推荐
2个回答
|
|
楼主做出来了吗?我也要做这个,能交流一下吗,我的扣扣835964660
|
|
|
|
个人觉得“噪声估计”是难点,可以考虑真实环境下采集不同信噪比下的含噪语音,再做谱减法。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
请问simulink的s-function模块如何添加多输入输出接口
2352 浏览 2 评论
1985 浏览 3 评论
使用simulink进行三相短路故障分析时,各参数应该如何设置
2571 浏览 1 评论
想请教一下图中是simulink的什么模块,需要这种三段斜率函数模块但没找到在哪
2624 浏览 1 评论
3515 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-2-1 00:58 , Processed in 0.485850 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号