资源简介
采用kalman滤波算法,对含噪声的语音信号进行降噪,能够取得较好的效果。
代码片段和文件信息
clearclc;
[wave Fs]=audioread(‘cheese.wav‘);
%播放读入的数据
sound_1=wave(:1);
%p = audioplayer(sound_1Fs);
%play(p);
figure(1);
subplot(321);
plot(wave);
title(‘原始语音信号‘);
xlabel(‘时间(s)‘);
ylim([-0.4 0.4]);
subplot(322);
y1=fft(wavelength(wave));
plot(abs(y1));
xlim([0length(wave)/2]);
ylim([0 400]);
title(‘原始语音信号频谱‘);
xlabel(‘频率(Hz)‘);
%————————————————加噪声后的信号————————————————
% a=0.08;%系数越小噪声越小,滤波效果越好
% noise=a*randn(size(sound_1));
% wave_noise(:1)=sound_1+noise;%w;%声道1加入噪声信号
wave_noise(:1)=awgn(sound_1400); % 过高斯白噪声信道,snr(a)来衡量信道的信噪比
audiowrite(‘C:\Users\Administrator\Desktop\kalman\Gnoise.wav‘wave_noiseFs);
figure(1);
subplot(323);
plot(wave_noise‘Color‘[1 0 0]);
title(‘加高斯白噪声语音信号‘);
xlabel(‘时间(s)‘);
ylim([-0.4 0.4]);
subplot(324);
y2=fft(wave_noiselength(wave_noise));
plot(abs(y2)‘Color‘[1 0 0]);
title(‘加高斯噪语音信号频谱‘);
xlabel(‘频率(Hz)‘);
xlim([0length(wave)/2]);
%————————卡尔曼滤波————————
N = length(wave_noise);
sz = [N1];
z = wave_noise(:1); %测量中含有噪声
Q = 0.01; %过程激励噪声方差
%注意Q值得改变,修改代码不要改变z的值
R = 22; %测量方差估计,可以改变它来看不
- 上一篇:介数中心性 matlab
- 下一篇:用matlab实现DTFT 和DFT
评论
共有 条评论