⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kalmancolour.m

📁 MATLAB代码,利用卡尔曼滤波实现加入彩色噪声的语音信号增强.效果不错.
💻 M
字号:
function enhancedsignal=kalmancolour(noisyspeech,samplefrequency)
x=noisyspeech;
fs=samplefrequency;
nx=length(x);
enhanced_x=zeros(1,nx);

%分帧
FrameLen=fix(0.025*fs);
overlap=0;
inc=FrameLen-overlap; %帧移
x_frame=enframe(x,FrameLen,inc); %分帧
nf=size(x_frame,1);              % 帧数

P=8;          %预测阶数
%噪声估计
NNoise=23;
noise=x(1:NNoise*FrameLen);
[NMetric,VN]=lpc(noise,P); 

%卡尔曼滤波
for i=1:nf
       if i==1
           [SMetric,VS]=lpc(x_frame(i,:),P);  
        else 
           [SMetric,VS]=lpc(xn(P,:),P);
        end
       if (VS-VN>0)   
            VS=VS-VN;
        else 
            VS=0.001;
        end
        %状态矩阵
        FS=[zeros(P-1,1) eye(P-1); -1*fliplr(SMetric(2:P+1))]; 
        FN=[zeros(P-1,1) eye(P-1); -1*fliplr(NMetric(2:P+1))]; 
        F=[FS zeros(P,P); zeros(P,P) FN];  %状态转移矩阵
        H=[zeros(1,P-1) 1 zeros(1,P-1) 1]; %观测矩阵
        G=[zeros(P-1,2);1 0;zeros(P-1,2);0 1]; %输入矩阵
        Q=[VS 0;0 VN];
        xn=zeros(2*P,FrameLen);
                
        %初始化
        if i==1   
            x0=[zeros(2*P,1)];    %初始状态
            P0=[zeros(2*P,2*P)];  %初始误差方差                                    
        else 
            x0=[xn(P,(FrameLen-P+1:FrameLen))';zeros(P,1)]; 
            P0=Pn;                             
        end

        %滤波
        for k=1:FrameLen
            %预测
            if(k==1)
                xn(:,k)=F*x0;
                Pm=F*P0*F'+G*Q*G';
            else
                xn(:,k)=F*xn(:,k-1);
                Pm=F*P0*F'+G*Q*G';
            end
   
            %卡尔曼增益
            K=Pm*H'*inv(H*Pm*H'+VN);
     
            %更新
            xn(:,k)=xn(:,k)+K*(x_frame(i,k)-H*xn(:,k));
            Pn=(eye(2*P)-K*H)*Pm; 
        end
        enhanced_x(1+(i-1)*inc:(i-1)*inc+FrameLen)=enhanced_x(1+(i-1)*inc:(i-1)*inc+FrameLen)+xn(P,:);     %得到增强后语音
end
enhancedsignal=enhanced_x;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -