利用相关分析法辨识脉冲响应

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

利用相关分析法辨识脉冲响应

自1205 刘彬 41251141

1 实验方案设计

1.1 生成输入数据和噪声

用M 序列作为辨识的输入信号,噪声采用标准正态分布的白噪声。 生成白噪声时,首先利用乘同余法生成U[0,1]均匀分布的随机数,再利用U[0,1]均匀分布的随机数生成标准正态分布的白噪声。 1.2 过程仿真

模拟过程传递函数)(s G ,获得输出数据y(k)。)(s G 采取串联传递函数仿真,

2

12111

11)(T s T s T T K s G ++=

,用M 序列作为辨识的输入信号。

1.3 计算互相关函数

∑++=-=

p

p N r N i p

Mz i z k i u rN k R )1(1

)()(1

)(

其中r 为周期数,1+=p N i 表示计算互相关函数所用的数据是从第二个周期开始的,目的是等过程仿真数据进入平稳状态。

1.4 计算脉冲响应估计值、脉冲响应理论值、脉冲响应估计误差

脉冲响应估计值[]

)1()()1()(ˆ2

--∆+=p Mz Mz

p

p

N R k R

t

a N N k g

脉冲响应理论值[]

21//2

10)(T t k T t k e e T T K

k g ∆-∆---=

脉冲响应估计误差

()()

∑∑==-=

p

p

N k N k g k g

k g

k g

1

2

1

2

)()(ˆ)(δ 1.5 计算噪信比

信噪比()()2

2

)()(v k v y k y --=η

2 编程说明

M 序列中,M 序列循环周期取

63

126=-=p N ,时钟节拍t ∆=1Sec ,幅度1=a ,

特征多项式为1)(56⊕⊕=s s s F 。白噪声循环周期为32768215=。

)(s G 采样时间0T 设为1Sec ,Sec 2.6 Sec,3.8 ,12021===T T K

3 源程序清单

3.1 均匀分布随机数生成函数

function sita=U(N)

%生成N 个[0 1]均匀分布随机数 A=179; x0=11; M=2^15; for k=1:N x2=A*x0;

x1=mod(x2,M); v1=x1/(M+1); v(:,k)=v1; x0=x1; end sita=v; end

3.2 正态分布白噪声生成函数

function v=noise(aipi)

%生成正态分布N(0,sigma)

sigma=1; %标准差

for k=1:length(aipi)

ksai=0;

for i=1:12

temp=mod(i+k,length(aipi))+1;

ksai=ksai+aipi(temp);

end

v(k)=sigma*(ksai-6);

end

end

3.3 M序列生成函数

function [Np r M]=createM(n,a)

%生成长度为n的M序列,周期为Np,周期数为r

x=[1 1 1 1 1 1]; %初始化初态

for i=1:n

y=x;

x(2:6)=y(1:5);

x(1)=xor(y(5),y(6));

U(i)=y(6);

end

M=U*a;

lenx=length(x);

Np=2^lenx-1;

r=n/Np;

end

3.4 过程仿真函数

function y=createy(u,K,T1,T2,T0)

n=length(u);

K1=K/(T1*T2);

E1=exp(-T0/T1);

E2=exp(-T0/T2);

x(1)=0;

y(1)=0;

for k=2:n

x(k)=E1*x(k-1)+T1*K1*(1-E1)*u(k-1)...

+T1*K1*(T1*(E1-1)+T0)*(u(k)-u(k-1))/T0;

y(k)=E2*y(k-1)+T2*(1-E2)*x(k-1)...

+T2*(T2*(E1-1)+T0)*(x(k)-x(k-1))/T0;

u(k-1)=u(k);

x(k-1)=x(k);

y(k-1)=y(k);

end

end

3.5 相关函数计算函数

function R_Mz=RMz(Np,r,u,z)

r=r-1;

y=zeros(1,Np);

for k=1:Np

y(k)=0;

for i=Np+1:(r+1)*Np

y(k)=y(k)+u(i-k)*z(i);

end

y(k)=y(k)/(r*Np);

end

R_Mz=y;

end

3.5 主函数

function [og yita]=main(time)

% 脉冲响应估计误差og

% 噪信比yita

N=time*63;

K=120; T1=8.3; T2=6.2; T0=1; a=1;

sita=U(N); %生成[0 1]均匀分布随机数

v=noise(sita); %利用aipi生成正态分布白噪声

[Np r u]=createM(N,a); %生成长度为N的M序列

y=createy(u,K,T1,T2,T0); %利用M序列驱动,生成y

z=y+v;

R_Mz=RMz(Np,r,u,z); %计算相关函数

% 计算脉冲响应估计值

g_k=zeros(1,Np);

for k=1:Np

g_k(1,k)=(R_Mz(1,k)-R_Mz(Np-1))*Np/((Np+1)*a*a*T0);

end

% 计算脉冲响应理论值

Eg=zeros(1,Np);

for k=1:Np

Eg(1,k)=K/(T1-T2)*(exp(-k*T0/T1)-exp(-k*T0/T2));

end

% 计算脉冲响应估计误差

og=sqrt(norm(Eg-g_k)^2/norm(Eg)^2);

ov=fangcha(v); %计算噪声方差

oy=fangcha(y); %计算信号方差

相关文档
最新文档