老师您好,这个破碎声是还有噪声的信号,noise是噪声信号,我怎么更改程序才能实现将破碎声减去噪声得到纯净的声音信号,这两个声音采样频率和时间都一样,但读取出的数据点有差别。请求老师给我指导一下。
clear all;
clc;
close all;
[xx,fs]=audioread('C:\Users\张大少爷\Desktop\破碎声.wav'); % 读入数据文件
xx=xx-mean(xx); % 消除直流分量
x=xx/max(abs(xx)); % 幅值归一化
noise=audioread('C:\Users\张大少爷\Desktop\noise.wav');%噪声
signal=Gnoisegen(x,SNR); % 叠加噪声
snr1=SNR_singlech(x,signal); % 计算叠加噪后的信噪比
N=length(x); % 信号长度
time=(0:N-1)/fs; % 设置时间
IS=.15; % 设置IS
% 调用SSBoll79m_2函数做谱减
[output,voiceseg,vosl,SF,Ef]=SSBoll79m_2(signal,fs,IS,0.12);
ol=length(output); % 把output补到与x等长
if ol
output=[output; zeros(N-ol,1)];
end
snr2=SNR_singlech(x,output); % 计算谱减后的信噪比
snr=snr2-snr1;
fprintf('snr1=%5.4f snr2=%5.4f snr=%5.4f\n',snr1,snr2,snr);
wavplay(signal,fs);
pause(1)
wavplay(output,fs);
% 作图
subplot 311; plot(time,x,'k'); grid; axis tight;
title('纯语音波形'); ylabel('幅值')
subplot 312; plot(time,signal,'k'); grid; axis tight;
title(['带噪语音 信噪比=' num2str(SNR) 'dB']); ylabel('幅值')
subplot 313; plot(time,output,'k');grid; ylim([-1 1]);
title('谱减后波形'); ylabel('幅值'); xlabel('时间/s');
2019-6-26 23:04 上传
点击文件名下载附件
681.09 KB, 下载次数: 7
2019-6-26 23:05 上传
点击文件名下载附件
636.84 KB, 下载次数: 11