matlab求均值方差.docx
《matlab求均值方差.docx》由会员分享,可在线阅读,更多相关《matlab求均值方差.docx(28页珍藏版)》请在冰豆网上搜索。
matlab求均值方差
实验报告
随机信号的数字特征分析
一、实验目的
1.了解随机信号自身的特性,包括均值(数学期望)、方差、均方值等;
2.掌握随机信号的分析方法;
二、实验原理
1.均值测量方法
均值
表示集合平均值或数学期望值。
基于随机过程的各态历经性,最常用的方法是取N个样本数据并简单地进行平均,即
其中,样本信号的采样数据记为
,
为采样间隔。
2.均方误差的测量方法
随机序列的均方误差定义为:
3.方差测量方法
如果信号的均值是已知的,则其方差估计设计为
它是无偏的与渐进一致的。
三、实验内容
利用MATLAB中的伪随机序列产生函数randn()产生多段1000点的序列,编制一个程序,计算随机信号的数字特征,包括均值、方差、均方值、最后把计算结果平均,绘制数字特征图形。
源程序如下:
clearall;
clc;
%产生50个1000以内点的伪随机序列
x=randn(50,1000);
%计算随机产生的50个点序列的均值,方差,均方
average=zeros(1,50);
variance=zeros(1,50);
square=zeros(1,50);
%计算均值
fori=1:
50
forj=1:
1000
average(i)=average(i)+x(i,j);
end
average(i)=average(i)/1000;
end
%计算方差
fori=1:
50
forj=1:
1000
variance(i)=variance(i)+(x(i,j)-average(i)).^2;
end
variance(i)=variance(i)/1000;
end
%计算均方值
fori=1:
50
forj=1:
1000
square(i)=square(i)+x(i,j).^2;
end
square(i)=square(i)/1000;
end
EX=sum(average)/50;
DX=sum(variance)/50;
RMS=sum(square)/50;
plot(average);
title('50个随机序列的均值');
figure;
plot(variance);
title('50个随机序列的方差');
figure;
plot(square);
title('50个随机序列的均方值');
四、实验结果及分析
由上结果可知:
将图中的计算结果平均后,得到的结果为:
产生的50个点的随机序列均值的平均值为:
EX=0.0090197;产生的50个点的随机序列方差的平均值为DX=1.0078;产生的50个点的随机序列均方值的平均值为RMS=1.0087。
由上面所得到的图形可以看出50个点的伪随机序列的均值都在0附近,方差以及均方差都在1附近,将这些均值平均后得出的均值也是在0值附近,方差在1附近,与统计的结果相符合。
实验二数字相关和数字卷积程序
一、实验目的
熟悉数字相关和数字卷积运算。
二、实验原理
1.线性以及循环相关的原理
1.1线性相关的原理
假定x1(n)是列长为N的有限长序列,x2(n)是列长为M的有限长序列,两者的线性相关的结果为:
1.2循环相关的原理
假定x1(n)是列长为N的有限长序列,x2(n)是列长为M的有限长序列,两者循环相关的结果为:
2.线性以及循环卷积的原理
2.1线性卷积的原理
假定x1(n)是列长为N的有限长序列,x2(n)是列长为M的有限长序列,两者的线性卷积的结果为:
2.2循环卷积的原理
循环卷积的矩阵表示形式如下所示:
其中x和H是两个输入的序列,y是循环卷积得到的实验结果。
其中,
,
三、实验内容
编写函数实现两个随机序列的线性、循环相关和线性、循环卷积的程序:
源程序如下:
两个序列线性相关的函数:
clearall
clc
x=ones(1,8);
h=ones(1,10);
nx=length(x);
nh=length(h);
n=nx+nh-1;
fori=nh+1:
n
h(i)=0;
end
fori=nx+1:
n
x(i)=0;
end
fori=1:
n
forj=1:
n
H(i,j)=h(mod(i+j-2,n)+1);
end
end
y=H*x';
subplot(3,1,1);stem(x);title('随机序列1');
subplot(3,1,2);stem(h);title('随机序列2');
subplot(3,1,3);stem(y);title('线性相关结果');
两个序列循环相关的函数:
clearall
clc
x=ones(1,8);
h=ones(1,10);
nx=length(x);
nh=length(h);
n=nx;
if(nx>nh)
fori=nh+1:
n
h(i)=0;
end
end
if(nxn=nh;
fori=nx+1:
n
x(i)=0;
end
end
fori=1:
n
forj=1:
n
H(i,j)=h(mod(i+j-2,n)+1);
end
end
y=H*x';
subplot(3,1,1);stem(x);title('随机序列1');
subplot(3,1,2);stem(h);title('随机序列2');
subplot(3,1,3);stem(y);title('循环相关结果');
两个序列线性卷积的函数:
clearall
clc
x=ones(1,8);
h=ones(1,10);
nx=length(x);
nh=length(h);
n=nx+nh-1;
fori=nx+1:
n
x(i)=0;
end
fori=nh+1:
n
h(i)=0;
end
fori=1:
n
forj=1:
n
H(i,j)=h(mod(i+n-j,n)+1);
end
end
y=H*x';
subplot(3,1,1);stem(x);title('随机序列1');
subplot(3,1,2);stem(h);title('随机序列2');
subplot(3,1,3);stem(y);title('线性卷积结果');
两个序列循环卷积的函数:
clearall
clc
x=ones(1,8);
h=ones(1,10);
n=15;
nx=length(x);
nh=length(h);
if(nfprintf('输入圆周卷积的点数不正确');
break
end
fork=nh+1:
n
h(k)=0;
end
fork=nx+1:
n
x(k)=0;
end
fork=1:
n
forl=1:
n
H(k,l)=h(mod(k+n-l,n)+1);
end
end
y=H*x';
subplot(3,1,1);stem(x);title('随机序列1');
subplot(3,1,2);stem(h);title('随机序列2');
subplot(3,1,3);stem(y);title('循环卷积结果');
四、实验结果及分析
1.线性相关实现的程序及结果
y={8886543211234567}
2.循环相关实现的程序及结果
y={8888888888}
3.线性卷积实现的程序及结果
y={12345678887654321}
4.循环卷积实现的程序及结果
当n=15时
y={333456788876543}
当n=17时
y={12345678887654321}
由上图可知:
15点循环卷积结果与线性卷积的结果是不一致的,但是17点循环卷积结果与线性卷积的结果是一致的。
实验三维纳-霍夫方程的求解
一、实验目的
学习使用Matlab实现W-H程序的编写。
二、实验原理
一个线性系统,如果它的单位样本响应为h(n),当输入一个随机信号x(n):
其中s(n)表示信号,表示噪声,则输出y(n)为
我们希望x(n)通过线性系统h(n)后得到的y(n)尽量接近于s(n),因此称y(n)为s(n)的估计值,用
表示,即
维纳滤波的标准方程
如果我们以
分别表示信号的真值与估计值,而用e(n)表示它们之间的误差
目标:
均方误差
min(MMSE准则)
上式可看成输出等于现在和过去各输入的加权之和
,其中
现在的问题是需要求得使
最小的
,为此,将这式对
求偏导,并令其结果等于0,得
于是
这样就得到维纳滤波的标准方程
FIR维纳滤波器
设h(n)是一个因果序列可以用有限长(长度为N)的序列去逼近它,有上述得到W-H方程的矩阵形式为:
即:
,其中
自相关矩阵称,
为x与s的互相关矩阵
这样得到W-H方程的解为:
三、实验内容
编写函数解W-H方程,寻找最优的滤波器,并检验该程序的准确性。
源程序如下:
clearall;
clc;
%输入信号
A=1;
f=1000;
fs=10^5;
t=(0:
999);
Mlag=100;
x=A*cos(2*pi*f*t/fs);
%给正弦波信号加入信噪比为20dB的高斯白噪声
xn=awgn(x,5);
figure;
subplot(2,2,1)
plot(t,xn)
title('输入信号图像')
%计算输入信号自相关函数
Rxn=xcorr(xn,Mlag,'biased');
subplot(2,2,2)
plot((-Mlag:
Mlag),Rxn)
title('输入信号自相关函数')
%维纳滤波
N=100;
Rxnx=xcorr(xn,x,Mlag,'biased');
rxnx=zeros(N,1);
rxnx(:
)=Rxnx(101:
101+N-1);
Rxx=zeros(N,N);
Rxx=diag(Rxn(101)*ones(1,N));
fori=2:
N
c=Rxn(101+i)*ones(1,N+1-i);
Rxx=Rxx+diag(c,i-1)+diag(c,-i+1);
end
Rxx;
h=zeros(N,1);
h=inv(Rxx)*rxnx;
yn=filter(h,1,xn);
subplot(2,2,3)
plot(yn);
title('经过维纳滤波器后信号信号');
Ryn=xcorr(yn,Mlag,'biased');
subplot(2,2,4);
plot((-Mlag:
Mlag),Ryn);
title('经过维纳滤波器后信号自相关函数');
四、实验结果
从图中可以看出,滤波后得到的正弦信号仍然有一定的误差,但是输入信号的自相关函数在0点出有明显的噪声成分,通过维纳滤波以后得到的信号的自相关函数在0点处已经的噪声给消除了很多。
实验四 Yule-Walker方程的求解
一、实验目的
学习使用Matlab实现Y-W程序的编写。
二、实验原理
1.AR模型的 Yule-Walker方程
AR模型,又称为自回归模型,是一个全极点的模型,可用如下差分方程来表示:
(1)
其中
是均值为零、方差为的白噪声序列,p是AR模型的阶数,a(k),k=1,2,,p是p阶AR模型的参数。
AR模型系统H(z)的转移函数为:
(2)
从而得到AR模型的功率谱估计的计算公式:
(3)
由上式可以看出,要利用AR模型进行功率谱估计,必须得到模型参数和白噪声序列的方差。
将
(1)式变形有:
(4)
式(4)的矩阵形式为:
(5)
式(4)和(5)是AR模型的ARYule-Walker方程。
2.burg算法求解方法
Burg算法是使序列x(n)的前后向预测误差功率之和:
(6)
最小。
利用Burg法求解AR模型参数的步骤:
第一步:
由初始条件
,
根据公式(7)求出反射系数
:
(7)
第二步:
根据序列x(n)自相关函数
,求出阶次m=1时的AR模型参数a(1,1)=k1与前后向预测误差功率之和。
第三步:
由式(8)求出前向预测误差
与后向预测误差
然后由式(7)估计出反射系数k2;
(8)
第四步:
由(9)Levinsion递推关系,求出阶次m=2时的AR模型参数a(2,1)和
;
(9)
第五步:
重复上述过程,直到阶次m=p,这样就求出了所有阶次的AR模型参数。
Burg算法的递推过程是建立在数据序列基础上,避开了序列的自相关函数的估计,所以与自相关法相比,具有较好的频率分辨率。
三、实验内容
已知观测信号,编写函数解Y-W方程,寻找参数系数,并检验该程序的准确性和掌握用法。
源程序如下:
clearall;
x=cos(0:
0.1:
50);
N=length(x);
%周期图法
FFTX=fft(x);
POW=(abs(FFTX).^2)/N;
subplot(1,2,1),plot(1/N:
2*pi/N/2/pi:
0.5,POW(1:
N/2));
title('周期图求取功率谱');xlabel('f/Hz');
%Burg法的AR谱估计
p=8;
a=zeros(p,p);
%初始化前向和后向误差以及γ
e=x;
b=x;
sigma=0;
fori=1:
N
sigma=sigma+x(i).^2;
end
sigma=sigma/N;
forn=1:
p
sum1=0;
sum2=0;
forj=n+1:
N
sum1=sum1+2*e(j)*b(j-1);
sum2=sum2+e(j).^2+b(j-1).^2;
end
a(n,n)=-sum1/sum2;
sigma=sigma*(1-abs(a(n,n)).^2);
ifn>=2
fori=1:
n-1
a(n,i)=a(n-1,i)+a(n,n)*a(n-1,n-i);
end
end
forj=n+1:
N
c(j)=e(j)+a(n,n)*b(j-1);
d(j)=b(j-1)+a(n,n)*e(j);
end
e=c;
b=d;
end
%计算并输出功率谱
form=1:
N
sum=0;
forn=1:
p
sum=a(p,n)*exp(-sqrt(-1)*2*pi*n*m/N)+sum;
end
POW2(m)=sigma/(abs(1+sum).^2);
end
subplot(1,2,2),plot(1/N:
2*pi/N/2/pi:
0.5,POW2(1:
N/2));
title('AR模型谱估计法求取功率谱');
xlabel('f/Hz');
四.实验结果及分析
实验中输入的信号为余弦信号,理想情况下其功率谱是在余弦信号频率上的一个冲击函数。
从实验的结果图可以看出,用AR模型估计的功率谱同用周期图法估计的功率谱一样,说明了用该方法所计算的功率谱的准确性。
实验五自适应噪声抵消算法的软件设计与实现
一、实验目的
学习使用MATLAB编写LMS自适应滤波器,以及如何在生物医学信号中进行应用。
二、实验原理
1、自适应干扰抵消的原理
图1自适应干扰抵消原理图
图1所示的是自适应干扰抵消器的基本结构。
期望信号d(n)是信号与噪声之和,即d(n)=x(n)+N(n),自适应处理器的输入是与N(n)相关的另一个噪声N’(n)。
当x(n)和N(n)不相关时,自适应处理器将调整自己的参数,使y(n)成为N(n)的最佳估计
。
这样,e(n)将逼近信号x(n),且其均方差E[e2(n)]为最小。
噪声N(n)就得到了一定程度的抵消。
2、LMS自适应滤波算法
图2单输入自适应线性组合器
LMS算法使用的准则是使滤波器的期望输出值和实际输出值之间的均方误最小化的准则,即使用均方误差来做性能指标。
自适应滤波的结果如图2所示。
各符号的意义是:
x(n)输入信号,y(n)为滤波器的输出,d(n)为y(n)想要趋近的理想信号,d(n)是已知的,e(n)为误差信号。
滤波器均方误差可表示为:
设自适应滤波器的输入矢量为:
加权矢量(即滤波器参数矢量)为:
滤波器的输出为:
误差信号为期望输出d(n)与滤波器实际输出之间的误差,即
(1)
LMS算法是取单个误差样本的平方e2(n)的梯度作为均方误差梯度的估计,由式
(1)可得梯度矢量的估计为:
由此得到一个新的权矢量递推公式,即LMS算法递推公式为:
三、实验内容
已知观测信号,编写LMS滤波器,对该信号进行滤波处理,检验该程序的准确性和掌握MATLAB自带函数的用法。
源程序如下:
clearall;
d=sin(0:
0.1:
50);
M=length(d);
%设定滤波器的长度为15
N=15;
noise=0.2*sin(50*(0:
0.1:
50));%噪声信号
x=d+noise;
u=0.01;
%初始化滤波器的参数为全0的矩阵
w=zeros(1,N);
forn=N:
M
y(n)=0;
fori=1:
N
y(n)=y(n)+x(n-i+1)*w(i);
end
e(n)=d(n)-y(n);
fori=1:
N%进行滤波器参数的调整
w(i)=w(i)+2*u*e(n)*x(n-i+1);
end
end
subplot(2,1,1);
plot(y);
title('滤波处理后得到的信号')
subplot(2,1,2);
plot(x);
title('观测到的信号');
四、实验结果及分析
实验中输入的原始信号为正弦信号,噪声为在正弦信号的基础上加入一个50倍频率的噪声信号,观测到的信号是这两个信号的叠加,利用LMS算法进行滤波处理,从从实验结果中可以看出,在LMS的加权参数稳定之后的输出结果比较理想。