INL演算法
❶ 數模轉換的轉換器的參數
1.采樣速率和解析度
對於ADC而言,采樣速率和解析度是兩個非常重要的指標參數。其中,采樣速率表示模擬信號轉換為數字信號的速率,與ADC器件的製造技術有關,取決於ADC中比較器所能提供的判斷能力。解析度表示模擬信號轉換為數字信號後的比特數。
一般而言,采樣速率和解析度是互相制約的關系。采樣速率每提高一倍,解析度大約損失1bit。這主要是由於采樣時刻的抖動,即孔徑抖動或稱為孔徑不定性。
2.信噪比
ADC的信噪比(SNR)反映了量化過程中產生的無雜訊信號部分的均方根值和量化雜訊的均方根值的比值。
3.有效轉換位數
對於實際的A/D變換系統,由於存在著電雜訊、外界干擾和模擬電路的非線性畸變等因素的影響,僅以理想的解析度來度量系統性能是不夠的。
4.無失真動態范圍
無失真動態范圍(SFDR,Spurious-FreeDynamicRange)表示ADC在強信號干擾下檢測微弱信號的能力,在有的書中也被稱為無雜散動態范圍或無寄生動態范圍。SFDR可以按兩種方式進行定義:
(1)定義為滿量程(FS)信號的均方根值與輸出信號中最大寄生信號的均方根值的比值,用dBFS表示;
(2)定義為輸入信號幅度的均方根值與輸出信號中最大寄生信號的均方根值的比值,表示為dBc。
在理想情況下,SFDR的最大值出現在滿幅度輸入的情況下。在實際情況中,SFDR的最大值比滿幅度輸入至少低幾個dB,這是由於在輸入信號幅度接近滿幅度時ADC的非線性及失真現象將更加嚴重。因此,在實際中,應避免使ADC輸入信號幅度接近滿幅度。
5.孔徑誤差
在理想情況下,采樣過程是瞬間完成的。然而,對於實際的A/D變換過程,從發出采樣命令到實際開始采樣需要一定的時間,即實際采樣點與理想采樣點之間存在著一定的時間延遲,稱為孔徑時間(ApertureTime)。對於一個動態模擬信號,在ADC接通的孔徑時間里,輸入的模擬信號值是不確定的,從而引起輸出的不確定誤差,這就是所謂的孔徑誤差。孔徑誤差會導致ADC采樣精度和信噪比的下降,且與被采樣信號的頻率f成正比。
6.非線性誤差
非線性誤差是轉換器的重要精度指標,表示了ADC實際轉換值與理論轉換值之間的差別。非線性誤差主要包括兩類:差分非線性(DNL,DifferentialNon-Linearity)誤差和積分非線性(INL,IntegralNon-Linearity)誤差。
差分非線性誤差(DNL)是指ADC實際的量化電平與理論的量化電平之間的差異,這主要由於A/D本身的電路結構和製造工藝等原因,引起在量程中某些點的量化電壓和標準的量化電壓不一致而造成的。DNL引起的失真分量與輸入信號的幅度和非線性出現的位置有關,通常用和理想電平相差的百分比來表示。
積分非線性誤差(INL)是指ADC實際轉換特性函數曲線與理想轉換特性直線之間的最大偏差,主要是由於A/D模擬前端、采樣保持器及ADC的傳遞函數的非線性所造成的。理想轉換特性直線可以利用最小均方演算法得到,而INL引起的各階失真分量的幅度隨輸入信號的幅度變化。如果輸入信號每增加1dB,則二階交調失真分量增加2dB,三階交調失真分量增加3dB。
7.互調失真
當兩個正弦信號、同時輸入ADC時,由於器件的非線性,其輸出頻譜除了含有這兩個頻率的分量之外,還將產生許多失真產物,由此所造成的失真稱為互調失真(IMD,InterMolationDistortion),其中m+n的數值表示失真的階數。在所有的互調失真中,二階和三階的互調產物最為重要。前者容易通過數字濾波器濾除,而後者由於與、離得很近而很難濾除。
一般採用二階截獲點和三階截獲點來度量互調失真。然而,對於ADC,由於其限幅的特性,二階截獲點和三階截獲點並不適用,因此在ADC中也並沒有指定。在這種情況下,雙音SFDR是最適合度量ADC失真程度的指標。
8.諧波失真
由於ADC非線性的影響,其輸出的頻譜中出現許多輸入信號的高次諧波,這些高次諧波分量稱為諧波失真分量,由此所造成的失真稱為諧波失真(THD,TotalHarmonicDistortion)。諧波失真和互調失真是兩個不同的概念,前者是對原信號波形的扭曲,即使是單一頻率信號通過ADC也會產生這種現象,而後者卻是不同頻率之間的互相干擾和影響。
度量ADC的諧波失真的方法很多,通常可利用離散傅里葉變換(DFT)測出各次諧波分量的大小。
全功率輸入帶寬(FullPowerAnalogInputBandwidth)是指當ADC輸出信號幅度低於最大輸出電平3dB時的輸入信號頻率范圍。一般采樣速率越高,全功率輸入帶寬就越寬。對於ADC而言,被采樣信號的帶寬必須在全功率輸入帶寬之內,否則在模擬輸入帶寬之外的頻率成分因衰減過多而無法正確地反映原始信號。
❷ c++ #include< >裡面可以加什麼
#include 是用來包含頭文件的,
#include <>又是專門用來包含默認路徑下的頭文件的。
(注意與#include " "的區別,這個用來包含當前目錄下或絕對路徑里的頭文件)
你可以去查看你的編譯器安裝路徑下的include文件夾里的文件,列表如下
algorithm
assert.h
bitset
cassert
ccomplex
cctype
cerrno
cfloat
ciso646
cliext
climits
clocale
cmath
CodeAnalysis
comdef.h
comdefsp.h
comip.h
complex
comutil.h
conio.h
crtassem.h
crtdbg.h
crtdefs.h
crtwrn.h
csetjmp
csignal
cstdarg
cstddef
cstdio
cstdlib
cstring
ctime
ctype.h
cwchar
cwctype
dbgautoattach.h
delayhlp.cpp
delayimp.h
deque
direct.h
dos.h
dvec.h
eh.h
emmintrin.h
errno.h
exception
excpt.h
fcntl.h
float.h
fpieee.h
fstream
functional
fvec.h
gcroot.h
hash_map
hash_set
intrin.h
invkprxy.h
io.h
iomanip
ios
iosfwd
iostream
iso646.h
istream
iterator
ivec.h
limits
limits.h
list
listing.inc
locale
locale.h
malloc.h
map
math.h
mbctype.h
mbstring.h
memory
memory.h
minmax.h
mm3dnow.h
mmintrin.h
msclr
new
new.h
nmmintrin.h
numeric
ompassem.h
omp.h
ostream
penwin.h
pgobootrun.h
pmmintrin.h
process.h
queue
rtcapi.h
sal.h
search.h
set
setjmpex.h
setjmp.h
share.h
signal.h
smmintrin.h
srv.h
sstream
stack
stdarg.h
stddef.h
stdexcept
stdexcpt.h
stdio.h
stdlib.h
streambuf
string
string.h
strstream
swprintf.inl
sys
tchar.h
time.h
time.inl
tmmintrin.h
typeinfo
typeinfo.h
use_ansi.h
utility
vadefs.h
valarray
varargs.h
vcclr.h
_vcclrit.h
vector
wchar.h
wctype.h
wmiatlprov.h
wtime.inl
xcomplex
xdebug
xhash
xiosbase
xlocale
xlocinfo
xlocinfo.h
xlocmes
xlocmon
xlocnum
xloctime
xmath.h
xmemory
xmmintrin.h
xstddef
xstring
xtree
xutility
ymath.h
yvals.h
❸ OpenSSL的EVP_DecryptFinal_ex為什麼會調用失敗
此函數調用失敗的原因很多, 理解函數描述及使用細節很關鍵。
1、函數原型:
int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out,
int *outl);
2、函數描述:
該函數處理最後(Final)的一段數據。在函數在padding功能打開的時候(預設)才有效,這時候,它將剩餘的最後的所有數據進行加密處理。該演算法使用標志的塊padding方式(AKA PKCS padding)。加密後的數據寫入到參數out裡面,參數out的長度至少應該能夠一個加密塊。寫入的數據長度信息輸入到outl參數裡面。該函數調用後,表示所有數據都加密完了,不應該再調用EVP_EncryptUpdate函數。如果沒有設置padding功能,那麼本函數不會加密任何數據,如果還有剩餘的數據,那麼就會返回錯誤信息,也就是說,這時候數據總長度不是塊長度的整數倍。操作成功返回1,否則返回0。
PKCS padding標準是這樣定義的,在被加密的數據後面加上n個值為n的位元組,使得加密後的數據長度為加密塊長度的整數倍。無論在什麼情況下,都是要加上padding的,也就是說,如果被加密的數據已經是塊長度的整數倍,那麼這時候n就應該等於塊長度。比如,如果塊長度是9,要加密的數據長度是11,那麼5個值為5的位元組就應該增加在數據的後面。
❹ 尋跡感光智能車使用手冊
摘要 基於HCSl2單片機設計一種智能車系統。在該系統中,由紅外光電感測器實現路徑識別,通過對小車速度的控制,使小車能按照任意給定的黑色引導線平穩地尋跡。實驗證明:系統能很好地滿足智能車對路徑識別性能和抗干擾能力的要求,速度調節響應時間快,穩態誤差小,具有較好的動態性能和良好的魯棒性。關鍵詞 智能車 HCSl2單...
摘要 基於HCSl2單片機設計一種智能車系統。在該系統中,由紅外光電感測器實現路徑識別,通過對小車速度的控制,使小車能按照任意給定的黑色引導線平穩地尋跡。實驗證明:系統能很好地滿足智能車對路徑識別性能和抗干擾能力的要求,速度調節響應時間快,穩態誤差小,具有較好的動態性能和良好的魯棒性。
關鍵詞 智能車 HCSl2單片機 紅外光電感測器
智能車系統以迅猛發展的汽車電子為背景,涵蓋了控制、模式識別、感測技術、電子、電氣、計算機、機械等多個學科;主要由路徑識別、角度控制及車速控制等功能模塊組成。一般而言,智能車系統要求小車在白色的場地上,通過控制小車的轉向角和車速,使小車能自動地沿著一條任意給定的黑色帶狀引導線行駛。
筆者基於HCSl2單片機設計了一種智能車系統。硬體系統中的路徑識別功能由紅外光電感測器實現,車速控制由模糊控制器進行調節。軟體設計中實時檢測路況,並定時中斷採集速度反饋值。
1 系統分析及控制方案
1.1 智能車系統分析
智能車系統根據檢測到的路況和車速的當前信息,控制轉向舵機和直流驅動電機,相應地調整小車的行駛方向和速度;最終的目的使智能車能快速、穩定地按給定的黑色引導線行駛。
小車在行駛過程中會遇到以下兩種路況:①當小車由直道高速進入彎道時,轉角方向和車速應根據彎道的曲率迅速做出相應的改變,原則是彎道曲率越大則方向變化角度越大,車速越低。②當小車遇到_卜字交叉路段或是脫離軌跡等特殊情況時,智能車應當保持與上次正常情況一致的方向行駛,速度則相應降低。因此,對智能車的設計,要求具有實時路徑檢測功能和良好的調速功能。
1.2 控制方案的設計
系統的控制分為小車轉向角控制和速度控制兩部分。
小車轉向角的控制通過輸入PWM信號進行開環控制。根據檢測的不同路徑,判斷出小車所在位置,按不同的區間給出不同的舵機PWM控制信號。小車轉過相應的角度。考慮到實際舵機的轉向角與所給PWM信號的占空比基本成線性關系,所以舵機的控制方案採用查表法。在程序中預先創建控製表,路徑識別單元檢測當前的路況,單片機通過查表可知當前的賽道,然後給出相應的PWM信號控制舵機轉向。
本設計採用了一種數自整定的模糊控制演算法對小車速度進行閉環控制。小車在前進過程中,根據不同的路況給出不同的速度給定值,通過模糊控制器進行速度調節,以縮短小車的速度控制響應時間,減小穩態誤差。系統將小車的角度變化率反饋給模糊控制器,通過修正規則進行模糊參數的自整定。智能車自動控制系統結構框圖如圖1所示,圖中dt表示小車角度的微分環節,θ表示輸出的轉角,n』表示速度的設定值,n表示實際速度反饋值。
2 硬體結構與方案設計
系統硬體主要由HCSl2控制核心、電源管理單元、路徑識別單元、角度控制單元和車速控制單元組成,其結構框圖如圖2所示。
2.1 HCSl2控制核心
系統的核心控制採用飛思卡爾半導體公司的16位HCSl2系列單片機MC9S12DGl28。其主要特點是高度的功能集成,易於擴展,低電壓檢測復位功能,看門狗計數器,低電壓低功耗,自帶PWM輸出功能等。系統I/O口具體分配如下:PORTAO、PTH0~PTH7共9位用於小車前面路徑識別的輸入口;PACNO用於車速檢測的輸入口;PORTB0~PORTB7用於顯示小車的各種性能參數;PWM01用於伺服舵機的PWM控制信號輸出;PWM23、PWM45用於驅動電機的PWM控制信號輸出。
2.2 電源管理單元
電源管理單元是系統硬體設計中的一個重要組成單元。本系統採用7.2V、2000mAh、Ni-Cd蓄電池供電。為滿足系統各單元正常工作的需要,系統將電壓值分為5V、6.5V和7.2V三個檔。三個電壓檔的具體實現及其功能如下:
①採用穩壓管晶元L7805CV將電源電壓穩壓到5V,穩壓電路如圖3所示,給單片機系統電路、路徑識別的光電感測器電路、車速檢測的旋轉編碼器電路和驅動晶元MC33886電路供電;
②將電源電壓7.2V經過一個二極體降至6.5V左右後給舵機供電;
③將電源電壓7.2V直接供給直流驅動電機。
2.3 路徑識別單元
為提高小車轉向角的控制精度,系統路徑識別單元採用9個發射和接收一體的反射式紅外光電感測器JY043作為路徑檢測元件。紅外線具有極強的反射能力,應用廣泛,採用專用的紅外發射管和接收管可以有效地防止周圍可見光的干擾,提高系統的抗干擾能力。
對於小車循跡場地的黑白兩種顏色,發射管發出同樣的光強,接收管接收到的光強不同,因此輸出的電壓值也不同;給定一個基準電壓,通過對不同輸出電壓值進行比較,則電路的輸出為高低電平。當檢測到黑自線時分別輸出為高低電平,樣不僅系統硬體電路簡單,而且信號處理速度快。其路徑檢測硬體電路如圖4所示。
2.4 角度控制單元
系統角度控制單元採用Sanwa公司SRM-102型舵機作為小車方向控制元件。在實際運行過程中,舵機的輸出轉角與給定的PWM信號值成線性關系,以PWM信號為系統輸入信號,實現舵機開環控制。舵機響應曲線和控制電路如圖5、圖6所示。由於舵機的開環轉向力矩足夠,單片機通過採集的當前路況,給定PWM控制信號,從而實現舵機的轉向,具體的舵機轉向角與路徑識別單元輸出值的關系如表1所列。
2.5 車速控制單元
車速控制單元採用RS-380SH型直流電機對小車速度進行閉環控制,並用MC33886電機驅動H-橋晶元作為電機的驅動元件。車速檢測元件則採用日本Nemaicon公司的E40S-600-3-3型旋轉編碼器,其精度達到車輪每旋轉一周,旋轉編碼器產生600個脈沖。
系統通過MC9S12DGl28輸出的PWM信號來控制直流驅動電機。考慮到智能車由直道高速進入彎道時需要急速降速。通過實驗證明:當採用MC33886的半橋驅動時,在小車需要減速時只能通過自由停車實現。當小車速度值由80降至50時(取旋轉編碼器在一定采樣時間內檢測到的脈沖數作為系統速度的量綱),響應時間約為0.3s,調節效果不佳;當採用MC33886的全橋驅動時,其響應時間約為0.1s。因此系統利用MC33886的全橋結構,實現了小車的快速制動。其電機驅動電路如圖7所示。VCC為電源電壓7.2V,INl和IN2分別為MC33886的PWM信號輸入埠。MC33886的輸出埠OUTl和OUT2分別接驅動電機的兩端。Dl、D2為晶元的使能端。
3 軟體流程設計
本智能車系統的軟體設計基於MetrowerksCodeWarrlor CWl2 V3.1編程環境,使用c語言實現。整個系統軟體開發、製作、安裝、調試都在此環境下實現。
系統軟體設計由以下幾個模塊組成:單片機初始化模塊,實時路徑檢測模塊,舵機控制模塊,驅動電機控制模塊,中斷速度採集模塊和速度模糊控制模塊。系統軟體流程如圖8所示。
4 實 驗
對小車循跡功能實驗是通過控制舵機的轉向角實現的,而對車速控制功能,則進行了傳統模糊控制與參數自整定模糊控制的對比實驗。
(1)小車循跡功能實驗
系統通過採集到當前路況,對舵機的轉向角進行控制米實現小車的循跡功能。在舵機工作電壓6.5V情況下,輸入的PWM信號與舵機輸出的轉角一一對應。實驗測得,舵機角度從左轉-45°至右轉45°對應的輸入PWM信號范圍為131~165。具體的舵機轉角與PWM對應關系如表2所列,實驗測得小車運行軌跡平滑,循跡圖如圖9所示。圖中細線為任意給定的黑色引導線,粗線為小車循跡所行駛的曲線。
(2)小車速度控制功能實驗
在小車給定的三檔速度情況下,對小車速度進行傳統模糊控制與參數自整定的對比實驗。具體車速控制曲線如圖10所示。圖中縱軸為采樣周期(T=O.0ls)的車速檢測元件檢測到的脈沖數,橫軸為采樣周期的整倍數。曲線1為速度設定值,曲線2為傳統模糊控制響應曲線,曲線3為採用參數自整定模糊控制響應曲線。由小車的速度控制曲線可知,採用傳統模糊控制用於智能車系統時,響應時間太,且調節過程中會產生較大幅度的振盪;當採用帶參數自整定的模糊控制演算法後,小車在減速時能在較小的振幅范圍內快速調節到設定值,從而保證了小車的平穩過渡且不影響整體速度。
5 結論
通過對小車進行轉向角度和車速控制實驗證明:小車能平穩地按照任意給定的黑色引導線行駛,循跡效果良好,速度控制響應快,動態性能良好,穩態誤差較小,系統的穩定性和抗干擾能力強。
❺ C語言字元串
代碼功能:
1、輸入任意行數的內容(如果你想限制最多10行,自己加個變數計數好了)。
2、不想輸入時,新行直接回車,會刷新顯示統計個數。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
typedefstructstrs
{
charstr[100];
structstrs*next;
}STRS;
voidcontWord(char*str);//對字元串大小寫字母計數
voidintput(STRS**strsHead,STRS**strsTail);//輸入字元串,並顯示統計結果(每輸入完一行回車時,刷新數據)
voidprfStrs(STRS*strsHead,inttj);//列印字元串及統計結果
intdCon=0;//大寫字母計數
intnCon=0;//數字計數
intmain()
{
STRS*strsHead=(STRS*)malloc(sizeof(STRS));
strsHead->next=NULL;
STRS*strsTail=NULL;
intput(&strsHead,&strsTail);
return0;
}
voidprfStrs(STRS*strsHead,inttj)//tj=1輸出統計結果;tj=0不輸出統計結果
{
while(strsHead->next!=NULL)
{
printf("%s
",strsHead->next->str);
strsHead=strsHead->next;
}
if(tj==1)
{
printf("大寫字母個數:%d
",dCon);
printf("數字輸入個數:%d
",nCon);
}
}
voidcontWord(char*str)
{
intlen=strlen(str),i;
for(i=0;i<len;i++)
{
if(str[i]>='A'&&str[i]<='Z')
dCon++;
if(str[i]>='0'&&str[i]<='9')
nCon++;
}
}
voidintput(STRS**strsHead,STRS**strsTail)
{
STRS*strsNew;
charc;
while(1)
{
strsNew=(STRS*)malloc(sizeof(STRS));
memset(strsNew->str,0,100);
if(strsNew->str[0]==0)
{
c=0;
c=getchar();
if(c=='
')
{
system("cls");
prfStrs(*strsHead,1);
break;
}
else
{
strsNew->str[0]=c;
}
}
gets(&strsNew->str[1]);
strsNew->next=NULL;
if((*strsHead)->next==NULL)
(*strsHead)->next=strsNew;
else
(*strsTail)->next=strsNew;
*strsTail=strsNew;
contWord(strsNew->str);
}
}
❻ 雞兔同籠,其中共有25個頭,80個腳,問雞籠里有雞和兔各多少只,用c語言編譯出程
#include<stdio.h>
intmain()
{
inttou=25,i,tuzi[10],count=0;
for(i=1;i<=tou;i++)
{
printf("假設兔子%d只,雞%d只,那麼兔腳%d個,雞腳%d個",i,tou-i,i*4,(25-i)*2);
if(i*4+(25-i)*2==80)
{
tuzi[count++]=i;
printf("與總數80相符,假設成立
");
}
else
printf("與總數80不符,假設不成立
");
}
printf("
------------推算結果------------------
");
for(i=0;i<count;i++)
printf("兔子%d只,雞%d只
",tuzi[i],tou-tuzi[i]);
return0;
}
❼ 基於混沌影射的文件加密器的設計
這個比較難 你先得了解密碼學 密碼演算法 應用
我建議你去一些相關論壇看看下載些資料 或者你可以發郵件給我要 我這里有一些IDEA RSA HASH MD5 等一些源程序 感興趣可以給我信息 我的郵箱[email protected]
比如這些代碼
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
CPP=cl.exe
RSC=rc.exe
!IF "$(CFG)" == "En Decrypt - Win32 Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "Release"
# PROP BASE Intermediate_Dir "Release"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "Release"
# PROP Intermediate_Dir "Release"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
# ADD BASE RSC /l 0x804 /d "NDEBUG"
# ADD RSC /l 0x804 /d "NDEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
!ELSEIF "$(CFG)" == "En Decrypt - Win32 Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "Debug"
# PROP BASE Intermediate_Dir "Debug"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "Debug"
# PROP Intermediate_Dir "Debug"
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
# ADD BASE RSC /l 0x804 /d "_DEBUG"
# ADD RSC /l 0x804 /d "_DEBUG"
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
LINK32=link.exe
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
!ENDIF
# Begin Target
# Name "En Decrypt - Win32 Release"
# Name "En Decrypt - Win32 Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\des.cpp
# End Source File
# Begin Source File
SOURCE=".\Encrypt-Decrypt 01.cpp"
# End Source File
# Begin Source File
SOURCE=.\key.cpp
# End Source File
# Begin Source File
SOURCE=.\stdafx.cpp
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\des.h
# End Source File
# Begin Source File
SOURCE=.\global.h
# End Source File
# Begin Source File
SOURCE=.\stdafx.h
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
# End Group
# End Target
# End Project
❽ 關於C++漢諾塔遞歸演算法問題
abc依次表示是三個位置啊,開始,中間,最後那個位置
❾ A/D轉換中絕對精度的0.5LSB是什麼意思
我們所講的精度通常是指它的精確度,其實這是錯誤的。精度又叫做精密度,是跟准確度相對應的一個概念。就像打靶一樣,打的准,那就說它的准確度比較高;而每兩個靶之間能打出的偏移越小,那它的精密度就越高。精密度與准確度合起來稱為精確度。但是鑒於大家都將精度指代了精確度,那以下所說的精度如無特別指出,都是指精確度。
很多人對於精度和解析度的概念不清楚,這里我做一下總結,希望大家不要混淆。
我們搞電子開發的,經常跟「精度」與「解析度」打交道,這個問題不是三言兩語能搞得清楚的,在這里只作拋磚引玉了。
簡單點說,「精度」是用來描述物理量的准確程度的,而「解析度」是用來描述刻度劃分的。從定義上看,這兩個量應該是風馬牛不相及的。(是不是有朋友感到愕然^_^)。很多賣感測器的JS就是利用這一點來糊弄人的了。簡單做個比喻:有這么一把常見的塑料尺(中學生用的那種),它的量程是10厘米,上面有100個刻度,最小能讀出1毫米的有效值。那麼我們就說這把尺子的解析度是1毫米,或者量程的1%;而它的實際精度就不得而知了(算是0.1毫米吧)。當我們用火來烤一下它,並且把它拉長一段,然後再考察一下它。我們不難發現,它還有有100個刻度,它的「解析度」還是1毫米,跟原來一樣!然而,您還會認為它的精度還是原來的0.1毫米么?(這個例子是引用網上的,個人覺得比喻的很形象!)
回到電子技術上,我們考察一個常用的數字溫度感測器:AD7416。供應商只是大肆宣揚它有10位的AD,解析度是1/1024。那麼,很多人就會這么欣喜:哇塞,如果測量溫度0-100攝氏度,100/1024……約等於0.098攝氏度!這么高的精度,足夠用了。但是我們去瀏覽一下AD7416的數據手冊,居然發現裡面赫然寫著:測量精度0.25攝氏度!所以說解析度跟精度完全是兩回事,在這個溫度感測器里,只要你願意,你甚至可以用一個14位的AD,獲得1/16384的解析度,但是測量值的精度還是0.25攝氏度^_^
所以很多朋友一談到精度,馬上就和解析度聯系起來了,包括有些項目負責人,只會在那裡說:這個系統精度要求很高啊,你們AD的位數至少要多少多少啊……
其實,仔細瀏覽一下AD的數據手冊,會發現跟精度有關的有兩個很重要的指標:DNL和INL。似乎知道這兩個指標的朋友並不多,所以在這里很有必要解釋一下。
DNL:Differencial NonLiner——微分非線性度
INL:Interger NonLiner——積分非線性度(精度主要用這個值來表示)
他表示了ADC器件在所有的數值點上對應的模擬值,和真實值之間誤差最大的那一點的誤差值。也就是,輸出數值偏離線性最大的距離。單位是LSB(即最低位所表示的量)。
當然,像有的AD如△—∑系列的AD,也用Linearity error 來表示精度。
為什麼有的AD很貴,就是因為INL很低。解析度同為12bit的兩個ADC,一個INL=±3LSB,而一個做到了±1.5LSB,那麼他們的價格可能相差一倍。
LSB(Least Significant Bit),意為最低有效位;MSB(Most Significant Bit),意為最高有效位,若MSB=1,則表示數據為負值,若MSB=0,則表示數據為正。
當選擇模數轉換器(ADC)時,最低有效位(LSB)這一參數的含義是什麼?有位工程師告訴我某某生產商的某款12位轉換器只有7個可用位。也就是說,所謂12位的轉換器實際上只有7位。他的結論是根據器件的失調誤差和增益誤差參數得出的,這兩個參數的最大值如下:
失調誤差 =±3LSB,
增益誤差 =±5LSB,
乍一看,覺得他似乎是對的。從上面列出的參數可知最差的技術參數是增益誤差(±5 LSB)。進行簡單的數學運算,12位減去5位解析度等於7位,對嗎?果真如此的話,ADC生產商為何還要推出這樣的器件呢?增益誤差參數似乎表明只要購買成本更低的8位轉換器就可以了,但看起來這又有點不對勁了。正如您所判斷的,上面的說法是錯誤的。
讓我們重新來看一下LSB的定義。考慮一個12位串列轉換器,它會輸出由1或0組成的12位數串。通常,轉換器首先送出的是最高有效位(MSB)(即LSB + 11)。有些轉換器也會先送出LSB。在下面的討論中,我們假設先送出的是MSB(如圖1所示),然後依次送出MSB-1 (即 LSB + 10)和MSB -2(即LSB + 9)並依次類推。轉換器最終送出MSB -11(即LSB)作為位串的末位。
LSB這一術語有著特定的含義,它表示的是數字流中的最後一位,也表示組成滿量程輸入范圍的最小單位。對於12位轉換器來說,LSB的值相當於模擬信號滿量程輸入范圍除以212 或 4,096的商。如果用真實的數字來表示的話,對於滿量程輸入范圍為4.096V的情況,一個12位轉換器對應的LSB大小為1mV。但是,將LSB定義為4096個可能編碼中的一個編碼對於我們的理解是有好處的。
讓我們回到開頭的技術指標,並將其轉換到滿量程輸入范圍為4.096V的12位轉換器中:
失調誤差 = ±3LSB =±3mV,
增益誤差 =±5LSB = ±5mV,
這些技術參數表明轉換器轉換過程引入的誤差最大僅為8mV(或 8個編碼)。這絕不是說誤差發生在轉換器輸出位流的LSB、LSB-1、LSB-2、LSB-3、LSB-4、LSB-5、LSB-6和 LSB-7 八個位上,而是表示誤差最大是一個LSB的八倍(或8mV)。准確地說,轉換器的傳遞函數可能造成在4,096個編碼中丟失最多8個編碼。丟失的只可能是最低端或最高端的編碼。例如,誤差為+8LSB ((+3LSB失調誤差) + (+5LSB增益誤差)) 的一個12位轉換器可能輸出的編碼范圍為0 至 4,088。丟失的編碼為4088至4095。相對於滿量程這一誤差很小僅為其0.2%。與此相對,一個誤差為-3LSB((-3LSB失調誤差)—(-5LSB增益誤差))的12位轉換器輸出的編碼范圍為3至4,095。此時增益誤差會造成精度下降,但不會使編碼丟失。丟失的編碼為0、1和2。這兩個例子給出的都是最壞情況。在實際的轉換器中,失調誤差和增益誤差很少會如此接近最大值。
在實際應用中,由於ADC失調或增益參數的改進而使性能提升的程度微不足道,甚至可以忽略。但是,對於那些將精度作為一項設計目標的設計人員來說,這種假設太過絕對。利用固件設計可以很容易地實現數字校準演算法。但更重要的是,電路的前端放大/信號調理部分通常會產生比轉換器本身更大的誤差。
❿ 求一個密碼演算法實現
void createpassword()
{
#define passwordmax 8//將生成密碼的最大長度
char a[]="";//可能的字元
long ndictcount=sizeof(a);//獲得密碼詞典長度
char cpass[passwordmax+2];//將生成的密碼
long nminl=1,nmaxl=3;//本例中密碼長度從1-3
long array[passwordmax];//密碼詞典下標
assert(nminl<=nmaxl && nmaxl<=passwordmax);//容錯保證
long nlength=nminl;
register long j,i=0;
bool bnext;
cstdiofile file;
file.open("c:\\dict.txt",cfile::modecreate|cfile::modewrite);
while(nlength<=nmaxl)
{
for(i=0;i<passwordmax;i++)
array[i]=0;
bnext=true;
while(bnext)
{
for(i=0;i<nlength;i++)
cpass[i]=a[array[i>;
cpass[i]='\0';
file.writestring(cpass);
file.writestring("\n");
for(j=nlength-1;j>=0;j--)//密碼指針進位
{
array[j]++;
if(array[j]!=ndictcount-1)break;
else
{
array[j]=0;
if(j==0)bnext=false;
}
}
}
nlength++;
}
file.close();
}
這個代碼的寫文件語句效率比較低,為了降低演算法復雜度沒有優化。
如果要提高寫文件的效率,可以使用緩沖區,分批寫入。