UKF应用于GPS-IMU组合导航系统的MATLAB代码

UKF应用于GPS-IMU组合导航系统的MATLAB代码
UKF应用于GPS-IMU组合导航系统的MATLAB代码

组合导航系统的计算程序代码

function yy=ukf_IMUgps()

%function ukf_IMUgps()

% UKF在IMU/GPS组合导航系统中应用

%

% 以IMU中的位置、速度、姿态误差角、陀螺漂移常值为状态量;

% 以GPS中的位置、速度为观测量。

%

% 7,July 2008.

clc

% Initialise state

global we RN RM g fl deta wg Tt wt d ww v u W Rbl Ta wa

d=0; %验证循环次数

%地球自转角速度we(rad/s):

we=7.292115e-5;

g=9.81; %地球重力加速度(m/s^2)

a=6.378137e+6; %地球长半轴

e2=0.0066944; %地球第一偏心率的平方

%姿态角初始值(r,p,y)

zitai=(pi/180).*[0 2.0282 196.9087];

%姿态误差角

fai=(pi/180).*[1/36 1/36 5/36]; %(100'',100'',500'')

r=zitai(1)+fai(1);

p=zitai(2)+fai(2);

y=zitai(3)+fai(3);

%当地坐标系(l)相对于载体坐标系(b)的转换矩阵:Rbl(在e,n,u坐标系下)Rbl=[cos(r)*cos(y)-sin(r)*sin(y)*sin(p) -sin(y)*cos(p) cos(y)*sin(r)+sin(y)*sin(p)*cos(r) cos(r)*sin(y)+sin(r)*cos(y)*sin(p) cos(y)*cos(p) sin(y)*sin(r)-cos(y)*sin(p)*cos(r) -cos(p)*sin(r) sin(p) cos(p)*cos(r)];

%由转换矩阵Rbl计算四元数的初始值Q0=[q1,q2,q3,q4]'

QQ=[0.5*sqrt(1+Rbl(1,1)+Rbl(2,2)+Rbl(3,3))

0.25*(Rbl(3,2)-Rbl(2,3))/(0.5*sqrt(1+Rbl(1,1)+Rbl(2,2)+Rbl(3,3)))

0.25*(Rbl(1,3)-Rbl(3,1))/(0.5*sqrt(1+Rbl(1,1)+Rbl(2,2)+Rbl(3,3)))

0.25*(Rbl(2,1)-Rbl(1,2))/(0.5*sqrt(1+Rbl(1,1)+Rbl(2,2)+Rbl(3,3)))];

%IMU系统给出的初始值:速度(ve,vn,vu),位置(l,m,h)=(经度,纬度,高度),姿态误差角fai(e,n,u)

vIMU=[-21.775011 -71.631027 3.10094];

point_IMU=[0.147022986 0.81837365 3122.826];

T=1; %UKF滤波的采样周期(s)

%陀螺常值漂移初始值tuo(e,n,u)(单位:。/s)

tuo=[0 0 0];

%陀螺一阶相关时间Tt(s)

Tt=[60 60 60];

%加速度计常值漂移初始值jiasu(e,n,u)(单位:m/s^2)

jiasu=[0 0 0];

%加速度计一阶反相关时间Ta(s)

Ta=[60 60 60];

%IMU系统的状态向量X

x=[vIMU point_IMU fai tuo jiasu]';

%观测量噪声V的斜方差矩阵

R=[];

%GPS系统的量测值Z(vn,ve,vd,m,l,h)

[z Rz]=gps_tiqushuju;

%Vk的噪声序列方差为:Rk

Rz=(Rz./T);

%陀螺常值漂移wt(e,n,u)

wt=(pi/180).*[1/(3600) 1/(3600) 1/(3600)]; % 1 (。/h)

%陀螺常值漂移误差wtt(e,n,u)

wtt=(pi/180).*[0.08/(3600) 0.08/(3600) 0.08/(3600)]; % 0.08 (。/h)

%加速度计常值漂移wa(e,n,u)

wa=[2e-6 2e-6 2e-6]; % 200μg (2e-6 m/s^2)

%加速度计常值漂移误差waa(e,n,u)

waa=[2e-6 2e-6 2e-6]./4; % 50μg (0.5e-6 m/s^2)

%姿态误差角噪声wg

wg=wt;

%状态向量X的斜方差矩阵

P = eye(length(x))*eps; % note: for stability, P should never be quite zero

%速度误差:(0.1m/s) 位置误差:水平(1m),高度(5m)

u=[0.1 0.1 0.1 0.000474429 0.000474429 2 wg wtt waa]';

%IMU系统在载体坐标系下的比力值输出值fb

fb=[];

%IMU系统中陀螺输出量

wib=[]; %为载体坐标系(b)相对于惯性坐标系(i)的角速度向量

[f w]=IMU_tiqushuju; %IMU系统输出的比力值和角速度

%%%%%%%%%通过GPS观测值计算得到的姿态角

zitaijiao_gps=xlsread('D:\myfile\UKF\kalmanfilter_MATLAB\germany_ukf\原始数据\zitiajiao-gps.xls');

%%%------------------------------------------------------------

%% 循环开始:for 1:n

outx=[];

outp=[];

detajiao=zeros(3,1);

NN =1000;

for i=1:NN

outx=[outx;x'];

outp=[outp;diag(P)'];

%大地子午圈曲率半径:RM

RM=a*(1-e2)/(1-e2*(sin(x(5)))^2)^(2/3);

%地球卯酉圈的曲率半径:RN

RN=a/sqrt(1-e2*(sin(x(5)))^2);

%当地坐标系下的比力值fl

%IMU系统在载体坐标系下的比力值输出值fb转换到当地坐标系(l)下fl

fb=f(i,:)';

%fl=Rbl*(fb+[x(13) x(14) x(15)]'); %初始对准,比力值加上加速度计的测量偏差

fl=Rbl*fb;

%计算IMU的速度、位置输出减去GPS相应的输出值:deta(ve,vn,l,h)

zd=z(i,:)';

deta=x([1 2 5 6],:)-zd([1 2 5 6],:);

%观测值zz,及观测噪声R

zz=z(i+1,:)';

v=Rz(i+1,:)';

%zitai_v=[0.001 0.0266 0.9664]'; %GPS观测值姿态角的误差

zitai_v=[0.00001 7.0983e-004 0.0006]'; %GPS观测值姿态角的误差

v=[v;zitai_v];

R=diag(v.^2);

%%通过GPS观测值,计算得到roll=0 ,pitch=atan(ve/vn),yaw=asin(h12/s12) ,将姿态误差角加入观测量中进行滤波计算

zz=[zz;detajiao];

%%%%GPS计算得到的姿态角

z_zitai=zitaijiao_gps(i+1,:);

%%IMU系统的力学编排方程和姿态误差方程离散化之后的截断误差:

ve=x(1);vn=x(2);vu=x(3);l=x(4);m=x(5);h=x(6);faie=x(7);fain=x(8);faiu=x(9);tuo1=x(10);tuo2=x (11);tuo3=x(12);

fl1=fl(1);fl2=fl(2);fl3=fl(3);deta1=deta(1); deta2=deta(2); deta3=deta(3); deta4=deta(4);wg1=wg(1);wg2=wg(2);wg3=wg(3);

jiasu1=x(13);jiasu2=x(14);jiasu3=x(15);Ta1=Ta(1);Ta2=Ta(2);Ta3=Ta(3);wa1=wa(1);wt2=wa(2) ;wt3=wa(3);

Q=diag((u).^2);

% predict

[x,P] = predict(x, P,u, Q, T);

% update

[x,P] = update(x, P, zz, R);

%%

xx=x;

x=xx(1:15,1);

u=xx(16:30,1);

%u(1)=u(1)+x(13);

%u(2)=u(2)+x(14);

%u(3)=u(3)+x(15);

%u(7)=x(10);

%u(8)=x(11);

%u(9)=x(12);

PP=P;

P=PP(1:15,1:15);

%利用四元数Q计算转换矩阵Rbl

%首先计算在当地坐标系(l)下的角速度向量wbl

%地固坐标系(e)相对于当地坐标系(l)的转换矩阵:Rel=Rle'

%Rel=[-sin(x(4)) cos(x(4)) 0

% -sin(x(5))*cos(x(4)) -sin(x(5))*sin(x(4)) cos(x(5))

% cos(x(5))*cos(x(4)) cos(x(5))*sin(x(4)) sin(x(5))];

wie=[0 0 we]'; %wie 为地球自转角速度向量

%%%%%%%

omiga12=[];

for k=0:1

wib=w(i+k,:)'+T.*[x(10) x(11) x(12)]'; %初始对准,角速度加上陀螺漂移wiel=[0 we*cos(x(5)) we*sin(x(5))]';

%wiel=Rel*wie;

well=[-x(2)/(RM+x(6)) x(1)/(RN+x(6)) x(1)*tan(x(5))/(RN+x(6))]';

will=wiel+well;

wlb=wib-Rbl'*will;

%四元数的更新

%计算反对称矩阵omiga

omiga=[0 wlb(3) -wlb(2) wlb(1)

-wlb(3) 0 wlb(1) wlb(2)

wlb(2) -wlb(1) 0 wlb(3)

wlb(1) wlb(2) wlb(3) 0];

omiga12=[omiga12,omiga];

end

omiga1=omiga12(1:4,1:4);

omiga2=omiga12(1:4,5:8);

%采用四阶龙格-库塔法数值积分解Q(K+1)

QQ=QQ+(0.5*T.*(omiga1+omiga2)+8^(-1)*T^2.*(omiga1^2+omiga1*omiga2+omiga2^2)+48^(-1)*T^3.*(omiga1^2*omiga2+omiga1*omiga2^2)+384^(-1)*T^4.*(omiga1^2*omiga2^2))*QQ;

%由Q(k+1)可得Rbl(k+1)

Rbl=[QQ(1)^2+QQ(2)^2-QQ(3)^2-QQ(4)^2 2*(QQ(2)*QQ(3)-QQ(1)*QQ(4)) 2*(QQ(2)*QQ(4)+QQ(1)*QQ(3))

2*(QQ(2)*QQ(3)+QQ(1)*QQ(4)) QQ(1)^2-QQ(2)^2+QQ(3)^2-QQ(4)^2 2*(QQ(3)*QQ(4)-QQ(1)*QQ(2))

2*(QQ(2)*QQ(4)-QQ(1)*QQ(3)) 2*(QQ(2)*QQ(1)+QQ(4)*QQ(3)) QQ(1)^2-QQ(2)^2-QQ(3)^2+QQ(4)^2];

%由Rbl(k+1)可得姿态角,(翻滚角r,俯仰角p,航向角y)k+1

%实际导航系(p系)相对于理想导航系(n系)存在误差角fai(e,n,u),Cpn为校正矩阵

%当方位角为大失准角时

Cpn=[cos(x(9)) -sin(x(9)) x(8)*cos(x(9))+x(7)*sin(x(9))

sin(x(9)) cos(x(9)) x(8)*sin(x(9))-x(7)*cos(x(9))

-x(8) x(7) 1];

%%当三个方向的失准角为小角度时

Cpnn=[1 -x(9) x(8)

x(9) 1 -x(7)

-x(8) x(7) 1];

if abs(x(9))*180*60/pi < 10 %当姿态误差角(u),即方位角失准角小于10’时的情况;

Rbl=Cpnn*Rbl; %小失准角

else

Rbl=Cpn*Rbl; %大失准角

end

zitai0=[atan(-Rbl(3,1)/Rbl(3,3))

asin(Rbl(3,2))

atan(-Rbl(1,2)/Rbl(2,2))];

if Rbl(2,2)<0 & zitai0(3)<0

zitai0(3)=zitai0(3)+pi;

end

if Rbl(2,2)<0 & zitai0(3)>0

zitai0(3)=zitai0(3)-pi;

end

% detajiao=zitai0-z_zitai';

% detajiao(1)=0;

% detajiao=Rbl*detajiao;

% if abs(detajiao(2)) < abs(x(8))

% x(8)=detajiao(2);

% %zitai0(2)=z_zitai(2);

% end

%if abs(detajiao(3)) < abs(x(9))

% x(9)=detajiao(3);

%zitai0(3)=z_zitai(3);

%end

zitai=[zitai;zitai0'];

end

%将协方差转换成标准差

outp=(outp).^(1/2);

%将位置误差中的经度和纬度形式转换成当地坐标系(e,n,u)形式for k=1:NN

%大地子午圈曲率半径:RM

RM=a*(1-e2)/(1-e2*(sin(outx(k,5)))^2)^(2/3);

%地球卯酉圈的曲率半径:RN

RN=a/sqrt(1-e2*(sin(outx(k,5)))^2);

outp(k,4)=(RN+outx(k,6))*cos(outx(k,5))*outp(k,4);

outp(k,5)=(RM+outx(k,6))*outp(k,5);

end

%绘制高度图

figure

plot(outx(:,6),'r-.');

title('UKF计算的高度(germany-data)');

figure

plot((180/pi)*outx(:,8),'r-');

title('UKF姿态误差角pitch(度)(germany-data)');

% 绘制图:水平运动轨迹

figure

plot(outx(:,4),outx(:,5),'b-');

title('UKF Level of Movement(Germany-data)');

xlabel('Longitude(rad)');

ylabel('Latitude(rad)');

%hold on

%gpsweizhi=xlsread('原始数据\sudu-weizhi-gps.xls');

%plot(gpsweizhi(:,4),gpsweizhi(:,5),'r-');

%hold off

%绘制图;UKF速度误差

figure

subplot(3,1,1)

plot(outp(:,1),'b-');

title('UKF Velocity Error(Germany-data)');

ylabel('Ve(m/s)');

subplot(3,1,2)

plot(outp(:,2),'b-');

ylabel('Vn(m/s)');

subplot(3,1,3)

plot(outp(:,3),'b-');

xlabel('t(s)');

ylabel('Vu(m/s)');

%绘制图;UKF位置误差

figure

subplot(3,1,1)

plot(100.*outp(:,4),'b-');

title('UKF Location Error(Germany-data)'); ylabel('x(cm)');

subplot(3,1,2)

plot(100.*outp(:,5),'b-');

ylabel('y(cm)');

subplot(3,1,3)

plot(100.*outp(:,6),'b-');

xlabel('t(s)');

ylabel('z(cm)');

%绘制图;UKF姿态角误差

figure

subplot(3,1,1)

plot(3600*(180/pi)*outp(:,7),'b-');

title('UKF Attitude Error(Germany-data)'); ylabel('roll(second)');

subplot(3,1,2)

plot(3600*(180/pi)*outp(:,8),'b-');

ylabel('pitch(second)');

subplot(3,1,3)

plot(3600*(180/pi)*outp(:,9),'b-');

xlabel('t(s)');

ylabel('yaw(second)');

xlswrite('计算结果\output_x.xls',outx); xlswrite('计算结果\output_p.xls',outp); xlswrite('计算结果\output_zitai.xls',zitai);

%

%

function [x,P] = predict(x, P,u, Q, T)

%进行无迹变换

P = blkdiag(P,Q);

x=[x;u];

% Perform unscented transform

[x,P] = unscented_transform(@predict_model, [], x, P, T); % notice how the additional parameter 'T' is passed to the model

%%%function [y, Y] = unscented_transform(func, dfunc, x,P,varargin):注意其中'dfunc'不知道?P(1:15,1:15)=P(1:15,1:15)+Q;

%

%

function [x,P] = update(x, P, z, R)

[x,P] = unscented_update(@observe_model,@observe_residual, x, P, z, R);

%

function x = predict_model(x, T)

global wt Tt Ta wa Rbl

%计算预报值

% 由于UKF使用的是离散时间非线性模型,

% 因此需要对IMU/GPS组合系统模型进行离散化处理;

% 这里采用四阶Runge-kuta法以数值积分的形式实现。

% Y(k+1)=Y(k)+(y1+2*y2+2*y3+y4)/6

% 其中:y1=f(Y(k))*T; y2=f(Y(k)+y1/2)*T; y3=f(Y(k)+y2/2)*T; y4=f(Y(k)+y3)*T;

[n,N]=size(x);

y=[];

for k=1:N

xx=x(:,k);

%陀螺漂移常值方程

xx(10)=xx(10)*exp(-1/Tt(1))+wt(1);

xx(11)=xx(11)*exp(-1/Tt(2))+wt(2);

xx(12)=xx(12)*exp(-1/Tt(3))+wt(3);

%加速度计漂移常值方程

xx(13)=xx(13)*exp(-1/Ta(1))+wa(1);

xx(14)=xx(14)*exp(-1/Ta(2))+wa(2);

xx(15)=xx(15)*exp(-1/Ta(3))+wa(3);

x1=detaf(xx,T); % T为采样周期

x2=detaf(xx+x1./2,T);

x3=detaf(xx+x2./2,T);

x4=detaf(xx+x3,T);

xx=xx+(x1+2.*x2+2.*x3+x4)./6+[xx(16:30,1);zeros(15,1)];

y=[y,xx]; %由K状态到K+1状态的预估计

end

x=y;

%%%

function dta=detaf(x,T)

global we RN RM fl g deta wg Rbl wt Tt

%IMU系统的力学编排方程

zhongli=9.7803267714*(1+0.00527094*(sin(x(5)))^2+0.0000232718*(sin(x(5)))^4)-(0.3086*10^ (-5))*x(6);

dve=(2*we*sin(x(5))+x(1)*tan(x(5))/(RN+x(6)))*x(2)-(2*we*cos(x(5))+x(1)/(RN+x(6)))*x(3)+fl (1)+fl(2)*x(9)-fl(3)*x(8)+[Rbl(1,1) Rbl(1,2) Rbl(1,3)]*[x(13) x(14) x(15)]';

dvn=-(2*we*sin(x(5))+x(1)*tan(x(5))/(RN+x(6)))*x(1)-x(2)*x(3)/(RM+x(6))+fl(2)+fl(1)*x(9)-fl( 3)*x(7)+[Rbl(2,1) Rbl(2,2) Rbl(2,3)]*[x(13) x(14) x(15)]';

dvu=(2*we*cos(x(5))+x(1)/(RN+x(6)))*x(1)+(x(2))^2/(RM+x(6))-zhongli+fl(3)+fl(2)*x(7)-fl(1)* x(8)+[Rbl(3,1) Rbl(3,2) Rbl(3,3)]*[x(13) x(14) x(15)]';

dl=x(1)/(cos(x(5))*(RN+x(6)));

dm=x(2)/(RM+x(6));

dh=x(3);

%IMU系统的姿态误差方程

%dfaie=(we*sin(x(5))+x(1)*tan(x(5))/(RN+x(6)))*x(8)-(we*cos(x(5))+x(1)/(RN+x(6)))*sin(x(9)) -x(2)*(1-cos(x(9)))/(RM+x(6))-deta(2)/(RM+x(6))+x(2)*deta(4)/(RM+x(6))^2+[Rbl(1,1) Rbl(1,2) Rbl(1,3)]*[x(10) x(11) x(12)]';

%dfain=-(we*sin(x(5))+x(1)*tan(x(5))/(RN+x(6)))*x(7)-x(2)*sin(x(9))/(RM+x(6))+(we*cos(x(5)

)+x(1)/(RN+x(6)))*(1-cos(x(9)))+deta(1)/(RN+x(6))-x(1)*deta(4)/(RN+x(6))^2-we*sin(x(5))*det a(3)+[Rbl(2,1) Rbl(2,2) Rbl(2,3)]*[x(10) x(11) x(12)]';

%dfaiu=-(we*cos(x(5))+x(1)/(RN+x(6)))*(x(8)*sin(x(9))-x(7)*cos(x(9)))+x(2)*(x(8)*cos(x(9))+x (7)*sin(x(9)))/(RM+x(6))+deta(1)*tan(x(5))/(RN+x(6))-x(1)*deta(4)*tan(x(5))/(RM+x(6))^2+(we *cos(x(5))+x(1)*(sec(x(5)))^2/(RN+x(6)))*deta(3)+[Rbl(3,1) Rbl(3,2) Rbl(3,3)]*[x(10) x(11) x(12)]';

dfaie=(we*sin(x(5))+x(1)*tan(x(5))/(RN+x(6)))*x(8)-(we*cos(x(5))+x(1)/(RN+x(6)))*x(9)+deta( 2)/(RM+x(6))-x(2)*deta(4)/(RM+x(6))^2+x(10);

dfain=-(we*sin(x(5))+x(1)*tan(x(5))/(RN+x(6)))*x(7)-x(2)*x(9)/(RM+x(6))-deta(1)/(RN+x(6))+x (1)*deta(4)/(RN+x(6))^2+we*sin(x(5))*deta(3)+x(11);

dfaiu=(we*cos(x(5))+x(1)/(RN+x(6)))*x(7)+x(2)*x(8)/(RM+x(6))-deta(1)*tan(x(5))/(RN+x(6))+x (1)*deta(4)*tan(x(5))/(RM+x(6))^2-(we*cos(x(5))+x(1)*(sec(x(5)))^2/(RN+x(6)))*deta(3)+x(12); dta=T.*[dve,dvn,dvu,dl,dm,dh,dfaie,dfain,dfaiu,0,0,0,0,0,0]'; % T为采样周期

dta=[dta;zeros(15,1)];

%

%

function z = observe_model(x)

% 观测方程:z=Hx+v,其中H为单位矩阵

global v

[m,M]=size(x);

h=[eye(9),zeros(9,6),zeros(9,15)];

z = h*x+repvec(v,M);

%

function dz = observe_residual(z1, z2)

% Given two observation values, compute their normalised residual.

% Notice, once again, that the model is vectorised in terms of z1 and z2.

dz = z1-z2;

function x = repvec(x,N)

x = x(:, ones(1,N));

%

%

UKF的程序代码

function [y, Y] = unscented_transform(func, dfunc, x, P, varargin)

%function [y, Y] = unscented_transform(func, dfunc, x, P, ...)

%

% Algorithm implemented as described in:

% A New Method for the Nonlinear Transformation of Means and Covariances in Filters and Estimators

% 3, APIRL 2008

%

% INPUTS:

% func - function handle (@myfunc) or string ('myfunc') for non-linear transform.

% dfunc - function handle (or string) for residual between two transformed values: e = mydfunc(y1, y2).

% x, P - initial mean and covariance.

% ... - optional arguments such that 'func' has form: y = myfunc(x, ...).

%

% OUTPUTS:

% y, Y - transformed mean and covariance.

%

% NOTES:

% 1. The unscented filter has two primary advantages over the EKF: (i) it produces a more accurate

% estimate of the first and second moments of a random vector transformed through a non-linear

% function, and (ii) it does not require analytical Jacobians.

%

% 2. The function 'func' is the non-linear function itself and transforms 'x' to 'y'. This

% function may be passed any number of additional parameters.

% eg, y = myfunc(x, p1, p2, p3);

%

% 3. The function 'dfunc' is required to deal with discontinuous functions. Some non-linear

% functions are discontinuous, but their residuals are not equal to the discontinuity. A classic % example is a normalised polar measurement:

% y1 = myfunc(x1, p1, p2, p3); % lets say y1 == pi

% y2 = myfunc(x2, p1, p2, p3); % lets say y2 == -pi

% dy = y1 - y2; % dy == 2*pi -- this is wrong (must be within +/- pi)

% dy = mydfunc(y1, y2); % dy == 0 -- this is correct

% Thus, 'mydfunc' is a function that computes the true residual of y1-y2. If the function 'myfunc'

% is not discontinuous, or has a trivial residual, just pass [] to parameter 'dfunc'.

%

% 4. The functions 'func' and 'dfunc' must be vectorised. That is, they must be able to accept a set of

% states as input and return a corresponding set of results. So, for 'func', the state x will not be a

% single column vector, but a matrix of N column vectors. Similarly, for 'dfunc', the parameters y1 and

% y2 will each be matrices of N column vectors.

%

% EXAMPLE USE:

% [y,Y] = unscented_transform(@myfunc, @mydfunc, x,P, p1, p2, p3);

% [a,B] = unscented_transform('continuous_model', [], x,P);

%

% Tim Bailey 2003, modified 2004, 2005.

% Set up some values

D = length(x); % state dimension

N = D*2 + 1; % number of samples

scale = 3; % want scale = D+kappa == 3

kappa = scale-D;

% Create samples

Ps = chol(P)'.* sqrt(scale);

ss = [x, repvec(x,D)+Ps, repvec(x,D)-Ps];

% Transform samples according to function 'func'

if isempty(dfunc), dfunc = @default_dfunc; end

ys = feval(func, ss, varargin{:}); % compute (possibly discontinuous) transform

base = repvec(ys(:,1), N); % set first transformed sample as the base

delta = feval(dfunc, base, ys); % compute correct residual

ys = base - delta; % offset ys from base according to correct residual

% Calculate predicted observation mean

idx = 2:N;

y = (2*kappa*ys(:,1) + sum(ys(:,idx),2)) / (2*scale);

% Calculate new unscented covariance

dy = ys - repvec(y,N);

Y = (2*kappa*dy(:,1)*dy(:,1)' + dy(:,idx)*dy(:,idx)') / (2*scale);

% Note: if x is a matrix of column vectors, then x*x' produces the sum of outer-products.

%

%

function e = default_dfunc(y1, y2)

e = y1 - y2;

%

%

function x = repvec(x,N)

x = x(:, ones(1,N));

function [x,P] = unscented_update(zfunc, dzfunc, x,P, z,R, varargin)

%[x,P] = unscented_update(zfunc,dzfunc, x,P, z,R, ...)

%

% 3,APIRL 2008

%

% INPUTS:

% zfunc - function handle (@myfunc) or string ('myfunc') for observe model.

% dzfunc - function handle (or string) for observation residual: v = mydfunc(z, z_predict);

% x, P - predict mean and covariance

% z, R - observation and covariance (observation noise is assumed additive)

% ... - optional arguments such that 'zfunc' has the form: z = myfunc(x, ...)

%

% OUTPUTS:

% x, P - updated mean and covariance

%

% NOTES:

% 1. This function uses the unscented transform to compute a Kalman update.

%

% 2. The function 'zfunc' is the non-linear observation function. This function may be passed % any number of additional parameters.

% eg, z = my_observe_model(x, p1, p2);

%

% 3. The residual function 'dzfunc' is required to deal with discontinuous functions. Some non-linear

% functions are discontinuous, but their residuals are not equal to the discontinuity. A classic % example is a normalised angle measurement model:

% z1 = angle_observe_model(x1, p1, p2, p3); % lets say z1 == pi

% z2 = angle_observe_model(x2, p1, p2, p3); % lets say z2 == -pi

% dz = z1 - z2; % dz == 2*pi -- this is wrong (must be within +/- pi)

% dz = residual_model(z1, z2); % dz == 0 -- this is correct

% Thus, 'residual_model' is a function that computes the true residual of z1-z2. If the function % 'zfunc' is not discontinuous, or has a trivial residual, just pass [] to parameter 'dzfunc'.

%

% 4. The functions 'zfunc' and 'dzfunc' must be vectorised. That is, they must be able to accept a set of

% states as input and return a corresponding set of results. So, for 'zfunc', the state x will not be a

% single column vector, but a matrix of N column vectors. Similarly, for 'dzfunc', the parameters z and

% z_predict will be equal-sized matrices of N column vectors.

%

% EXAMPLE USE:

% [x,P] = unscented_update(@angle_observe_model, @residual_model, x,P, z,R, a, b, c); % [x,P] = unscented_update('range_model', [], x,P, z,R);

%

% Tim Bailey 2003, modified 2004, 2005.

global d

d=d+1

% Set up some values

D = length(x); % state dimension

N = D*2 + 1; % number of samples

scale = 3; % want scale = D+kappa == 3

kappa = scale-D;

% Create samples

P=diag(diag(P));

Ps =chol(P)'.* sqrt(scale);

ss = [x, repvec(x,D)+Ps, repvec(x,D)-Ps];

% Transform samples according to function 'zfunc' to obtain the predicted observation samples if isempty(dzfunc), dzfunc = @default_dfunc; end

zs = feval(zfunc, ss, varargin{:}); % compute (possibly discontinuous) transform

zz = repvec(z,N);

dz = feval(dzfunc, zz, zs); % compute correct residual

zs = zz - dz; % offset zs from z according to correct residual

% Calculate predicted observation mean

zm = (kappa*zs(:,1) + 0.5*sum(zs(:,2:end), 2)) / scale;

% Calculate observation covariance and the state-observation correlation matrix

dx = ss - repvec(x,N);

dz = zs - repvec(zm,N);

Pxz = (2*kappa*dx(:,1)*dz(:,1)' + dx(:,2:end)*dz(:,2:end)') / (2*scale);

%Pzz = dz(:,2:end)*dz(:,2:end)' / (2*scale);

Pzz = (2*kappa*dz(:,1)*dz(:,1)' + dz(:,2:end)*dz(:,2:end)') / (2*scale);

% Compute Kalman gain

%%采用平方根滤波算法对滤波误差协方差矩阵进行Cholesky分解,

%%P(k,k-1)=S(k,k-1)*S(k,k-1)',P(k)=S(k)*S(k)',其中S(k),S(k,k-1)为下三角矩阵,

%%在任意k时刻,以S(k)的递推式代替P(k)的递推式,避免直接计算P(k)从而克服计算发散。S = Pzz+R;

Sc = chol(S); % note: S = Sc*Sc'

Sci = inv(Sc); % note: inv(S) = Sci*Sci'

Kc = Pxz * Sci;

K = Kc * Sci';

%K=Pxz * inv(S);

%[u,s,v]=svd(S);kc=Pxz*inv(v');kcc=kc*inv(s);K=kcc*inv(u);

% Perform update

x = x + K*(z - zm);

P = P - Kc*Kc';

%P = P - K*S*K';

kk=diag(P);

PSD_check = chol(P);

%

%

function x = repvec(x,N)

x = x(:, ones(1,N));

%

%

function e = default_dfunc(y1, y2)

e = y1 - y2;

matlab实验十七__牛顿迭代法(可打印修改)

实验十七牛顿迭代法 【实验目的】 1.了解牛顿迭代法的基本概念。 2.了解牛顿迭代法的收敛性和收敛速度。 3.学习、掌握MATLAB软件的有关命令。 【实验内容】 用牛顿迭代法求方程的近似根,误差不超过。 3210 ++-=3 10- x x x 【实验准备】 1.牛顿迭代法原理 2.牛顿迭代法的几何解析 3.牛顿迭代法的收敛性 4.牛顿迭代法的收敛速度 5.迭代过程的加速 6.迭代的MATLAB命令 MATLAB中主要用for,while等控制流命令实现迭代。 【实验重点】 1.牛顿迭代法的算法实现 2.牛顿迭代法收敛性和收敛速度 【实验难点】 1.牛顿迭代法收敛性和收敛速度 【实验方法与步骤】 练习1用牛顿迭代法求方程在x=0.5附近的近似 3210 ++-= x x x

根,误差不超过。 310-牛顿迭代法的迭代函数为 322()1()()321 f x x x x g x x x f x x x ++-=-=-'++相应的MATLAB 代码为 >>clear; >>x=0.5; >>for i=1:3 >>x=x-(x^3+x^2+x-1)/(3*x^2+2*x+1) >>end 可算的迭代数列的前3项0.5455,0.5437,0.5437。经三次迭代,就大大超过了精度要求。 练习2 用牛顿迭代法求方程的近似正实根,由此建2(0)x a a =>立一种求平方根的计算方法。 由计算可知,迭代格式为,在实验12的练习4中1()()2a g x x x =+已经进行了讨论。 【练习与思考】 1.用牛顿迭代法求方程的近似根。 ln 1x x =2.为求出方程的根,在区间[1,2]内使用迭代函数进行310x x --=迭代,纪录迭代数据,问迭代是否收敛?对迭代进行加速,对比加速前的数据,比较加速效果。 3.使用在不动点的泰勒公式,证明牛顿迭代法收敛原理。*x

毕业设计用matlab仿真

毕业设计用matlab仿真 篇一:【毕业论文】基于matlab的人脸识别系统设计与仿真(含matlab源程序) 基于matlab的人脸识别系统设计与仿真 第一章绪论 本章提出了本文的研究背景及应用前景。首先阐述了人脸图像识别意义;然后介绍了人脸图像识别研究中存在的问题;接着介绍了自动人脸识别系统的一般框架构成;最后简要地介绍了本文的主要工作和章节结构。 1.1 研究背景 自70年代以来.随着人工智能技术的兴起.以及人类视觉研究的进展.人们逐渐对人脸图像的机器识别投入很大的热情,并形成了一个人脸图像识别研究领域,.这一领域除了它的重大理论价值外,也极具实用价值。 在进行人工智能的研究中,人们一直想做的事情就是让机器具有像人类一样的思考能力,以及识别事物、处理事物的能力,因此从解剖学、心理学、行为感知学等各个角度来探求人类的思维机制、以及感知事物、处理事物的机制,并努力将这些机制用于实践,如各种智能机器人的研制。人脸图像的机器识别研究就是在这种背景下兴起的,因为人们发现许多对于人类而言可以轻易做到的事情,而让机器来实现却很难,如人脸图像的识别,语音识别,自然语言理解等。

如果能够开发出具有像人类一样的机器识别机制,就能够逐步地了解人 类是如何存储信息,并进行处理的,从而最终了解人类的思维机制。 同时,进行人脸图像识别研究也具有很大的使用价依。如同人的指纹一样,人脸也具有唯一性,也可用来鉴别一个人的身份。现在己有实用的计算机自动指纹识别系统面世,并在安检等部门得到应用,但还没有通用成熟的人脸自动识别系统出现。人脸图像的自动识别系统较之指纹识别系统、DNA鉴定等更具方便性,因为它取样方便,可以不接触目标就进行识别,从而开发研究的实际意义更大。并且与指纹图像不同的是,人脸图像受很多因素的干扰:人脸表情的多样性;以及外在的成像过程中的光照,图像尺寸,旋转,姿势变化等。使得同一个人,在不同的环境下拍摄所得到的人脸图像不同,有时更会有很大的差别,给识别带来很大难度。因此在各种干扰条件下实现人脸图像的识别,也就更具有挑战性。 国外对于人脸图像识别的研究较早,现己有实用系统面世,只是对于成像条件要求较苛刻,应用范围也就较窄,国内也有许多科研机构从事这方而的研究,并己取得许多成果。 1.2 人脸图像识别的应用前景 人脸图像识别除了具有重大的理论价值以及极富挑战

基于matlab的人脸识别源代码

function varargout = FR_Processed_histogram(varargin) %这种算法是基于直方图处理的方法 %The histogram of image is calculated and then bin formation is done on the %basis of mean of successive graylevels frequencies. The training is done on odd images of 40 subjects (200 images out of 400 images) %The results of the implemented algorithm is 99.75 (recognition fails on image number 4 of subject 17) gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @FR_Processed_histogram_OpeningFcn.,.. 'gui_OutputFcn', @FR_Processed_histogram_OutputFcn.,.. 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

MATLAB代码 解线性方程组的迭代法

解线性方程组的迭代法 1.rs里查森迭代法求线性方程组Ax=b的解 function[x,n]=rs(A,b,x0,eps,M) if(nargin==3) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值elseif(nargin==4) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-A)*x0+b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 2.crs里查森参数迭代法求线性方程组Ax=b的解 function[x,n]=crs(A,b,x0,w,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-w*A)*x0+w*b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x;

if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 3.grs里查森迭代法求线性方程组Ax=b的解 function[x,n]=grs(A,b,x0,W,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1;%前后两次迭代结果误差 %迭代过程 while(tol>eps) x=(I-W*A)*x0+W*b;%迭代公式 n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 4.jacobi雅可比迭代法求线性方程组Ax=b的解 function[x,n]=jacobi(A,b,x0,eps,varargin) if nargin==3 eps=1.0e-6; M=200; elseif nargin<3 error return elseif nargin==5 M=varargin{1}; end D=diag(diag(A));%求A的对角矩阵 L=-tril(A,-1);%求A的下三角阵

(完整版)matlab毕业设计

以下文档格式全部为word格式,下载后您可以任意修改编辑。 摘要 本文概述了信号仿真系统的需求、总体结构、基本功能。重点介绍了利用Matlab软件设计实现信号仿真系统的基本原理及功能,以及利用Matlab 软件提供的图形用户界面(Graphical User Interfaces ,GUI)设计具有人机交互、界面友好的用户界面。本文采用Matlab 的图形用户界面设计功能, 开发出了各个实验界面。在该实验软件中, 集成了信号处理中的多个实验, 应用效果良好。本系统是一种演示型软件,用可视化的仿真工具,以图形和动态仿真的方式演示部分基本信号的传输波形和变换,使学习人员直观、感性地了解和掌握信号与系统的基本知识。随着当代计算机技术的不断发展,计算机逐渐融入了社会生活的方方面面。计算机的使用已经成为当代大学生不可或缺的基本技能。信号与系统课程具有传统经典的基础内容,但也存在由于数字技术发展、计算技术渗入等的需求。在教学过程中缺乏实际应用背景的理论学习是枯燥而艰难的。为了解决理论与实际联系起来的难题国内外教育人士目光不约而同的投向一款优秀的计算机软件——MATLAB。通过它可用计算机仿真,阐述信号与系统理论与应用相联系的内容,以此激发学习兴趣,变被动接受为主动探知,从而提升学习效果,培养主动思维、学以致用的思维习惯。以MATLAB 为平台开发的信号与系统教学辅助软件可以充分利用其快速运算,文字、动态图形、声音及交互式人机界面等特点来进行信号的分析及仿真。运用MATLAB 的数值分析及计算结果可视化、信号处理工具箱的强大功能将信号与系统课程中较难掌握和理解的重点理论和方法通过概念浏览动态演示及典型例题分析等方式,形象生动的展现出来,从而使学生对所学

基于matlab程序实现人脸识别

基于m a t l a b程序实现 人脸识别 TYYGROUP system office room 【TYYUA16H-TYY-TYYYUA8Q8-

基于m a t l a b程序实现人脸识别 1.人脸识别流程 基于YCbCr颜色空间的肤色模型进行肤色分割。在YCbCr色彩空间内对肤色进行了建模发现,肤色聚类区域在Cb—Cr子平面上的投影将缩减,与中心区域显着不同。采用这种方法的图像分割已经能够较为精确的将人脸和非人脸分割开来。 人脸识别流程图 2.人脸识别程序 (1)人脸和非人脸区域分割程序 function result = skin(Y,Cb,Cr) %SKIN Summary of this function goes here % Detailed explanation goes here a=; b=; ecx=; ecy=; sita=; cx=; cy=; xishu=[cos(sita) sin(sita);-sin(sita) cos(sita)]; %如果亮度大于230,则将长短轴同时扩大为原来的倍 if(Y>230) a=*a; b=*b; end %根据公式进行计算 Cb=double(Cb); Cr=double(Cr);

t=[(Cb-cx);(Cr-cy)]; temp=xishu*t; value=(temp(1)-ecx)^2/a^2+(temp(2)-ecy)^2/b^2; %大于1则不是肤色,返回0;否则为肤色,返回1 if value>1 result=0; else result=1; end end (2)人脸的确认程序 function eye = findeye(bImage,x,y,w,h) %FINDEYE Summary of this function goes here % Detailed explanation goes here part=zeros(h,w); %二值化 for i=y:(y+h) for j=x:(x+w) if bImage(i,j)==0 part(i-y+1,j-x+1)=255; else part(i-y+1,j-x+1)=0; end end end [L,num]=bwlabel(part,8); %如果区域中有两个以上的矩形则认为有眼睛 if num<2 eye=0;

本科毕业设计__基于matlab的通信系统仿真报告

创新实践报告
报 告 题 目: 学 院 名 称: 姓 名:
基于 matlab 的通信系统仿真 信息工程学院 余盛泽 11042232 温 靖
班 级 学 号: 指 导 老 师:
二 O 一四年十月十五日

目录
一、引言 ....................................................................................................................... 3 二、仿真分析与测试 ................................................................................................... 4
2.1 随机信号的生成................................................................................................................ 4 2.2 信道编译码......................................................................................................................... 4 2.2.1 卷积码的原理 ......................................................................................................... 4 2.2.2 译码原理................................................................................................................. 5 2.3 调制与解调........................................................................................................................ 5 2.3.1 BPSK 的调制原理 ................................................................................................... 5 2.3.2 BPSK 解调原理 ....................................................................................................... 6 2.3.3 QPSK 调制与解调................................................................................................... 7 2.4 信道..................................................................................................................................... 8 2.4.1 加性高斯白噪声信道 ............................................................................................. 8 2.4.2 瑞利信道................................................................................................................. 8 2.5 多径合并............................................................................................................................. 8 2.5.1 MRC 方式 ................................................................................................................ 8 2.5.2 EGC 方式................................................................................................................. 9 2.6 采样判决............................................................................................................................. 9 2.7 理论值与仿真结果的对比 ................................................................................................. 9
三、系统仿真分析 ..................................................................................................... 11
3.1 有信道编码和无信道编码的的性能比较 ....................................................................... 11 3.1.1 信道编码的仿真 .................................................................................................... 11 3.1.2 有信道编码和无信道编码的比较 ........................................................................ 12 3.2 BPSK 与 QPSK 调制方式对通信系统性能的比较 ........................................................ 13 3.2.1 调制过程的仿真 .................................................................................................... 13 3.2.2 不同调制方式的误码率分析 ................................................................................ 14 3.3 高斯信道和瑞利衰落信道下的比较 ............................................................................... 15 3.3.1 信道加噪仿真 ........................................................................................................ 15 3.3.2 不同信道下的误码分析 ........................................................................................ 15 3.4 不同合并方式下的对比 ................................................................................................... 16 3.4.1 MRC 不同信噪比下的误码分析 .......................................................................... 16 3.4.2 EGC 不同信噪比下的误码分析 ........................................................................... 16 3.4.3 MRC、EGC 分别在 2 根、4 根天线下的对比 ................................................... 17 3.5 理论数据与仿真数据的区别 ........................................................................................... 17
四、设计小结 ............................................................................................................. 19 参考文献 ..................................................................................................................... 20

人脸识别系统设计与仿真 基于matlab的(含matlab源程序)版权不归自己 交流使用

人脸识别系统设计与仿真基于matlab的(含matlab源程序) 交流使用参考后自行那个删除后果自负 目录 第一章绪论 (2) 1.1 研究背景 (2) 1.2 人脸图像识别的应用前景 (3) 1.3 本文研究的问题 (4) 1.4 识别系统构成 (5) 1.5 论文的内容及组织 (7) 第二章图像处理的Matlab实现 (8) 2.1 Matlab简介 (8) 2.2 数字图像处理及过程 (8) 2.2.1图像处理的基本操作 (8) 2.2.2图像类型的转换 (9) 2.2.3图像增强 (9) 2.2.4边缘检测 (10) 2.3图像处理功能的Matlab实现实例 (11) 2.4 本章小结 (15) 第三章人脸图像识别计算机系统 (16) 3.1 引言 (16) 3.2系统基本机构 (17)

3.3 人脸检测定位算法 (18) 3.4 人脸图像的预处理 (25) 3.4.1 仿真系统中实现的人脸图像预处理方法 (26) 第四章基于直方图的人脸识别实现 (29) 4.1识别理论 (29) 4.2 人脸识别的matlab实现 (29) 4.3 本章小结 (30) 第五章总结 (31) 致谢 (32) 参考文献 (33) 附录 (35)

第一章绪论 本章提出了本文的研究背景及应用前景。首先阐述了人脸图像识别意义;然后介绍了人脸图像识别研究中存在的问题;接着介绍了自动人脸识别系统的一般框架构成;最后简要地介绍了本文的主要工作和章节结构。 1.1 研究背景 自70年代以来.随着人工智能技术的兴起.以及人类视觉研究的进展.人们逐渐对人脸图像的机器识别投入很大的热情,并形成了一个人脸图像识别研究领域,.这一领域除了它的重大理论价值外,也极具实用价值。 在进行人工智能的研究中,人们一直想做的事情就是让机器具有像人类一样的思考能力,以及识别事物、处理事物的能力,因此从解剖学、心理学、行为感知学等各个角度来探求人类的思维机制、以及感知事物、处理事物的机制,并努力将这些机制用于实践,如各种智能机器人的研制。人脸图像的机器识别研究就是在这种背景下兴起的,因为人们发现许多对于人类而言可以轻易做到的事情,而让机器来实现却很难,如人脸图像的识别,语音识别,自然语言理解等。如果能够开发出具有像人类一样的机器识别机制,就能够逐步地了解人类是如何存储信息,并进行处理的,从而最终了解人类的思维机制。 同时,进行人脸图像识别研究也具有很大的使用价依。如同人的指纹一样,人脸也具有唯一性,也可用来鉴别一个人的身份。现在己

lu分解法、列主元高斯法、jacobi迭代法、gaussseidel法的原理及matlab程序

一、实验目的及题目 1.1 实验目的: (1)学会用高斯列主元消去法,LU 分解法,Jacobi 迭代法和Gauss-Seidel 迭代法解线性方程组。 (2)学会用Matlab 编写各种方法求解线性方程组的程序。 1.2 实验题目: 1. 用列主元消去法解方程组: 1241234 123412343421233234x x x x x x x x x x x x x x x ++=??+-+=??--+=-??-++-=? 2. 用LU 分解法解方程组,Ax b =其中 4824012242412120620266216A --?? ?- ?= ? ?-??,4422b ?? ? ?= ?- ?-?? 3. 分别用Jacobi 迭代法和Gauss-Seidel 迭代法求解方程组: 123234 1231234102118311210631125x x x x x x x x x x x x x -+=-??-+=-??-+=??-+-+ =? 二、实验原理、程序框图、程序代码等 2.1实验原理 2.1.1高斯列主元消去法的原理 Gauss 消去法的基本思想是一次用前面的方程消去后面的未知数,从而将方程组化为等价形式: 1111221122222n n n n nn n n b x b x b x g b x b x g b x g +++=??++=????= ? 这个过程就是消元,然后再回代就好了。具体过程如下: 对于1,2, ,1k n =-,若() 0,k kk a ≠依次计算

()() (1)()()(1)()()/,,1, ,k k ik ik kk k k k ij ij ik kj k k k i i ik k m a a a a m a b b m b i j k n ++==-=-=+ 然后将其回代得到: ()() ()()()1/()/,1,2,,1 n n n n nn n k k k k k kj j kk j k x b a x b a x a k n n =+?=??=-=--? ? ∑ 以上是高斯消去。 但是高斯消去法在消元的过程中有可能会出现() 0k kk a =的情况,这时消元就无法进行了,即使主元数() 0,k kk a ≠但是很小时,其做除数,也会导致其他元素数量级的严重增长和舍入误差的扩散。因此,为了减少误差,每次消元选取系数矩阵的某列中绝对值最大的元素作为主元素。然后换行使之变到主元位置上,再进行销元计算。即高斯列主元消去法。 2.1.2直接三角分解法(LU 分解)的原理 先将矩阵A 直接分解为A LU =则求解方程组的问题就等价于求解两个三角形方程组。 直接利用矩阵乘法,得到矩阵的三角分解计算公式为: 1111111 11 1,1,2,,/,2,,,,,1,,,2,3, ()/,1,2, ,i i i i k kj kj km mj m k ik ik im mk kk m u a i n l a u i n u a l u j k k n k n l a l u u i k k n k n -=-===?? ==?? =-=+??=??=-=++≠?? ∑∑且 由上面的式子得到矩阵A 的LU 分解后,求解Ux=y 的计算公式为 11 111,2,3,/()/,1,2, ,1 i i i ij j j n n nn n i i ij j ii j i y b y b l y i n x y u x y u x u i n n -==+=??? =-=?? =??? =-=--?? ∑∑ 以上为LU 分解法。

基于MATLAB的语音信号处理系统设计(程序+仿真图)--毕业设计

语音信号处理系统设计 摘要:语音信号处理是研究用数字信号处理技术对语音信号进行处理的一门学科。语音信号处理的目的是得到某些参数以便高效传输或存储,或者是用于某种应用,如人工合成出语音、辨识出讲话者、识别出讲话内容、进行语音增强等。本文简要介绍了语音信号采集与分析以及语音信号的特征、采集与分析方法,并在采集语音信号后,在MATLAB 软件平台上进行频谱分析,并对所采集的语音信号加入干扰噪声,对加入噪声的信号进行频谱分析,设计合适的滤波器滤除噪声,恢复原信号。利用MATLAB来读入(采集)语音信号,将它赋值给某一向量,再将该向量看作一个普通的信号,对其进行FFT变换实现频谱分析,再依据实际情况对它进行滤波,然后我们还可以通过sound命令来对语音信号进行回放,以便在听觉上来感受声音的变化。 关键词:Matlab,语音信号,傅里叶变换,滤波器 1课程设计的目的和意义 本设计课题主要研究语音信号初步分析的软件实现方法、滤波器的设计及应用。通过完成本课题的设计,拟主要达到以下几个目的: 1.1.了解Matlab软件的特点和使用方法。 1.2.掌握利用Matlab分析信号和系统的时域、频域特性的方法; 1.3.掌握数字滤波器的设计方法及应用。 1.4.了解语音信号的特性及分析方法。 1.5.通过本课题的设计,培养学生运用所学知识分析和解决实际问题的能力。 2 设计任务及技术指标 设计一个简单的语音信号分析系统,实现对语音信号时域波形显示、进行频谱分析,

利用滤波器滤除噪声、对语音信号的参数进行提取分析等功能。采用Matlab设计语言信号分析相关程序,并且利用GUI设计图形用户界面。具体任务是: 2.1.采集语音信号。 2.2.对原始语音信号加入干扰噪声,对原始语音信号及带噪语音信号进行时频域分析。 2.3.针对语音信号频谱及噪声频率,设计合适的数字滤波器滤除噪声。 2.4.对噪声滤除前后的语音进行时频域分析。 2.5.对语音信号进行重采样,回放并与原始信号进行比较。 2.6.对语音信号部分时域参数进行提取。 2.7.设计图形用户界面(包含以上功能)。 3 设计方案论证 3.1语音信号的采集 使用电脑的声卡设备采集一段语音信号,并将其保存在电脑中。 3.2语音信号的处理 语音信号的处理主要包括信号的提取播放、信号的重采样、信号加入噪声、信号的傅里叶变换和滤波等,以及GUI图形用户界面设计。 Ⅰ.语音信号的时域分析 语音信号是一种非平稳的时变信号,它携带着各种信息。在语音编码、语音合成、语音识别和语音增强等语音处理中无一例外需要提取语音中包含的各种信息。语音信号分析的目的就在与方便有效的提取并表示语音信号所携带的信息。语音信号分析可以分为时域和变换域等处理方法,其中时域分析是最简单的方法。 Ⅱ.语音信号的频域分析 信号的傅立叶表示在信号的分析与处理中起着重要的作用。因为对于线性系统来说,可以很方便地确定其对正弦或复指数和的响应,所以傅立叶分析方法能完善地解决许多信号分析和处理问题。另外,傅立叶表示使信号的某些特性变得更明显,因此,它能更

(完整word版)基于MATLAB的人脸识别

图像识别 题目:基于MATLAB的人脸识别 院系:计算机科学与应用系 班级: 姓名: 学号: 日期:

目录 引言 (1) 1 人脸识别技术 (2) 1.1人脸识别的研究内容 (2) 1.1.1人脸检测(Face Detection) (2)

1.1.2人脸表征(Face Representation) (2) 1.2几种典型的人脸识别方法 (3) 1.2.1基于几何特征的人脸识别方法 (3) 1.2.2基于K-L变换的特征脸方法 (4) 1.2.3神经网络方法 (4) 1.2.4基于小波包的识别方法 (5) 1.2.5支持向量机的识别方法 (5) 2 人脸特征提取与识别 (5) 2.1利用PCA进行特征提取的经典算法——Eigenface算法 (6) 2.2 PCA人脸识别流程 (6) 2.3特征向量选取 (8) 2.4距离函数的选择 (9) 2.5 基于PCA的人脸识别 (9) MATLAB人脸识别程序 (10) 3 MATLAB软件程序编写 (10) 3.1.创建图片数据库 (10) 3.2 主程序 (11) 3.3最终程序结果 (12) 4 心得与体会 (12) 参考文献 (13)

引言 随着社会的发展及技术的进步,社会各方面对快速高效的自动身份验证的需求可以说无处不在,并与日俱增。例如,某人是否是我国的居民,是否有权进入某安全系统,是否有权进行特定的交易等。尤其是自2001年美国“9.1l”恐怖袭击发生以来,如何在车站、机场等公共场所利用高科技手段,迅速而准确地发现并确认可疑分子成了目前世界各国在反恐斗争中普遍关注的问题。为此,各国都投入大量人力、物力研究发展各类识别技术,使得生物特征识别技术得到了极大的发展。生物特征识别技术主要包括:人脸识别、虹膜识别、指纹识别、步态识别、语音识别、笔迹识别、掌纹识别以及多生物特征融合识别等。人类通过视觉识别文字,感知外界信息。在客观世界中,有75%的信息量都来自视觉,因此让计算机或机器人具有视觉,是人工智能的重要环节。由于生物特征是人的内在属性,具有很强的稳定性和个体差异性,因此是身份验证最理想的依据。与虹膜、指纹、基因、掌纹等其他人体生物特征识别系统相比,人脸识别系统更加直接、方便、友好,易于为用户所接受,并且通过人脸的表情、姿态分析,还能获得其它识别系统难以得到的一些信息。 人脸识别技术在国家重要机关及社会安防领域具有广泛用途。例如:公安系统的罪犯识别、信用卡验证、医学、档案管理、视频会议、人机交互系统等身份识别和各类卡持有人的身份验证。同其他人体生物特征(如:指纹、掌纹、虹膜、语音等)识别技术相比,人脸识别技术的隐性最好,人脸识别系统更直接、友好,是当今国际反恐和安防最重视的科技手段和攻关标志之一。虽然人类能毫不费力地识别出人脸及表情,但对人脸的机器自动识别确实一个难度极大的课题,它涉及到模式识别、图像处理及生理、心理学等诸多方面的知识。人脸识别技术的研究虽然己经取得了一定的可喜成果,但在实际应用中仍存在着许多严峻的问题。人脸的非刚体性、姿态、表情、发型以及化妆的多样性都给正确识别带来了困难,要让计算机像人一样方便地识别出大量的人脸,尚需不同科学研究领域的科学家共同不懈的努力。

MATLAB样例之雅克比迭代法

要求: 下面分别使用雅克比迭代法和高斯-赛德尔迭代法求一个方程组的近似解用的线性方程组是按实验要求给的: 7*x1+x2+2*x3=10 x1+8*x2+2*x3=8 2*x1+2*x2+9*x3=6 雅克比迭代法的matlab代码:(老师写的) A=[7,1,2;1,8,2;2,2,9]; b=[10;8;6]; if(any(diag(A))==0) error('error,pause') end eps=input('误差限eps='); N=input('迭代次数N='); D=diag(diag(A)); B=inv(D)*(D-A); f=inv(D)*b; K=0; x0=zeros(size(b)); while 1 x1=B*x0+f K=K+1; fprintf('第-次迭代的近似解为',K) disp(x1'); if norm(x1-x0,inf)N fprintf('迭代超限') end x0=x1; end 高斯-赛德尔迭代法matlab代码:(自己改的)

A=[7,1,2;1,8,2;2,2,9]; b=[10;8;6]; if(all(diag(A))==0) error('error,pause') end eps=input('误差限eps='); N=input('迭代次数N='); D=diag(diag(A)); B=inv(D)*(D-A); f=inv(D)*b; K=0; x0=zeros(size(b)); x00=x0; while 1 x11=B*x0+f; x00(1,1)=x11(1,1); x12=B*x00+f; x00(2,1)=x12(2,1); x13=B*x00+f; x00(3,1)=x13(3,1); x1=x00 K=K+1; fprintf('第-次迭代的近似解为',K) disp(x1'); if norm(x1-x0,inf)N fprintf('迭代超限') end x0=x1; end

人脸识别MATLAB代码

1.色彩空间转换 function [r,g]=rgb_RGB(Ori_Face) R=Ori_Face(:,:,1); G=Ori_Face(:,:,2); B=Ori_Face(:,:,3); R1=im2double(R); % 将uint8型转换成double型G1=im2double(G); B1=im2double(B); RGB=R1+G1+B1; row=size(Ori_Face,1); % 行像素 column=size(Ori_Face,2); % 列像素 for i=1:row for j=1:column rr(i,j)=R1(i,j)/RGB(i,j); gg(i,j)=G1(i,j)/RGB(i,j); end end rrr=mean(rr); r=mean(rrr); ggg=mean(gg); g=mean(ggg); 2.均值和协方差 t1=imread('D:\matlab\皮肤库\1.jpg');[r1,g1]=rgb_RGB(t1); t2=imread('D:\matlab\皮肤库\2.jpg');[r2,g2]=rgb_RGB(t2); t3=imread('D:\matlab\皮肤库\3.jpg');[r3,g3]=rgb_RGB(t3); t4=imread('D:\matlab\皮肤库\4.jpg');[r4,g4]=rgb_RGB(t4); t5=imread('D:\matlab\皮肤库\5.jpg');[r5,g5]=rgb_RGB(t5); t6=imread('D:\matlab\皮肤库\6.jpg');[r6,g6]=rgb_RGB(t6); t7=imread('D:\matlab\皮肤库\7.jpg');[r7,g7]=rgb_RGB(t7); t8=imread('D:\matlab\皮肤库\8.jpg');[r8,g8]=rgb_RGB(t8);

matlab仿真课程设计报告

一、课程设计内容 此次课程设计的主要内容是 2ASK调制信号仿真。 二、设计原理及步骤: (一)设计原理 2ASK是利用代表数字信息“0”或“1”的基带矩形脉冲去键控一个连续的载波,使载波时断时续的输出。有载波输出时表示发送“1”,无载波输出时表示发送“0”。根据幅度调制的原理,2ASK 信号可表示为0e(t)=s(t)cosw(t) c,式中w c为载波角频率,h(t)=cos w c(t)为载波信号,二进制基带信号s(t)为随机的单极性NRZ 矩形脉冲序列。 S(t)的功率谱密度为 2 11 ()()() 44 s b b P f T Sa fT f π =+?。2ASK 信号的功率谱密度是基带信号功率谱密度() s P f的线性搬移,2ASK 信号的功率谱密度为 1 ()[(+f)()] 4 e s c s c P f P f P f f =+- 。 (二)仿真步骤 1、函数文件 (1)函数FFT_SHIFT function [f,sf]=FFT_SHIFT(t,st) dt=t(2)-t(1); T=t(end); df=1/T;

N=length(t); f=[-N/2:N/2-1]*df; sf=fft(st); sf=T/N*fftshift(sf); (2)函数INSERT0 function [out]=INSERT0(d,M) N=length(d); out=zeros(1,M*N); for i=0:N-1; out(i*M+1)=d(i+1); end 2、主程序代码 fc=2; %载波频率2Hz N_sample=10; N=200; %码元数 Ts=1; %1Band/s dt=Ts/fc/N_sample; %波形采样间隔t=0:dt:N*Ts-dt; Lt=length(t); T=t(end); %产生二进制信源 d=sign(randn(1,N));

二分法、简单迭代法的matlab代码实现

实验一非线性方程的数值解法(一) 信息与计算科学金融崔振威201002034031一、实验目的: 熟悉二分法和简单迭代法的算法实现。 二、实验内容: 教材P40 2.1.5 三、实验要求 1根据实验内容编写二分法和简单迭代法的算法实现 2简单比较分析两种算法的误差 3试构造不同的迭代格式,分析比较其收敛性 (一)、二分法程序: function ef=bisect(fx,xa,xb ,n, delta) % fx是由方程转化的关于x的函数,有fx=0。 % xa解区间上限 % xb解区间下限 % n最多循环步数,防止死循环。 %delta为允许误差 x=xa;fa=eval(fx); x=xb;fb=eval(fx); disp(' [ n xa xb xc fc ]'); for i=1: n xc=(xa+xb)/2;x=xc;fc=eval(fx); X=[i,xa,xb,xc,fc]; disp(X), if fc*fa<0 xb=xc; else xa=xc; end if (xb-xa)

k=0; while abs(x-xO)>eps & k> fplot('[x A5-3*x A3-2*x A2+2]',[-3,3]);grid 得下图: 由上图可得知:方程在[-3,3]区间有根。 (2 )、二分法输出结果 >> f='xA5-3*xA3-2*xA2+2' f = X A5-3*X A3-2*X A2+2 >> bisect(f,-3,3,20,10A(-12)) 2.0000 - 3.0000 0 -1.5000 0.0313

相关文档
最新文档