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

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

?? cordic.cpp

?? 這個包里面包含了對Cordic算法的基本函數實現。通過Dformat類來控制系統的數據格式
?? CPP
字號:
/* implementation for class Dformat */
// ACCURACY and TABLE_SIZE are defined in ROM.h

#include "Cordic.h"
#include "ROM.h"
#include "Dformat.h"
#include <iostream>
#include <iomanip>
#include <fstream>
#include <cmath>

using namespace std;

// default constructor------------------------------------------------
Cordic::Cordic( const Dformat& CDf,int m,char dv_n,
			    double x0,double y0,double z0 )
{
	set( CDf,m,dv_n,x0,y0,z0 );
}

// public interfaces----------------------------------------------------

//setting functions
void Cordic::set( const Dformat& CDf, const int m,const char dv_n,
				  const double x0,const double y0,const double z0 )
{
	CORDIC_Dfmt=CDf;

	set( m );
	set( dv_n );
	set( x0,y0,z0 );
}

void Cordic::set(const unsigned int M, const unsigned int N, 
				 const int m, const char dv_n, 
				 const double x0, const double y0, const double z0)
{
	const Dformat CDf( M,N );// create an constant Dformat object
	set( CDf,m,dv_n,x0,y0,z0 );
}

void Cordic::set(const unsigned int M, const unsigned int N)
{
	CORDIC_Dfmt.set( M,N );
}

void Cordic::set(const int m)
{
	if( m<-1 || m>1 )
	{
		cout << "??Insupportable mode initialized.\n"
			<< " System will work in circular mode.\n"
			<< "-----------------------------------------\n\n";
		mode=1;// default mode: circular
	}
	else mode=m;
}

void Cordic::set(const char dv_n)
{
	if( dv_n=='y' || dv_n=='Y' ||
		dv_n=='z' || dv_n=='Z' )
		dv_name=dv_n;
	else 
	{
		cout << "??Insupportable decision variable.\n"
			<< "z will be chosen as decision variable.\n"
			<< "-----------------------------------------\n\n";
		dv_name='z';// default decision variable: z
	}
}

void Cordic::set( const double x0,const double y0,const double z0 )
{
	if( validator( x0,y0,z0 ) )
	{
		x=x0;y=y0;z=z0;
	}
	else 
		cout << "initial state is not valid.\n";
}

//
//============================================================================
// core functions
double Cordic::Sin()
{
	cordic( 1,'z' );
	return y;
}

double Cordic::Cos()
{
	cordic( 1,'z' );
	return x;
}

double Cordic::Abs()
{
	cordic( 1,'y' );
	return x;
}

double Cordic::Atan()
{
	cordic( 1,'y' );
	return z;
}

double Cordic::Mult()
{
	cordic( 0,'z' );
	return y;
}

double Cordic::Dev()
{
	if( x==0 )
		return 0;
	cordic( 0,'y' );
	return z;
}

double Cordic::Sinh()
{
	cordic( -1,'z' );
	return y;
}

double Cordic::Cosh()
{
	cordic( -1,'z' );
	return x;
}

double Cordic::Sqrt()
{
	cordic( -1,'y' );
	return x;
}

double Cordic::Atanh( )
{
	cordic( -1,'y' );
	return z;
}

//============================================================================
//
// getting functions
const double& Cordic::getx() const
{
	return x;
}

const double& Cordic::gety() const
{
	return y;
}

const double& Cordic::getz() const
{
	return z;
}

void Cordic::print( ostream& output )const
{
	output << "\n%% -----------SYSTEM PARAMETERS------------"
		   << "-----------------------\n";
	output << left << setw(20) << "%  DATA FORMAT";
	CORDIC_Dfmt.print( output );
	output << left << setw(30) << "%  MODE";
	switch ( mode )
	{
		case -1:output << "hyperbolic\n";break;
		case 0: output << "linear\n";break;
		case 1: output << "circular\n";break;
	}
	output << left << setw(30) << "%  DECISION VARIABLE NAME" 
		 << dv_name  << endl;
	output << left <<setw(30) << "%  CURRENT STATE"
		 << "[ " << x << ',' << y << ',' << z << " ]" << endl
		 << "%  -----------------------------------------"
		 << "-----------------------*/\n\n";
}

void Cordic::save(std::ostream & output) const
{
	output << left << setw(15) << x 
		   << left << setw(15) << y
		   << left << setw(15) << z << endl;
}

// default destructor---------------------------------------------------
Cordic::~Cordic(void)
{
}

// utility functions----------------------------------------------------
bool Cordic::validator(const double x0,
					   const double y0,
					   const double z0 ) const
{
	// initial state check
	return true;
}

bool Cordic::terminator( const long dv ) const
{
	long temp = ( dv>0 ? dv:-dv );
	return ( temp<= ACCURACY );
}

void Cordic::cordic( const int m,const char dv_n )
{
	ofstream RECORDER( "recorder.dat",ios::app );
	if( !RECORDER )
	{
		cerr << "Fail to create Recoder." << endl;
		exit(0);
	}
	// initial state
	set( m );// set mode
	set( dv_n );// set decision variable
	long xi = CORDIC_Dfmt.trans2Q( x );
	long yi = CORDIC_Dfmt.trans2Q( y );
	long zi = CORDIC_Dfmt.trans2Q( z );
	long dv = zi;// choose decision variable
	if( dv_n=='y' || dv_n=='y' ) dv=yi;
	else dv=zi;
	bool disable = terminator( dv );
	if( !disable )// iteration begins
	{
		int di;// variables declaration
		int Fi;
		long ei,xi_old;
		double An = 1.0;// gain recorder
		unsigned i=0;
		unsigned wordwidth =  CORDIC_Dfmt.getm()
							+ CORDIC_Dfmt.getn();
		// recording
		RECORDER << "\n%% ----------------------------------------------"
				 << "--------------------------------------\n"
				 << left << setw(20) << "%  DATA FORMAT";
					CORDIC_Dfmt.print( RECORDER );
		RECORDER << left << setw(30) << "%  MODE";
					switch ( mode )
					{
						case -1:RECORDER << "hyperbolic\n";break;
						case 0: RECORDER << "linear\n";break;
						case 1: RECORDER << "circular\n";break;
					}
		RECORDER << left << setw(30) << "%  DECISION VARIABLE NAME" 
				 << left << setw(15)  << dv_name  
				 << left << setw(10) << " current " 
				 << CORDIC_Dfmt.trans2f( dv ) << endl;
		RECORDER << left << setw(8) << 'i'
				 << left << setw(12) << "xi"
				 << left << setw(12)	<< "yi" 
				 << left << setw(16) << "zi" 
				 << left << setw(6) << "di" 
				 << left << setw(6) << "Fi" 
			 	 << left << setw(16) << "ei" 
				 << left << setw(12) << "An" << endl
			 	 << "%-----------------------------------------------"
			 	 << "-------------------------------------*/\n";
		// recording initial state
		RECORDER << left << setw(8) << i
				 << left << setw(12) << xi 
				 << left << setw(12) << yi 
				 << left << setw(16) << zi;
		for( i=0;i<wordwidth;++i )
		{
			if( dv_name=='z' || dv_name=='Z' )// direction to rotate
				di = zi<0 ? -1:1; 
			else
				di = yi<0 ? 1:-1;
			if( mode==1 )// angle to rotate
			{
				Fi = i; // places shift to right
				ei = CORDIC_Dfmt.trans2Q( ROMatan[ i ] ); 
			}
			else if( mode==-1 )
			{
				Fi = i;if( Fi==0 )continue;
				ei = CORDIC_Dfmt.trans2Q( ROMatanh[ i ] );
				// SPECIAL CASES-----------------------------
				if( (i==4) || (i== 13) || (i==40) || (i==121) )
				{
					xi_old = xi;
					if( di>0 )
					{
						xi += yi >> Fi;
						yi += xi_old >> Fi;
						zi -= ei;
					}
					else if( di<0 )
					{
						xi -= yi >> Fi;
						yi -= xi_old >> Fi;
						zi += ei;
					}
					An *= sqrt( 1-pow( (double)2,-( Fi<<1 ) ) );
					// recording special cases
					RECORDER << left << setw(6) << di 
						<< left << setw(6) << Fi 
						<< left << setw(16) << ei
						<< left << setw(12) << An << endl
						<< left << setw(8) << i+1
						<< left << setw(12) << xi 
						<< left << setw(12) << yi 
						<< left << setw(16) << zi;

					if( dv_n=='y' || dv_n=='y' ) dv=yi;
					else dv=zi;
					disable = terminator( dv );
					if( disable )break;
					// new choices
					if( dv_name=='z' || dv_name=='Z' )// direction to rotate
						di = zi<0 ? -1:1; 
					else
						di = yi<0 ? 1:-1;

				}
				// ------------------------------------------
			}
			else
			{
				Fi = i;
				ei = CORDIC_Dfmt.trans2Q( pow( (double)2,-(int)Fi ) );
			}
			xi_old = xi; // register the old value for xi			
			if( di>0 ) 
			{
				if( mode==1 )
					xi -= yi >> Fi;
				else if( mode==-1 )
					xi += yi >> Fi;
				yi += xi_old >> Fi;
				zi -= ei;
			}
			else if( di<0 )
			{
				if( mode==1 )
					xi += yi >> Fi;
				else if( mode==-1 )
					xi -= yi >> Fi;
				yi -= xi_old >> Fi;
				zi += ei;
			}
			// gain factor
			if( mode==1 )
				An *= sqrt( 1+pow( (double)2,-( Fi<<1 ) ) );
			else if( mode==-1 )
				An *= sqrt( 1-pow( (double)2,-( Fi<<1 ) ) );

			// recording
			RECORDER << left << setw(6) << di 
					 << left << setw(6) << Fi 
					 << left << setw(16) << ei
					 << left << setw(12) << An << endl
					 << left << setw(8) << i+1
					 << left << setw(12) << xi 
					 << left << setw(12) << yi 
					 << left << setw(16) << zi;

			if( dv_n=='y' || dv_n=='y' ) dv=yi;
			else dv=zi;
			disable = terminator( dv );
			if( disable )break;
		}
		x = CORDIC_Dfmt.trans2f( xi );
		y = CORDIC_Dfmt.trans2f( yi );
		z = CORDIC_Dfmt.trans2f( zi );
		// remove An
		if( mode==1 )
		{
			x /= An;
			if( dv_name=='z' || dv_name=='Z' )
				y /= An;
		}
		else if( mode==-1 )
		{
			x /= An;
			if( dv_name=='z' || dv_name=='Z' )
				y /= An;
		}
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久午夜精品理论片中文字幕| 综合网在线视频| 国产精品视频观看| 亚洲一级二级在线| 国产91丝袜在线18| 欧美日本精品一区二区三区| 国产午夜亚洲精品羞羞网站| 天天综合天天综合色| 99久久免费视频.com| 久久人人97超碰com| 视频在线观看国产精品| a4yy欧美一区二区三区| 久久亚区不卡日本| 日韩有码一区二区三区| 色乱码一区二区三区88 | 亚洲成av人片在线观看无码| 国产91丝袜在线18| 日韩精品中文字幕一区| 亚洲成在人线在线播放| 99久久免费精品高清特色大片| 日韩精品一区二区三区视频在线观看| 一区二区三区久久| 99精品一区二区| 国产欧美日韩中文久久| 精久久久久久久久久久| 3atv在线一区二区三区| 午夜伦欧美伦电影理论片| 99久久婷婷国产综合精品电影| 久久久国产综合精品女国产盗摄| 日本中文字幕一区二区有限公司| 欧美色成人综合| 亚洲乱码国产乱码精品精可以看| 成人中文字幕电影| 国产欧美综合在线观看第十页| 激情伊人五月天久久综合| 欧美一区二区三区免费视频 | 欧美v日韩v国产v| 日本不卡一二三| 91精品国产欧美日韩| 日韩国产成人精品| 91麻豆精品国产| 日韩黄色一级片| 日韩一区二区免费高清| 日本成人在线不卡视频| 日韩美女主播在线视频一区二区三区 | 精品剧情v国产在线观看在线| 肉色丝袜一区二区| 日韩欧美第一区| 国内精品在线播放| 欧美国产视频在线| 91在线精品一区二区| 一区二区三区小说| 欧美日韩国产123区| 日本免费新一区视频| 欧美刺激午夜性久久久久久久| 久久精品久久精品| 久久精品一区二区三区不卡 | 蜜臀a∨国产成人精品| 国产亚洲自拍一区| 99久久综合99久久综合网站| 亚洲人成小说网站色在线| 欧美又粗又大又爽| 蜜臀va亚洲va欧美va天堂 | 色8久久精品久久久久久蜜| 午夜精品福利视频网站| xvideos.蜜桃一区二区| 91麻豆自制传媒国产之光| 亚洲第四色夜色| 精品国产精品网麻豆系列| 成人视屏免费看| 亚洲一区二区三区国产| 欧美电影免费观看高清完整版在| 国产成人亚洲综合色影视| 亚洲欧美一区二区不卡| 欧美一区二区三区思思人| 国产一区二区h| 亚洲一区二区三区中文字幕| 欧美va亚洲va在线观看蝴蝶网| 成人性视频网站| 丝袜美腿成人在线| 国产精品午夜免费| 91精品啪在线观看国产60岁| 99久久婷婷国产综合精品| 日韩国产欧美在线视频| 国产精品高潮呻吟| 日韩欧美黄色影院| 91久久一区二区| 国产伦精品一区二区三区在线观看 | 日本网站在线观看一区二区三区| 中文字幕免费不卡在线| 欧美福利一区二区| 成a人片亚洲日本久久| 日本不卡123| 一区二区三区影院| 日本一区二区三区四区在线视频 | 成人av网址在线| 久久国产精品99精品国产| 综合久久给合久久狠狠狠97色| 精品日韩欧美在线| 欧美精品乱码久久久久久| hitomi一区二区三区精品| 国产一区二区91| 麻豆久久久久久| 亚洲超碰97人人做人人爱| 亚洲视频一区在线| 国产欧美视频一区二区| 337p粉嫩大胆色噜噜噜噜亚洲 | 高清成人在线观看| 青青青伊人色综合久久| 亚洲va国产va欧美va观看| 亚洲精品视频在线| 18欧美亚洲精品| 久久精品在这里| 26uuu欧美| 亚洲精品在线电影| 欧美电影免费观看高清完整版在线观看 | 亚洲一区二区三区中文字幕| 自拍偷拍亚洲欧美日韩| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 欧美情侣在线播放| 在线观看欧美精品| 欧美日韩在线观看一区二区| 日本高清不卡视频| 欧美视频在线不卡| 在线成人午夜影院| 69久久99精品久久久久婷婷| 欧美二区三区的天堂| 欧美亚洲综合另类| 欧美日韩大陆一区二区| 6080日韩午夜伦伦午夜伦| 制服丝袜国产精品| 欧美成人a视频| 久久久国产综合精品女国产盗摄| 久久久精品免费观看| 亚洲国产精品ⅴa在线观看| 亚洲国产经典视频| 亚洲视频在线观看三级| 亚洲亚洲精品在线观看| 天堂影院一区二区| 韩国一区二区在线观看| 丁香激情综合国产| 色婷婷狠狠综合| 欧美精品日日鲁夜夜添| 精品国产91久久久久久久妲己| 国产欧美日韩在线看| 亚洲精品成人天堂一二三| 石原莉奈在线亚洲三区| 极品少妇一区二区| 成人高清av在线| 欧美写真视频网站| 日韩欧美亚洲一区二区| 国产精品免费视频网站| 午夜影视日本亚洲欧洲精品| 老司机精品视频导航| 成人国产电影网| 制服丝袜日韩国产| 国产精品久久久久aaaa| 亚洲成人一区二区| 国产成人在线视频免费播放| 在线观看亚洲a| 久久美女艺术照精彩视频福利播放| 国产精品久久久久久久久免费相片 | 欧美一区二区久久久| 久久精品视频一区二区| 亚洲综合色成人| 国产在线视频一区二区三区| 欧美亚日韩国产aⅴ精品中极品| 日韩一区二区中文字幕| 亚洲欧美偷拍三级| 国产伦精一区二区三区| 欧美伊人久久久久久午夜久久久久| 精品蜜桃在线看| 亚洲国产精品久久一线不卡| 国产精品77777| 欧美一区二区三区在线看| 最新久久zyz资源站| 狠狠色伊人亚洲综合成人| 欧美在线色视频| 综合在线观看色| 国精产品一区一区三区mba视频| 欧美日韩精品电影| 中文字幕一区二区5566日韩| 精品一区精品二区高清| 欧美喷潮久久久xxxxx| 中文字幕中文在线不卡住| 国内不卡的二区三区中文字幕| 欧美久久免费观看| 亚洲一区二区在线免费看| www.久久久久久久久| 国产亚洲人成网站| 精品一二线国产| 欧美一区二区三区小说| 亚洲影院久久精品| 色综合一区二区三区| 国产精品乱码人人做人人爱| 国产一区二三区好的| 欧美精品一区男女天堂| 久久精品国产久精国产爱| 91精品国产综合久久久久久漫画| 亚洲一卡二卡三卡四卡五卡|