- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
大连理工大学-Read
基于最小均方误差(MMSE)估计的因果维纳滤波的实现
一.功能简介
基于最小均方误差(MMSE)估计的因果维纳滤波的Matlab实现,用莱文森-德宾(Levinson-Durbin)算法求解维纳-霍夫方程(Yule-wa1ker)方程,得到滤波器系数,进行维纳滤波。
二.维纳滤波简介
信号处理的实际问题,常常是要解决在噪声中提取信号的问题,因此,我们需要寻找一种所谓有最佳线性过滤特性的滤波器,这种滤波器当信号与噪声同时输入时,在输出端能将信号尽可能精确地重现出来,而噪声却受到最大抑制。
维纳(Wiener)滤波就是用来解决这样一类从噪声中提取信号问题的一种过滤(或滤波)方法。
一个线性系统,如果它的单位样本响应为h(n),当输入一个随机信号x(n),且
其中s(n)表示信号,表示噪声,则输出y(n)为
我们希望x(n)通过线性系统h(n)后得到的y(n)尽量接近于s(n),因此称y(n)为s(n)的估计值,用表示,即
维纳滤波器的输入—输出关系
如上图所示。这个线性系统称为对于的一种估计器。
如果我们以分别表示信号的真值与估计值,而用e(n)表示它们之间的误差,即
显然,e(n)可能是正的,也可能是负的,并且它是一个随机变量。因此,用它的均方值来表达误差是合理的,所谓均方误差最小即它的平方的统计平均值最小:
最小
已知希望输出为:
误差为:
均方误差为:
上式对求导得到:
进一步得:
从而有:
于是就得到N个线性方程:
写成矩阵形式为:
简化形式:
其中:是滤波器的系数
是互相关序列
是自相关矩阵
由上可见,设计维纳滤波器的过程就是寻求在最小均方误差下滤波器的单位脉冲响应或传递函数的表达式,其实质就是解维纳-霍夫(Wiener-Hopf)方程。另外,设计维纳滤波器要求已知信号与噪声的相关函数。
三.程序求解过程
由上述可见,本程序实现的关键是在已知输入信号的自相关函数和输入信号和理想输出信号的互相关函数的情况下,求解维纳-霍夫(Wiener-Hopf)方程,从而得到滤波器系数,再进行维纳滤波。
求解步骤:
初始化值
对于,进行如下计算:
3.滤波器系数为:
4.利用上面的得到的滤波器对输入信号进行维纳滤波,得到输出信号。
四.函数说明
函数使用方法:y=wienerfilter(x,Rxx,Rxd,M)
参数说明:x是输入信号,Rxx是输入信号的自相关向量,Rxx是输入信号和理想信号的的互相关向量,M是维纳滤波器的长度,输出y是输入信号通过维纳滤波器进行维纳滤波后的输出。
具体程序见Matlab的.m文件。
五.程序示例
加载Matlab中的语音数据handel,人为地加入高斯白噪声,分别计算加入噪声后信号的自相关和加入噪声后信号和理想信号的互相关,取滤波器的长度为M=500,将以上参数代入函数中进行维纳滤波,得到输出。
程序如下:
load handel %加载语音信号
d=y; d=d*8; %增强语音信号强度
d=d;
fq=fft(d,8192); %进行傅立叶变换得到语音信号频频
subplot(3,1,1);
f=Fs*(0:4095)/8192;
plot(f,abs(fq(1:4096))); %画出频谱图
title(原始语音信号的频域图形);
xlabel(频率 f);
ylabel(FFT);
[m,n]=size(d);
x_noise=randn(1,n); %(0,1)分布的高斯白噪声
x=d+x_noise; %加入噪声后的语音信号
fq=fft(x,8192); %对加入噪声后的信号进行傅立叶变换,看其频谱变化
subplot(3,1,2);
plot(f,abs(fq(1:4096))); %画出加入噪声后信号的频谱图
title(加入噪声后语音信号的频域图形);
xlabel(频率 f);
ylabel(FFT);
yyhxcorr=xcorr(x(1:4096)); %求取信号的信号的自相关函数
size(yyhxcorr);
A=yyhxcorr(4096:4595);
yyhdcorr=xcorr(d(1:4096),x(1:4096)); %求取信号和理想信号的互相关函数
size(yyhdcorr);
B=yyhdcorr(4096:4595);
M=500;
yyhresult=wienerfilter(x,A,B,M); %进行维纳滤波
yyhresult=yyhresult(300:8192+299);
fq=fft(yyhresult); %对维纳滤波的结果进行傅立叶变换,看其频谱变化
subpl
文档评论(0)