亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? adaptiveoptimaser.cpp

?? InnovLabSimu在vc++下實現
?? CPP
字號:
//#include "StdAfx.h"
#include "AdaptiveOptimaser.h"
#ifndef USE_TRADITIONAL_AKF


CAdaptiveOptimaser::CAdaptiveOptimaser(void):m_iCovEstNum(4),m_mResidualCovStack(4),m_calResidualCoviarance(2,2)
,m_mTherioticalResCov(2,2),m_SumOfAllResCov(2,2),m_mDif_ResCov2TherResCov(2,2),m_mCovDifStack(3),m_mPreDeltaStep(2,2),
m_mAlterStepVal(2,2),m_mPreErDif(2,2),m_mNewModelNoise(4,4),m_mCurModeNoiseModStep(4,4)
//,m_dStableDifThres(2)
{
	m_iNumOfInputResidual=0;
	//m_bStableTag=false;
	m_bStableTag[0]=m_bStableTag[1]=false;
	for (int i=0;i<2;i++)
	{
		for (int j=0;j<2;j++)
		{
			m_SumOfAllResCov(i,j)=0;

			m_mPreDeltaStep(i,j)=0.9;
			m_mPreErDif(i,j)=1;
		}
	}
	for (int i=0;i<4;i++)
	{
		for (int j=0;j<4;j++)
		{
			m_mCurModeNoiseModStep(i,j)=0;
		}
	}

	//memset(m_mCurModeNoiseModStep.data(),0,m_mCurModeNoiseModStep.size1()*m_mCurModeNoiseModStep.size2());
	m_iNumOfCovDif=0;
}
CAdaptiveOptimaser::CAdaptiveOptimaser(int CovEstNum,size_t ObserveSize,size_t StateSize):m_iCovEstNum(CovEstNum),m_mResidualCovStack(CovEstNum),
m_calResidualCoviarance(ObserveSize,ObserveSize),m_mTherioticalResCov(ObserveSize,ObserveSize),m_SumOfAllResCov(ObserveSize,ObserveSize),
m_mDif_ResCov2TherResCov(ObserveSize,ObserveSize),m_mCovDifStack(3),//,m_dStableDifThres(ObserveSize)
m_mPreDeltaStep(CovEstNum,CovEstNum),m_mAlterStepVal(CovEstNum,CovEstNum),m_mPreErDif(CovEstNum,CovEstNum),m_mNewModelNoise(StateSize,StateSize),
m_mCurModeNoiseModStep(StateSize,StateSize)
{
	m_iNumOfInputResidual=0;
	for (int i=0;i<ObserveSize;i++)
	{
		for (int j=0;j<ObserveSize;j++)
		{
			m_SumOfAllResCov(i,j)=0;
	/*		m_mCurModeNoiseModStep(i,j)=0;
			m_mCurModeNoiseModStep(i+2,j+2)=0;*/
			m_mPreDeltaStep(i,j)=0.9;
			m_mPreErDif(i,j)=1;
		}
	}
	for (int i=0;i<ObserveSize+2;i++)
	{
		for (int j=0;j<ObserveSize+2;j++)
		{
			m_mCurModeNoiseModStep(i,j)=0;
		}
	}
	m_bStableTag[0]=m_bStableTag[1]=false;
	m_iNumOfCovDif=0;
}
#else
CAdaptiveOptimaser::CAdaptiveOptimaser(void):m_iCovEstNum(4),m_mResidualCovStack(4),m_calResidualCoviarance(2,2)
,m_mTherioticalResCov(2,2),m_SumOfAllResCov(2,2),m_mCovDifStack(3),m_mNewModelNoise(4,4)
//,m_mAlterStepVal(2,2),m_mPreErDif(2,2),m_mCurModeNoiseModStep(4,4),m_mDif_ResCov2TherResCov(2,2),m_mPreDeltaStep(2,2)
//,m_dStableDifThres(2)
{
	m_iNumOfInputResidual=0;
	for (int i=0;i<2;i++)
	{
		for (int j=0;j<2;j++)
		{
			m_SumOfAllResCov(i,j)=0;
		}
	}
}
#endif

CAdaptiveOptimaser::~CAdaptiveOptimaser(void)
{
}
#ifdef USE_TRADITIONAL_AKF
VARIANCE& CAdaptiveOptimaser::ModelNoiseAdapter(RESIDUAL_STYLE Residual,VARIANCE& PredictVar,VARIANCE& StateVar,matrix_type& KalmanGain)
{
	
		if(CalculateTheroticalCovOfResidual(Residual))//若計算得到理論殘差方差
		{
			//__asm int 3;
			ConventionalAdapter( PredictVar,StateVar,m_mTherioticalResCov,KalmanGain);
		}
		else
		{
			//目前沒有什么做的
		}		
		return m_mNewModelNoise;
}
#endif
#ifndef USE_TRADITIONAL_AKF
VARIANCE& CAdaptiveOptimaser::ModelNoiseAdapter(RESIDUAL_STYLE Residual, VARIANCE ResidualCoviarance)
{
	//VARIANCE QStep();
	range Line(0,2);
	range Row(0,2); 
	range Line2(2,4);
	range Row2(2,4); 
#ifdef  DEBUG_USE_FLAG
	ViewMatrix(m_mNewModelNoise);
	m_mSigma_Viewer;
#endif
	if(CalculateTheroticalCovOfResidual(Residual,ResidualCoviarance))//若計算得到理論殘差方差
	{
		if(CalculateDifOfError())//若計算得到誤差的導數
		{
//			__asm int 3;
			if ((!m_bStableTag[0])||(!m_bStableTag[1]))//更改為逐位判斷是否穩態,有一位不穩定則尋幽
			{
				for (unsigned i=0;i<m_mCurrentErDif.size1();i++)
				{
					if (!m_bStableTag[i])//不穩定
					{
					
					//for (int j=0;j<m_mCurrentErDif.size2();j++)//因m_mNewModelNoise為對角陣,故去掉此部分
					//{
						unsigned j=i;
						m_mAlterStepVal(i,j)=1+RPPOP_DeltaStepSeek(m_mCurrentErDif(i,j),m_mPreErDif(i,j),m_mPreDeltaStep(i,j));//為提高效率將matlab程序中的1+步長值放這運算了。
					}
#ifdef  DEBUG_USE_FLAG

				ViewMatrix(m_mAlterStepVal);
				m_mSigma_Viewer;
#endif
					//}
				}
				
				project(m_mCurModeNoiseModStep, Line, Row)=m_mAlterStepVal;//將結果重復組合成Q陣的變化陣
				project(m_mCurModeNoiseModStep, Line2, Row2)=m_mAlterStepVal;         
//#ifdef  DEBUG_USE_FLAG
//
//				ViewMatrix(m_mCurModeNoiseModStep);
//				m_mSigma_Viewer;
//#endif
//
//#ifdef  DEBUG_USE_FLAG
//
//				ViewMatrix(m_mNewModelNoise);
//				m_mSigma_Viewer;
//#endif
//
				m_mNewModelNoise=element_prod(m_mCurModeNoiseModStep,m_mNewModelNoise);	
				LimitModifiedModelNoise(m_mNewModelNoise);
//#ifdef  DEBUG_USE_FLAG
//
//				ViewMatrix(m_mNewModelNoise);
//				m_mSigma_Viewer;
//#endif
			}		
			OptmiseInStableCheck(m_mAlterStepVal);//判斷尋優是否穩定,本次調整步長的變化值放在
		}

	}
	else
	{
		//目前沒有什么做的
	}		
	return m_mNewModelNoise;
}

bool CAdaptiveOptimaser::CalculateTheroticalCovOfResidual(RESIDUAL_STYLE& Residual,VARIANCE ResidualCov)
{
#ifdef  DEBUG_USE_FLAG

	ViewVector(Residual);
	m_mSigma_Viewer;
#endif
	if(m_iNumOfInputResidual>=m_iCovEstNum)//已經傳了足夠多的Residual供計算的話才開始尋優
	{
		m_calResidualCoviarance=outer_prod(Residual,Residual);//殘差計算方差Residual*Residua'boost中的向量是行向量所以用outer_prod

		m_mResidualCovStack.insert(m_mResidualCovStack.begin(),m_calResidualCoviarance);//入一個放頭部,最新的放頭部
		std::vector<VARIANCE>::iterator EndOfStack=m_mResidualCovStack.end();
//#ifdef  DEBUG_USE_FLAG
//
//		ViewMatrix(*(EndOfStack-1));
//		m_mSigma_Viewer;
//#endif
#ifdef  DEBUG_USE_FLAG

		ViewMatrix(m_SumOfAllResCov);
		m_mSigma_Viewer;
#endif
		m_SumOfAllResCov=m_SumOfAllResCov-(*(--EndOfStack));//用上一次算得的和減去要擠出m_mResidualCovStack的末項,再加上新插入的項即得總和 
		m_SumOfAllResCov+=m_calResidualCoviarance;
		m_mTherioticalResCov=(m_SumOfAllResCov)/m_iCovEstNum;

		m_mResidualCovStack.pop_back();//刪除最后一個	
		/////////////////////////計算差值,并按位取絕對值/////////////////////////////////////////////////
		m_mDif_ResCov2TherResCov=ResidualCov-m_mTherioticalResCov;//ls-TheroResidulCov
		MatElemABS(m_mDif_ResCov2TherResCov);
#ifdef  DEBUG_USE_FLAG

		ViewMatrix(m_mDif_ResCov2TherResCov);
		m_mSigma_Viewer;
#endif
////////////////////////////將計算出來的差值保存起來,并且總共只保存3個,因此要存一個,出一個,第一個最新的//////////////////////////////////////////////
		m_mCovDifStack.insert(m_mCovDifStack.begin(),m_mDif_ResCov2TherResCov);
		m_mCovDifStack.pop_back();//刪除最后一個h
		if (m_iNumOfCovDif>2)
		{
			return true;
		}
		else
		{
			m_iNumOfCovDif++;
			return false;
		}		
	}
	else
	{
		m_calResidualCoviarance=outer_prod(Residual,Residual);//殘差計算方差Residual*Residua'boost中的向量是行向量所以用outer_prod
		m_iNumOfInputResidual++;
		m_SumOfAllResCov+=m_calResidualCoviarance;
#ifdef  DEBUG_USE_FLAG

		ViewMatrix(m_SumOfAllResCov);
		m_mSigma_Viewer;
#endif
		m_mResidualCovStack.insert(m_mResidualCovStack.begin(),m_calResidualCoviarance);//入一個放頭部,最新的放頭部
		m_mResidualCovStack.pop_back();//刪除最后一個	
		return false;
	}
}
#endif
#ifdef USE_TRADITIONAL_AKF
bool CAdaptiveOptimaser::CalculateTheroticalCovOfResidual(RESIDUAL_STYLE& Residual)
{
#ifdef  DEBUG_USE_FLAG

	ViewVector(Residual);
	m_mSigma_Viewer;
#endif
	if(m_iNumOfInputResidual>=m_iCovEstNum)//已經傳了足夠多的Residual供計算的話才開始尋優
	{
		m_calResidualCoviarance=outer_prod(Residual,Residual);//殘差計算方差Residual*Residua'boost中的向量是行向量所以用outer_prod

		m_mResidualCovStack.insert(m_mResidualCovStack.begin(),m_calResidualCoviarance);//入一個放頭部,最新的放頭部
		std::vector<VARIANCE>::iterator EndOfStack=m_mResidualCovStack.end();
		//#ifdef  DEBUG_USE_FLAG
		//
		//		ViewMatrix(*(EndOfStack-1));
		//		m_mSigma_Viewer;
		//#endif
#ifdef  DEBUG_USE_FLAG

		ViewMatrix(m_SumOfAllResCov);
		m_mSigma_Viewer;
#endif
		m_SumOfAllResCov=m_SumOfAllResCov-(*(--EndOfStack));//用上一次算得的和減去要擠出m_mResidualCovStack的末項,再加上新插入的項即得總和 
		m_SumOfAllResCov+=m_calResidualCoviarance;
		m_mTherioticalResCov=(m_SumOfAllResCov)/m_iCovEstNum;

		m_mResidualCovStack.pop_back();//刪除最后一個	
		return true;
				
	}
	else
	{
		m_calResidualCoviarance=outer_prod(Residual,Residual);//殘差計算方差Residual*Residua'boost中的向量是行向量所以用outer_prod
		m_iNumOfInputResidual++;
		m_SumOfAllResCov+=m_calResidualCoviarance;
#ifdef  DEBUG_USE_FLAG

		ViewMatrix(m_SumOfAllResCov);
		m_mSigma_Viewer;
#endif
		m_mResidualCovStack.insert(m_mResidualCovStack.begin(),m_calResidualCoviarance);//入一個放頭部,最新的放頭部
		m_mResidualCovStack.pop_back();//刪除最后一個	
		return false;
	}
}
#endif 
#ifndef USE_TRADITIONAL_AKF

bool CAdaptiveOptimaser::CalculateDifOfError()
{
	std::vector<VARIANCE>::iterator HeadOfStack=m_mCovDifStack.begin();
//	std::vector<VARIANCE>::iterator p2Stack;
//#ifdef  DEBUG_USE_FLAG
//
//	ViewMatrix(VARIANCE(*HeadOfStack));
//	m_mSigma_Viewer;
//#endif
//#ifdef  DEBUG_USE_FLAG
//
//	ViewMatrix(VARIANCE(*(++HeadOfStack)));
//	m_mSigma_Viewer;
//#endif
	//p2Stack=HeadOfStack+1;
	size_t Size=(*HeadOfStack).size1();
	VARIANCE aTmp=(*HeadOfStack);
	VARIANCE bTmp=(*(++HeadOfStack));	
	m_mCurrentErDif=aTmp-bTmp;//當前時刻的誤差函數的導數,用差值代替,而且由于RPPOD算法僅用到了導數的符號,所以沒有考慮時間長度
	
	aTmp=*(++HeadOfStack);

	for (int i=0;i<Size;i++)
	{
		for (int j=0;j<Size;j++)
		{
			if (m_mPreErDif(i,j)!=0)//防止因外部傳遞過來的0被忽略
			{
				m_mPreErDif(i,j)=bTmp(i,j)-aTmp(i,j);//前一時刻的誤差函數的導數,用差值代替,而且由于RPPOD算法僅用到了導數的符號,所以沒有考慮時間長度
			}
		}
		
	}
	
	return true;
}
bool CAdaptiveOptimaser::OptmiseInStableCheck(VARIANCE& CovAlterStep)
{
	//double a=fabs(CovAlterStep(0,0)-1);//尋優步長的變化值即為最終步長值減去基準1
	//double b=fabs(CovAlterStep(1,1)-1);//尋優步長的變化值即為最終步長值減去基準1
	//double c=a+b;
	for (unsigned iii=0;iii<2;iii++)
	{
		double a=fabs(CovAlterStep(iii,iii)-1);//尋優步長的變化值即為最終步長值減去基準1
		if ((!m_bStableTag[iii])&&a<STABLE_THRES)// %進入穩定  
		{
			m_dStableDifThres[iii]=m_fStableDifAmplitudeParm*m_mDif_ResCov2TherResCov(iii,iii);//%記錄方差偏差的當前值*m_fStableDifAmplitudeParm作為判斷是否跳出穩定的閾值
			//m_dStableDifThres[0]=m_fStableDifAmplitudeParm*m_mDif_ResCov2TherResCov(0,0);//%記錄方差偏差的當前值*m_fStableDifAmplitudeParm作為判斷是否跳出穩定的閾值
			//m_dStableDifThres[1]=m_fStableDifAmplitudeParm*m_mDif_ResCov2TherResCov(1,1);//%記錄方差偏差的當前值*m_fStableDifAmplitudeParm作為判斷是否跳出穩定的閾值
			m_bStableTag[iii]=true;
		}
		else if (
			m_bStableTag[iii] && 
			(m_mDif_ResCov2TherResCov(iii,iii)>m_dStableDifThres[iii])
			)// %退出穩定,則重設本優化器  
		{
			m_bStableTag[iii]=false;
			m_mNewModelNoise(iii,iii)=m_mNodelNoiseOriginalVal(iii,iii);//%重置初始值,并重開始一輪尋優
			m_mNewModelNoise(iii+2,iii+2)=m_mNodelNoiseOriginalVal(iii+2,iii+2);//%重置初始值,并重開始一輪尋
			m_mPreDeltaStep(iii,iii)*=0;
			m_mPreErDif(iii,iii)*=0;
			m_mPreErDif(iii,iii)=0.9;
			m_mPreDeltaStep(iii,iii)=0.9;
			//for (int i=0;i<m_mPreErDif.size1();i++)//%重置初始值,并重開始一輪尋優
			//{
			//	m_mPreErDif(i,i)=0.9;
			//	m_mPreDeltaStep(i,i)=0.9;
			//}
		}
	}
	if (m_bStableTag[0]&&m_bStableTag[1])
	{
		return true ;//所有位都穩定則返回鎮
	}
	else
	{
		return false;
	}
	
}
#endif
bool CAdaptiveOptimaser::initAdapter(VARIANCE& NodelNoiseOriginalVal,float StableDifAmplitudeParm)
{
	m_mNodelNoiseOriginalVal=NodelNoiseOriginalVal;
	m_fStableDifAmplitudeParm=StableDifAmplitudeParm;
	m_mNewModelNoise=m_mNodelNoiseOriginalVal;

	return true;
}

// 限制模型噪聲不太大也別太小,
//bool CAdaptiveOptimaser::LimitModNoiseInSafeVal(double&ModelNoise)
//{
//
//}
// 對尋優調整的結果(模型噪聲)進行限幅,不能太大也不能太小,輸入為尋優的結果矩陣的引用
//void CAdaptiveOptimaser::LimitModifiedModelNoise(VARIANCE& ModifyResult)
//{
//
//}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费毛片高清视频| 26uuu久久天堂性欧美| 日韩视频在线永久播放| 国产日韩三级在线| 久久精品国产免费看久久精品| 成人永久看片免费视频天堂| 日韩视频免费观看高清完整版在线观看 | 精品国产露脸精彩对白| 中文字幕字幕中文在线中不卡视频| 日本欧美一区二区三区| 色综合久久中文综合久久牛| 26uuu精品一区二区三区四区在线| 夜夜爽夜夜爽精品视频| 国产成人免费视频精品含羞草妖精 | www..com久久爱| 精品国产麻豆免费人成网站| 亚洲国产精品久久一线不卡| 91女厕偷拍女厕偷拍高清| 久久久不卡网国产精品一区| 美女看a上一区| 911国产精品| 五月婷婷综合激情| 欧美日韩不卡在线| 午夜私人影院久久久久| 99视频热这里只有精品免费| 日本一区二区免费在线观看视频| 国产一区二区三区四区五区美女| 日韩欧美在线不卡| 免费人成在线不卡| 日韩久久久久久| 黄网站免费久久| 久久色.com| 国产高清不卡一区二区| 国产丝袜欧美中文另类| 成人自拍视频在线| 亚洲色图欧美偷拍| 欧美影视一区二区三区| 亚洲一区二区三区不卡国产欧美| 色婷婷精品大视频在线蜜桃视频| 亚洲精品免费在线观看| 91高清视频在线| 亚洲h动漫在线| 3d成人h动漫网站入口| 久久精品国产一区二区三| 精品动漫一区二区三区在线观看| 国产精品自在在线| 亚洲少妇30p| 欧美色老头old∨ideo| 亚洲一卡二卡三卡四卡| 欧美videossexotv100| 国产精品一二二区| 亚洲少妇中出一区| 91麻豆精品国产91久久久使用方法 | 日韩欧美国产一二三区| 国产麻豆精品95视频| 18成人在线观看| 欧美日韩中字一区| 国产精品一区二区久久不卡| 国产精品私人影院| 欧美日韩成人一区| 国产成人av在线影院| 一区二区三区蜜桃网| 日韩欧美在线网站| a级高清视频欧美日韩| 天天综合网天天综合色| 国产欧美va欧美不卡在线| 欧美午夜精品一区二区三区| 久久成人18免费观看| 亚洲免费观看高清完整版在线观看熊| 欧美三级日韩三级| 国产91丝袜在线播放0| 亚洲成人激情综合网| 久久久久久久久伊人| 欧美亚洲另类激情小说| 国产成人免费在线| 美女被吸乳得到大胸91| 中文字幕在线不卡视频| 欧美第一区第二区| 欧洲精品在线观看| 粉嫩在线一区二区三区视频| 日本伊人色综合网| 亚洲乱码国产乱码精品精的特点| 欧美成人精品高清在线播放| 色网站国产精品| 粉嫩一区二区三区在线看| 免费在线观看视频一区| 亚洲综合视频网| 国产精品系列在线| 精品国产一区二区三区久久影院| 日本高清不卡视频| av成人免费在线观看| 国产盗摄一区二区三区| 麻豆成人av在线| 天天操天天色综合| 一区二区三区加勒比av| 亚洲色图欧美激情| 国产精品福利一区二区三区| 久久香蕉国产线看观看99| 欧美一级黄色大片| 在线不卡免费av| 欧美日韩午夜影院| 在线观看网站黄不卡| 91浏览器打开| a4yy欧美一区二区三区| 成人97人人超碰人人99| 国产传媒日韩欧美成人| 国产精品一区二区在线播放| 黄一区二区三区| 韩国理伦片一区二区三区在线播放 | 亚洲激情在线激情| 一区视频在线播放| 国产精品国产三级国产有无不卡 | 国产69精品一区二区亚洲孕妇 | 免费观看久久久4p| 麻豆精品新av中文字幕| 久草中文综合在线| 国产一区二区精品久久| 国产白丝精品91爽爽久久| 国产成a人亚洲精| 国产成人精品免费视频网站| 成人av在线观| 99久久精品国产一区| 欧美在线free| 在线不卡一区二区| 久久亚洲春色中文字幕久久久| 久久久无码精品亚洲日韩按摩| 中日韩av电影| 亚洲综合偷拍欧美一区色| 日本一区中文字幕| 国产成人免费av在线| 99久久久精品| 欧美卡1卡2卡| 欧美精品一区二区三区一线天视频| 亚洲精品一区二区三区影院 | 婷婷六月综合亚洲| 精品一区二区三区日韩| av电影天堂一区二区在线 | 精品成人免费观看| 国产精品久久看| 一区二区成人在线观看| 蜜桃av一区二区三区电影| 国产成人自拍网| 在线影视一区二区三区| 精品区一区二区| 亚洲精品国久久99热| 精品一区二区三区在线观看 | 久久丝袜美腿综合| 亚洲精选在线视频| 精品制服美女丁香| 91在线观看成人| 欧美一级电影网站| 中文字幕一区二区三区乱码在线| 亚洲高清免费视频| 成人免费高清在线| 欧美美女一区二区三区| 国产精品三级av| 日韩精品一级二级| 99久久国产综合精品女不卡| 欧美一区二区三级| 日韩码欧中文字| 国产一区二区三区日韩| 欧美猛男gaygay网站| 久久久久9999亚洲精品| 婷婷丁香激情综合| 91麻豆123| 国产日韩欧美不卡在线| 六月丁香综合在线视频| 色综合久久66| 国产午夜精品理论片a级大结局 | 精品蜜桃在线看| 亚洲一级在线观看| 99久久99精品久久久久久| 久久久久国产精品厨房| 蜜臀av性久久久久蜜臀aⅴ四虎| 99久久久久久| 国产日产精品一区| 国产老肥熟一区二区三区| 日韩视频一区二区在线观看| 亚洲综合区在线| 91美女蜜桃在线| 中文字幕中文在线不卡住| 国产精品一区免费视频| 精品国产成人在线影院| 秋霞电影网一区二区| 欧美日韩国产在线观看| 一区二区三区成人| 日本韩国欧美三级| 成人欧美一区二区三区视频网页 | 91精品国产aⅴ一区二区| 一区二区成人在线视频| 色综合久久九月婷婷色综合| 国产精品女人毛片| 福利电影一区二区三区| 久久综合九色欧美综合狠狠| 激情综合一区二区三区| 日韩欧美一级二级| 日韩国产精品久久久久久亚洲| 欧美日韩高清在线播放| 午夜精品一区二区三区免费视频| 欧美日韩在线三区|