基于维纳滤波的含噪声语音信号的恢复

更新时间:2023-09-19 01:38:01 阅读量: 小学教育 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于维纳滤波的含噪声语音信号的恢复

摘要

本文基于随机信号分析与处理的相关理论,采用维纳滤波技术恢复噪声中的鸟鸣声信号,通过仿真达到预期效果,对工程实践有很好的理论支持 。

关键词:维纳滤波器 频域法

实验目的

1. 熟悉维纳滤波的基本概念

2. 熟悉线性最小均方估计的基本原理

3. 掌握运用维纳滤波理论恢复信号的基本方法

实验原理

信号从发送者传送到接受者往往受到集中形式的变形而削弱,维纳滤波是一种从接收的原始信号中恢复信号的方法。

由于但时域方法要求协方差矩阵的逆,当数据比较长的时候,求逆的运算量非常大,我们在这里采用频域法来求解。

维纳滤波器作为波形估计的一种方法,可以采用多种估计准则。 假定离散时间的观测过程为

z(n)?s(n)?v(n),n?n0,n0?1,...,nf

其中v(n)为噪声,s(n)为原信号,n0为起始观测时刻,nf为观测结束时刻。 在实际中通常采用易于实现的线性最小均方准则。线性最小均方估计是观测的线性函数,它可以作为观测序列通过离散时间线性系统,即

s(n/nf)??h(n,k)z(k)

k?n0?nf滤波器的系数的选择可以由线性最小均方估计的正交原理来求取,即

E{[s(n)??h(n,k)z(k)]z(i)}?0(i?n0,n0?1,...,n)k?n0n

Rsz(n,i)??h(n,k)Rz(k,i),(i?n0,n0?1,...,n)

k?n0n上式也称为Wiener-Hopf方程。

对于信号和观测过程是平稳随机序列,并且是联合平稳随机序列,系统为因果的线性时不变离散时间线性系统,n0?????,则有

Rsz(n)??h(l)Rz(n?l)?h(n)?Rz(n),n?0

l?0求解维纳滤波器即求系数h(n)的过程。 将上式两边做z变换,得Gsz(z)所以,

?H(z)Gz(z)

Gsz(z) H(z)?Gz(z)H(z)称为维纳滤波器。当信号s(n)与观测噪声统计独立时,维纳滤波器为

H(z)?Gs(z)

Gs(z)?Gv(z)其中,Gv(z)为噪声的功率谱,维纳滤波器用离散傅里叶变换可表示为

Gs(?) H(?)?Gs(?)?Gv(?)

实验步骤

维纳滤波既可以采用频域方法实现,也可以采用时域方法实现,但时域方法要求协方差矩阵的逆,当数据比较长的时候,求逆的运算量非常大。

本实验给定信号为chirp信号(鸟叫声),数据文件为chirp.mat(可以从MATLAB中找到),可以用load(‘chirp’,“Fs”,‘y’)调入数据文件。用始于发实现维纳滤波的步骤如下:

1) 产生信号s(n)和观测z(n),信号为chirp信号(鸟叫声),观测为信号叠

加上高斯白噪声;

?和R?; 2) 估计Rzsz??1R?; 3) 计算hopt?Rzsz4) 计算估计的信号

?(n)??h(m)z(n?m)?hzT sm?0N?1

频域法实现维纳滤波的步骤如下:

1) 产生信号s(n)和观测z(n),信号为chirp信号(鸟叫声),观测为信号叠加上高斯白噪声;

2) 估计信号s(n)和z(n)的功率谱,计算维纳滤波的传递函数;

3) 计算输入z(t)和输出信号y(t)的频谱,并对输出信号求烦变化得到时域的输出信号。

实验中用到的MATLAB函数有:

1) 装入数据文件:Load;

2) 傅立叶变换与反变换:fftn,ifftn; 3) 谱估计:periodogra(周期图谱估计),pburg(最大熵谱估计),welch(welch谱估计);

4) 互相关计算:xcorr。

结果仿真

运用MATLAB进行仿真: 仿真程序如下:

clear;

load('chirp','Fs','y'); p=audioplayer(y,Fs); play(p); subplot(2,1,1); plot(y); title('原始信号') Py=fftn(y); subplot(2,1,2); plot(abs(Py));

title('原始信号频谱') %原始信号时域图、频域图及信号的播放 pause();

N=length(y); sigma=0.1;

%控制噪声强度

z=zeros(N,1);

v=randn(N,1)*sigma; %产生噪声 z=y+v;

q=audioplayer(z,Fs); play(q); figure(); subplot(2,1,1); plot(z); title('观测信号') Pz=fftn(z); subplot(2,1,2); plot(abs(Pz));

title('观测信号的频谱') %观测信号时域图、频域图及信号的播放 pause();

Rz=xcorr(z); Gz=fft(Rz,N); Rsz=xcorr(z,y); Gsz=fft(Rsz,N);

H=Gsz./Gz; %维纳滤波器的传递函数 S=H.*Py; figure; plot(abs(S)); title('');

ss=real(ifft(S)); %原始信号的估计 ss=ss(1:N); figure; plot(ss);

title('恢复出的原始信号'); d=audioplayer(ss,Fs); play(d);

%恢复信号时域图、频域图及信号的播放

仿真结果:

原始信号10.50-0.5-102000400060008000100001200014000原始信号频谱15010050002000400060008000100001200014000

观测信号210-1-202000400060008000100001200014000观测信号频谱15010050002000400060008000100001200014000

本文来源:https://www.bwwdw.com/article/x88h.html

Top