專利名稱:磁卡解碼方法
技術(shù)領(lǐng)域:
本發(fā)明涉及解碼領(lǐng)域,尤其涉及一種磁卡解碼方法。
背景技術(shù):
傳統(tǒng)的磁卡軟解碼方案是在硬件上,將磁頭接到放大整形電路,以得到數(shù)字信號,然后輸入到處理器;在軟件上,通過記錄輸入的數(shù)字信號每個電平的持續(xù)時間(即脈寬),根據(jù)脈寬的關(guān)系實現(xiàn)軟解碼。還有一種方案是使用專用磁卡解碼芯片,將刷卡產(chǎn)生的模擬信號,直接識別并存儲成CPU能夠處理的0/1序列,然后根據(jù)磁卡解碼芯片反饋的成功信號,啟動軟件讀取磁卡解碼芯片內(nèi)存儲的0/1序列數(shù)據(jù)。但上述技術(shù)存在如下缺點,缺點I :放大整形電路或?qū)S么趴ń獯a芯片的硬件成本相對較高。缺點2 :靈活度較低,硬件輸出的數(shù)字波形的質(zhì)量取決于放大與整形電路的設(shè)計, 當(dāng)硬件設(shè)計不夠好時,某些卡的輸出波形不正常,通過軟件方法能夠解決的范圍要比直接使用原始波形小得多?!と秉c3 :采用專用磁卡解碼芯片的磁卡閱讀設(shè)備,對于磁卡的標準兼容性有一定限制,如果某個非標準磁卡無法被解碼芯片識別時,并不能通過簡單升級軟件的方式解決。
發(fā)明內(nèi)容
本發(fā)明主要解決的技術(shù)問題是提供一種磁卡解碼方法,使用軟件處理替代了硬件磁卡解碼芯片,降低了設(shè)備的生產(chǎn)制造成本,并有更好的靈活性。為解決上述技術(shù)問題,本發(fā)明采用的一個技術(shù)方案是提供一種磁卡解碼方法,包括以下步驟SI、采用極值法將采樣到的模擬波形轉(zhuǎn)換成初始數(shù)字波形,并采用曲線擬合的方法對所述初始數(shù)字波形的脈寬進行修正,得到修正后數(shù)字波形;S2、將磁卡的前導(dǎo)比特O的脈寬作為初始基準脈寬,使用所述初始基準脈寬對修正后數(shù)字波形的第一個脈寬進行判別,并由初始基準脈寬根據(jù)EWMA公式得到第二基準脈寬;以第二基準脈寬為基準對修正后數(shù)字波形的第二個脈寬進行判別,再由第二基準脈寬根據(jù)EWMA公式調(diào)整下一個基準脈寬;以下一個基準脈寬為基準對修正后數(shù)字波形的下一個脈寬進行判別;以及,重復(fù)執(zhí)行調(diào)整基準脈寬及根據(jù)相應(yīng)基準脈寬對修正后數(shù)字波形的脈寬進行判別的過程,直至修正后數(shù)字波形的脈寬全部被判別完;其中,上述判別過程是指以所述基準脈寬為基準,判別修正后數(shù)字波形的相應(yīng)脈寬是對應(yīng)比特I的半位還是比特O ;其中,比特I由兩個連續(xù)脈寬構(gòu)成,比特O由一個脈寬構(gòu)成;
S3、根據(jù)步驟S2的判別結(jié)果,將修正后數(shù)字波形轉(zhuǎn)換為對應(yīng)的0/1比特序列;S4、根據(jù)磁卡標準對所述比特序列解碼。其中,所述步驟SI是通過將磁頭接到MCU的差分ADC上進行采樣的。其中,所述步驟S4之后還包括步驟S5 :若解碼失敗,則將步驟SI中修正后得到的數(shù)字波形按采樣方向的相反方向取出,并執(zhí)行步驟S2。
其中,所述步驟SI之前還包括以下步驟S0、判斷是否開始進行采樣;若否,則繼續(xù)判斷是否開始進行采樣;若是,則進行步驟Si。其中,當(dāng)判斷開始進行采樣后判斷相鄰兩個采樣點之間的電壓值,并在連續(xù)幾百個米樣點中任意兩個米樣點之間的電壓差值小于ImV時,結(jié)束米樣。其中,所述步驟SI中采用極值法將采樣到的模擬波形轉(zhuǎn)換成初始數(shù)字波形具體為,將極大值點歸到高電平,從該點開始之后的點都歸到高電平,直到遇到極小值點; 將極小值點歸到低電平,從該點開始之后的點都歸到低電平,直到遇到極大值點;得到初始數(shù)字波形。其中,所述步驟SI中采用曲線擬合的方法對所述初始數(shù)字波形的脈寬進行修正包括以下步驟,S1021、計算出曲線多項式極值點的位置χ ;S1022、根據(jù)χ與采樣點極值點的位置關(guān)系修正初始數(shù)字波形的脈寬。其中,所述步驟S2中以所述基準脈寬對修正后數(shù)字波形的脈寬進行判別,及步驟 S3中將修正后數(shù)字波形轉(zhuǎn)換為對應(yīng)的0/1比特序列,具體包括以下步驟S301、判斷當(dāng)前脈寬與當(dāng)前基準脈寬的比例是否處于[kl,k2]內(nèi);若是,則將當(dāng)前脈寬轉(zhuǎn)換為比特0,并調(diào)整基準脈寬,繼續(xù)進行對下一脈寬的判別;若否,則進行步驟S302 ;S302、判斷當(dāng)前脈寬與當(dāng)前基準脈寬的比例是處于[k3,+內(nèi),是處于[k2,k3] 內(nèi),還是處于(0,kl]內(nèi);若當(dāng)前脈寬與當(dāng)前基準脈寬的比例處于[k3,+ °ο)內(nèi),則放棄當(dāng)前脈寬,并終止此次解碼過程或調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;若當(dāng)前脈寬與當(dāng)前基準脈寬的比例處于[k2,k3]內(nèi),則將當(dāng)前脈寬轉(zhuǎn)換為比特0, 并在調(diào)整基準脈寬時增加調(diào)整系數(shù),返回步驟S301,繼續(xù)進行對下一脈寬的判別;若當(dāng)前脈寬與當(dāng)前基準脈寬的比例處于(0,kl]內(nèi),則判斷后一個脈寬與當(dāng)前基準脈寬的比例是否處于(0,kl];若是,則將當(dāng)前脈寬和后一個脈寬轉(zhuǎn)換為比特1,并調(diào)整基準脈寬,返回步驟S301 ;若否,則進行步驟S303 ;S303、判斷后一個脈寬與當(dāng)前基準脈寬的比例是處于[k3,+ m)內(nèi),還是處于 [kl, k3]內(nèi);若后一個脈寬與當(dāng)前基準脈寬的比例處于[k3,+ m)內(nèi),則終止此次解碼過程或放棄當(dāng)前脈寬,并調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;若后一個脈寬與當(dāng)前基準脈寬的比例處于[kl,k3]內(nèi),則判斷前一個脈寬與前一個基準脈寬的比例是否處于[kl,k2]內(nèi);若否,則執(zhí)行步驟S306 ;若是,則判斷前一個脈寬是否小于后一個脈寬;若是,則進行步驟S304 ;若否,則進行步驟S305 ;
S304、判斷當(dāng)前脈寬與前一個脈寬之和與當(dāng)前基準脈寬的比例是否處于[kl,k2] 內(nèi);若是,則將當(dāng)前脈寬和后一個脈寬轉(zhuǎn)換為比特1,將后一個脈寬轉(zhuǎn)換為比特0,并調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;若否,則將當(dāng)前脈寬轉(zhuǎn)換為比特0,并調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;S305、判斷當(dāng)前脈寬與前一個脈寬之和與當(dāng)前基準脈寬的比例是否處于[kl,k2] 內(nèi);若是,則將當(dāng)前脈寬和前一個脈寬轉(zhuǎn)換為比特1,將后一個脈寬轉(zhuǎn)換為比特0,并調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;若否,則將當(dāng)前脈寬轉(zhuǎn)換為比特0,并調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;S306、判斷前第二個脈寬與前一個基準脈寬的比例是否處于(0,kl]內(nèi);若是,則進行步驟S307 ;若否,則將當(dāng)前脈寬轉(zhuǎn)換為比特0,并調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;S307、判斷當(dāng)前脈寬、前一個脈寬和前第二個脈寬的脈寬之和,與前一個基準脈寬的比例是否處于[kl,k2]內(nèi);若是,則將后一個脈寬和后第二個脈寬均轉(zhuǎn)換為比特0,并調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;若否,則將當(dāng)前脈寬轉(zhuǎn)換為比特 0,并調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;其中,0〈kl〈l〈k2〈k3。 本發(fā)明的有益效果是區(qū)別于現(xiàn)有技術(shù)中硬件成本較高,靈活性較低,對磁卡的標準兼容性有一定的限制等缺點,本發(fā)明提供一種磁卡解碼方法,采集的是離散時間的磁卡模擬波形,利用極值法得到原始模擬波形的信息,并采用曲線擬合的方法修正初始數(shù)字波形,從而精確計算峰值,使數(shù)字波形脈寬的計算更準確。如此可以看出,本發(fā)明能夠靈活地選擇將模擬波形轉(zhuǎn)換成數(shù)字波形的方法。且本發(fā)明采用動態(tài)的當(dāng)前基準脈寬作為判別所述數(shù)字波形當(dāng)前脈寬對應(yīng)比特I的半位或比特O的基準,有效地解決了由于硬件設(shè)備的不完善、磁卡移動速度不均勻而導(dǎo)致的讀取數(shù)據(jù)錯誤的概率。此外,由于本發(fā)明是將磁頭接到MCU的差分ADC上進行采樣的,而差分ADC是MCU 自帶的一個模塊,所以在很大程度上解決了硬件成本較高的問題。
圖I是本發(fā)明磁卡解碼方法的一流程圖;圖2是本發(fā)明采樣的部分磁卡數(shù)據(jù);圖3是從圖2截取出的部分波形的放大圖,其中,圓點表示實際的采樣點;圖4是對圖3中A處五個采樣點使用曲線擬合方法后的結(jié)果;圖5是使用極值法和曲線擬合方法后,對圖2中部分數(shù)據(jù)轉(zhuǎn)換的結(jié)果;圖6是本發(fā)明磁卡解碼方法中脈寬轉(zhuǎn)換為0/1比特序列的方法的部分流程圖;圖7是本發(fā)明磁卡解碼方法中脈寬轉(zhuǎn)換為0/1比特序列的方法的部分流程圖;圖8是本發(fā)明磁卡解碼方法中脈寬轉(zhuǎn)換為0/1比特序列的方法的部分流程圖。
具體實施例方式為詳細說明本發(fā)明的技術(shù)內(nèi)容、構(gòu)造特征、所實現(xiàn)目的及效果,以下結(jié)合實施方式并配合附圖詳予說明。
請參閱圖1,本發(fā)明提供一種磁卡解碼方法,包括以下步驟SI、采用極值法將采樣到的模擬波形轉(zhuǎn)換成初始數(shù)字波形,并采用曲線擬合的方法對所述初始數(shù)字波形的脈寬進行修正,得到修正后數(shù)字波形;S2、將磁卡的前導(dǎo)比特O的脈寬作為初始基準脈寬,使用所述初始基準脈寬對修正后數(shù)字波形的第一個脈寬進行判別,并由初始基準脈寬根據(jù)EWMA公式得到第二基準脈寬;以第二基準脈寬為基準對修正后數(shù)字波形的第二個脈寬進行判別,再由第二基準脈寬根據(jù)EWMA公式調(diào)整下一個基準脈寬;以下一個基準脈寬為基準對修正后數(shù)字波形的下一個脈寬進行判別;以及,重復(fù)執(zhí)行調(diào)整基準脈寬及根據(jù)相應(yīng)基準脈寬對修正后數(shù)字波形的脈寬進行判別的過程,直至修正后數(shù)字波形的脈寬全部被判別完;其中,上述判別過程是指以所述基準脈寬為基準,判別修正后數(shù)字波形的相應(yīng)脈寬是對應(yīng)比特I的半位還是比特O ;其中,比特I由兩個連續(xù)脈寬構(gòu)成,比特O由一個脈寬構(gòu)成;S3、根據(jù)步驟S2的判別結(jié)果,將修正后數(shù)字波形轉(zhuǎn)換為對應(yīng)的0/1比特序列;S4、根據(jù)磁卡標準對所述比特序列解碼,得到ASCII碼數(shù)據(jù)。在一具體的實施例中,步驟S4是根據(jù)IS07811/1-7811/5標準對所述比特序列解碼,得到ASCII碼數(shù)據(jù)的。在另外的實施例中,磁卡標準的選擇可根據(jù)實際情況選擇,其類型不僅有IS07811,還有JIS II,還有IBM等等,或是其他國家還有自己的本地標準。本發(fā)明采集的是離散時間的磁卡模擬波形,利用極值法得到原始模擬波形的信息,并采用曲線擬合的方法修正初始數(shù)字波形,從而精確計算峰值,使數(shù)字波形脈寬的計算更準確。如此可以看出,本發(fā)明能夠靈活地選擇將模擬波形轉(zhuǎn)換成數(shù)字波形的方法。且本發(fā)明采用動態(tài)的當(dāng)前基準脈寬作為判別所述數(shù)字波形當(dāng)前脈寬對應(yīng)比特I的半位或比特O 的基準,有效地解決了由于硬件設(shè)備的不完善、磁卡移動速度不均勻而導(dǎo)致的讀取數(shù)據(jù)錯誤的概率。在這里,EWMA公式為Tnew=fac*Told+(1-fac)*Pulse。其中,fac 為 O 到 I 的系數(shù),Told為當(dāng)前參考脈寬,Pulse為轉(zhuǎn)換成比特0/1的當(dāng)前脈寬,Tnew為新的參考脈寬。在這里,系數(shù)fac是個經(jīng)驗權(quán)值,它設(shè)得大,基準脈寬的改變速度就比較慢,它主要由實際測試所得,故在本發(fā)明中,系數(shù)fac的具體值主要由實際情況決定。在本發(fā)明中,所述步驟SI是通過將磁頭接到MCU的差分ADC上進行采樣的。在本領(lǐng)域中,MCU指的是微處理器單元,差分ADC指的是支持差分輸入的模數(shù)轉(zhuǎn)換器。由于差分 ADC是MCU自帶的一個模塊,所以在很大程度上解決了硬件成本較高的問題。本發(fā)明需要將模擬波形轉(zhuǎn)換成數(shù)字波形,根據(jù)數(shù)字波形每個電平的持續(xù)時間將電平轉(zhuǎn)換成01序列,而每個電平的持續(xù)時間則指的是脈寬。采樣間隔指的是采樣的時間間隔,比如采樣速度為100KSPS/S,表示I秒采樣100K次,那么采樣間隔就是10us。其中,所述步驟SI中采用極值法將采樣到的模擬波形轉(zhuǎn)換成初始數(shù)字波形具體為,
將極大值點歸到高電平,從該點開始之后的點都歸到高電平,直到遇到極小值點; 將極小值點歸到低電平,從該點開始之后的點都歸到低電平,直到遇到極大值點;得到初始數(shù)字波形。然后記錄每個電平的點數(shù),將其乘以采樣間隔,便可以得到初始數(shù)字波形的脈寬。 請參閱圖2至圖5,在上述的某些實施例中,本發(fā)明先采用的是極值法把采樣到的模擬波形轉(zhuǎn)換成初始數(shù)字波形,過程如下設(shè)y[i]為第i個采樣點,那么,當(dāng)y[i]大于一定幅值,y[i]>y[i _ I]并且y[i]>y[i+1]時,y[i]為極大值,表示高電平的開始;當(dāng)y[i]小于一定幅值,y[i]〈y[i - I]并且y[i]〈y[i+l]時,y[i]為極小值,表示低電平的電始。將極大值點歸到高電平,從該點開始之后的點都歸到高電平,直到遇到極小值點; 將極小值點歸到低電平,從該點開始之后的點都歸到低電平,直到遇到極大值點;得到初始數(shù)字波形,然后記錄每個電平的點數(shù),將其乘以采樣間隔,得到初始數(shù)字波形的脈寬。由于上述初始數(shù)字波形是直接通過采樣點得到的,所以上述利用極值法能夠得到更多的原始模擬波形的信息。正如圖2和圖3中所示的通過極值法得到的波形圖,極值附近的波形并不平滑由于數(shù)字波形的脈寬是轉(zhuǎn)換成0/1序列的唯一依據(jù),它的準確性直接影響到結(jié)果的正確性, 所以,只根據(jù)采樣點的數(shù)量確定脈寬太過粗糙。因此在優(yōu)選的實施例中,本發(fā)明采用曲線擬合的方法來修正初始數(shù)字波形的脈寬,從而精確計算峰值,使數(shù)字波形脈寬的計算更準確。 即所述步驟SI中采用曲線擬合的方法對所述初始數(shù)字波形的脈寬進行修正包括以下步驟,·S1021、計算出曲線多項式極值點的位置χ ;S1022、根據(jù)χ與采樣點極值點的位置關(guān)系修正初始數(shù)字波形的脈寬。在一具體的實施例中,本發(fā)明采用二次多項式y(tǒng)=ax2+bx+C來對采樣點進行曲線擬合,首先通過圖3中的五個采樣點求出a,b,c的值,并計算出該二次多項式實際極值位置 x=-b/2a,然后根據(jù)實際極值位置修正初始數(shù)字波形的脈寬。修正過程如下由于采樣間隔是固定的,設(shè)為T。而二次多項式的實際極值位置χ 總是位于連續(xù)的兩個采樣點c,c+l之間,設(shè)為[\,\+1],如果χ小于極值點位置,即χ處于初始數(shù)字波形中極值點之前,則說明此時\+1為初始數(shù)字波形中極值點,同時也表明了模擬后的當(dāng)前脈寬的極值實際上不在\+1點上,而在χ上,為了保證模擬后當(dāng)前脈寬的極值點χ 能夠處于當(dāng)前脈寬上,則需將從X到初始數(shù)字波形極值點Xm的時間間隔補充到當(dāng)前脈寬, 前面一個脈寬自然得減去對應(yīng)的間隔(此時C+1為極值點),即將T*(Xc;+1 - χ)補充到當(dāng)前脈寬,前一個脈寬相應(yīng)地減去Τ* (xc+1-x)。同理,如果χ大于等于極值點位置,此時c為極值點,則將T* (x - xc)補充到前一個脈寬,當(dāng)前脈寬相應(yīng)地減去Τ* (x-xc)。通過上述曲線擬合修正初始數(shù)字波形的脈寬的過程,使數(shù)字波形脈寬的計算更準確,請參閱圖4和圖5,圖4中的曲線是使用二次曲線對圖3中5個采樣點擬合的結(jié)果,求出的實際極值位置x=_b/2a在圖4中用豎線表示。圖5使用極值法和曲線擬合方法后,對圖 2中部分數(shù)據(jù)轉(zhuǎn)換的結(jié)果。通過極值法與曲線按擬合方法的結(jié)合使用,能夠精確計算峰值, 使數(shù)字波形脈寬的計算更準確。在本發(fā)明中,采用的曲線的多項式不僅僅只包括二次多項式,還包括三次多項式 y=ax3+bx2+cx+d 等。
本發(fā)明采用的磁卡編碼規(guī)則為前導(dǎo)0+磁卡數(shù)據(jù)+后導(dǎo)0,其中前、后導(dǎo)O的個數(shù)由制卡設(shè)備決定。請參閱圖6至圖8,具體的編碼過程中0〈kl〈l〈k2〈k3,所述步驟S2中以所述基準脈寬對修正后數(shù)字波形的脈寬進行判別,及步驟S3中將修正后數(shù)字波形轉(zhuǎn)換為對應(yīng)的0/1比特序列,具體包括以下步驟S301、判斷當(dāng)前脈寬與當(dāng)前基準脈寬的比例是否處于[kl,k2]內(nèi);若是,則將當(dāng)前脈寬轉(zhuǎn)換為比特0,并調(diào)整基準脈寬,繼續(xù)進行對下一脈寬的判別;若否,則進行步驟S302 ;S302、判斷當(dāng)前脈寬與當(dāng)前基準脈寬的比例是處于[k3,+內(nèi),是處于[k2,k3] 內(nèi),還是處于(0,kl]內(nèi);若當(dāng)前脈寬與當(dāng)前基準脈寬的比例處于[k3,+ °ο)內(nèi),則放棄當(dāng)前脈寬,并終止此次解碼過程或調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;若當(dāng)前脈寬與當(dāng)前基準脈寬的比例處于[k2,k3]內(nèi),則將當(dāng)前脈寬轉(zhuǎn)換為比特0, 并在調(diào)整基準脈寬時增加調(diào)整系數(shù),返回步驟S301,繼續(xù)進行對下一脈寬的判別;若當(dāng)前脈寬與當(dāng)前基準脈寬的比例處于(0,kl]內(nèi),則判斷后一個脈寬與當(dāng)前基準脈寬的比例是否處于(0,kl];若是,則將當(dāng)前脈寬和后一個脈寬轉(zhuǎn)換為比特1,并調(diào)整基準脈寬,返回步驟S301 ;若否,則進行步驟S303 ;S303、判斷后一個脈寬與當(dāng)前基準脈寬的比例是處于[k3,+ m)內(nèi),還是處于 [kl, k3]內(nèi);
·
若后一個脈寬與當(dāng)前基準脈寬的比例處于[k3,+ m)內(nèi),則終止此次解碼過程或放棄當(dāng)前脈寬,并調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;若后一個脈寬與當(dāng)前基準脈寬的比例處于[kl,k3]內(nèi),則判斷前一個脈寬與前一個基準脈寬的比例是否處于[kl,k2]內(nèi);若否,則執(zhí)行步驟S306 ;若是,則判斷前一個脈寬是否小于后一個脈寬;若是,則進行步驟S304 ;若否,則進行步驟S305 ;S304、判斷當(dāng)前脈寬與前一個脈寬之和與當(dāng)前基準脈寬的比例是否處于[kl,k2] 內(nèi);若是,則將當(dāng)前脈寬和后一個脈寬轉(zhuǎn)換為比特1,將后一個脈寬轉(zhuǎn)換為比特0,并調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;若否,則將當(dāng)前脈寬轉(zhuǎn)換為比特0,并調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;S305、判斷當(dāng)前脈寬與前一個脈寬之和與當(dāng)前基準脈寬的比例是否處于[kl,k2] 內(nèi);若是,則將當(dāng)前脈寬和前一個脈寬轉(zhuǎn)換為比特1,將后一個脈寬轉(zhuǎn)換為比特0,并調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;若否,則將當(dāng)前脈寬轉(zhuǎn)換為比特0,并調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;S306、判斷前第二個脈寬與前一個基準脈寬的比例是否處于(0,kl]內(nèi);若是,則進行步驟S307 ;若否,則將當(dāng)前脈寬轉(zhuǎn)換為比特0,并調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;S307、判斷當(dāng)前脈寬、前一個脈寬和前第二個脈寬的脈寬之和,與前一個基準脈寬的比例是否處于[kl,k2]內(nèi);若是,則將后一個脈寬和后第二個脈寬均轉(zhuǎn)換為比特0,并調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;若否,則將當(dāng)前脈寬轉(zhuǎn)換為比特 0,并調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別。在某些的實施例中,60%〈1^1〈80%,110%〈1^2〈130%,160%〈1^3〈180%。kl就固定設(shè)成(60%, 80%)的某個數(shù)值,k2,k3同理,然后就不再改變了。其kl,k2,k3的具體選值由實際測試所得,故在本發(fā)明中,kl, k2,k3的具體值主要由實際情況決定。在一具體的實施例中,kl為75%,k2為125%,k3為175%。根據(jù)EWMA公式 “Tnew=fac*Told+(l-fac)*Pulse”調(diào)整下一個參考脈寬。其中,fac為O到I的系數(shù),在本實施例中,舉例為O. 5, Told為當(dāng)前參考脈寬,Pulse為轉(zhuǎn)換成邏輯01的脈寬,Tnew為新的參考脈寬。本發(fā)明中,最初始的脈寬認定為前導(dǎo)0,將其作為初始基準脈寬,然后取得第一個脈寬,將其與初始基準脈寬比較,如果比例在75°/Γ 25%之間,將該脈寬轉(zhuǎn)換成邏輯O ;如果比例低于75%,再判斷后一個脈寬與后一個基準脈寬的比例,如果低于75%,則這2個脈寬轉(zhuǎn)換成邏輯I。在轉(zhuǎn)換過程中有時會出現(xiàn)異常情況,比如當(dāng)前脈寬與當(dāng)前基準脈寬的比例處于125% 175%,此時該當(dāng)時脈寬仍轉(zhuǎn)換成邏輯0,但是調(diào)整下一個基準脈寬時增大系數(shù) fac (比如將原來的O. 5調(diào)成O. 7);若比例超過175%時,則放棄當(dāng)前脈寬的編碼并繼續(xù)進行下一個脈寬的編碼,或終止此次解碼過程,返回提示出錯。還有一種情況是出現(xiàn)單個短脈寬,后面出現(xiàn)了長脈寬,導(dǎo)致這個短脈寬被孤立。在這里,當(dāng)前脈寬與當(dāng)前基準脈寬的比例在75°/Γ 25%之間的脈寬稱為長脈寬,比例在0% 75%之間的脈寬稱為短脈寬。這種情況比較復(fù)雜,分成以下幾種情況處理(以下將長脈寬用 I表不,短脈寬用s表不)(I)將 Ilsl 轉(zhuǎn)成 Issl : 比如449 364 107 447(此時449參考脈寬為451),這里364與107應(yīng)該轉(zhuǎn)換成邏輯1,但是364被轉(zhuǎn)成邏輯0,導(dǎo)致107被孤立。修正過程為如果前第2個脈寬(364)小于當(dāng)前脈寬(447),并且前2個脈寬之和比例在長脈寬范圍內(nèi)就將邏輯O (由364轉(zhuǎn)換的)修正為邏輯1,然后將當(dāng)前脈寬也轉(zhuǎn)成邏輯O。(2)將 Ilsl 轉(zhuǎn)成 Ilss:比如449 447 107 364 (此時449參考脈寬為451),這里364與107應(yīng)該轉(zhuǎn)換成邏輯1,但是364被判定為長脈寬,107會被孤立。修正過程為,如果前第2個脈寬為長脈寬, 當(dāng)前脈寬小于前第2個脈寬,并且最后這2個脈寬之和比例在長脈寬范圍內(nèi),就將這2個脈寬轉(zhuǎn)換成邏輯I。(3)將 lsssl_>lssll:比如2782 1306 1251 1953 2972(此時2782參考脈寬為2693),這里1953應(yīng)該是個長脈寬,但是卻被判定為短脈寬。修正過程為如果最后一個邏輯為I (由1306和1251 轉(zhuǎn)換的),如果前I個脈寬(1953)與轉(zhuǎn)換成該邏輯的這2個脈寬之和的比在長脈寬范圍內(nèi), 就將前I個脈寬轉(zhuǎn)換成邏輯0,當(dāng)前脈寬也轉(zhuǎn)換成邏輯O。(4)其他情況,一律將孤立的短脈寬轉(zhuǎn)成為邏輯O。在某些實施例中,磁卡的刷卡方向可能為反向刷卡,那么按上述過程則會解碼失敗,此時則將步驟SI中修正后得到的數(shù)字波形按采樣方向的相反方向取出,并執(zhí)行步驟S2 及步驟S2后面的步驟進行磁卡解碼。為了更好地理解上述過程,在此舉例說明假如磁卡的刷卡方向為從左到右,那么采集到的采樣點的方向也是從左到右,解碼的順序也是從左到右,而此種解碼順序是正確的解碼順序。如果磁卡的刷卡方向變?yōu)閺挠业阶?,那么按從左到右的解碼順序必然會失敗,此時將采集到的采樣點波形從右到左取出,再進行解碼,這樣就可以順得解碼了。在某些實施例中 ,所述步驟SI之前還包括以下步驟S0、判斷是否開始進行采樣; 若否,則繼續(xù)判斷是否開始進行采樣;若是,則進行步驟Si。在未進行采樣時,采樣電壓總在O左右,因此當(dāng)檢測到采樣電壓高過閾值時,認為是刷卡的開始,此時開始記錄采樣數(shù)據(jù)。在這里,閾值應(yīng)該設(shè)成高于噪聲范圍(ImV以內(nèi)),比如I. 5mV,但也不能太大,因為有些卡的信號較弱。在某些實施例中,當(dāng)判斷開始進行采樣后判斷相鄰兩個采樣點之間的電壓值,并在連續(xù)幾百個采樣點中任意兩個采樣點之間的電壓差值小于ImV時,結(jié)束采樣。綜上所述,區(qū)別于現(xiàn)有技術(shù)中硬件成本較高,靈活性較低,對磁卡的標準兼容性有一定的限制等缺點,本發(fā)明提供一種磁卡解碼方法,采集的是離散時間的磁卡模擬波形,利用極值法得到原始模擬波形的信息,并采用曲線擬合的方法修正初始數(shù)字波形,從而精確計算峰值,使數(shù)字波形脈寬的計算更準確。如此可以看出,本發(fā)明能夠靈活地選擇將模擬波形轉(zhuǎn)換成數(shù)字波形的方法。且本發(fā)明采用動態(tài)的當(dāng)前基準脈寬作為判別所述數(shù)字波形當(dāng)前脈寬對應(yīng)比特I的半位或比特O的基準,有效地解決了由于硬件設(shè)備的不完善、磁卡移動速度不均勻而導(dǎo)致的讀取數(shù)據(jù)錯誤的概率。此外,由于本發(fā)明是將磁頭接到MCU的差分ADC 上進行采樣的,而差分ADC是MCU自帶的一個模塊,所以在很大程度上解決了硬件成本較高的問題。以上所述僅為本發(fā)明的實施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)變換,或直接或間接運用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護范圍內(nèi)。
權(quán)利要求
1.一種磁卡解碼方法,其特征在于,包括以下步驟51、采用極值法將采樣到的模擬波形轉(zhuǎn)換成初始數(shù)字波形,并采用曲線擬合的方法對所述初始數(shù)字波形的脈寬進行修正,得到修正后數(shù)字波形;52、將磁卡的前導(dǎo)比特O的脈寬作為初始基準脈寬,使用所述初始基準脈寬對修正后數(shù)字波形的第一個脈寬進行判別,并由初始基準脈寬根據(jù)EWMA公式得到第二基準脈寬;以第二基準脈寬為基準對修正后數(shù)字波形的第二個脈寬進行判別,再由第二基準脈寬根據(jù)EWMA公式調(diào)整下一個基準脈寬;以下一個基準脈寬為基準對修正后數(shù)字波形的下一個脈寬進行判別;以及,重復(fù)執(zhí)行調(diào)整基準脈寬及根據(jù)相應(yīng)基準脈寬對修正后數(shù)字波形的脈寬進行判別的過程,直至修正后數(shù)字波形的脈寬全部被判別完;其中,上述判別過程是指以所述基準脈寬為基準,判別修正后數(shù)字波形的相應(yīng)脈寬是對應(yīng)比特I的半位還是比特O ;其中,比特I由兩個連續(xù)脈寬構(gòu)成,比特O由一個脈寬構(gòu)成;53、根據(jù)步驟S2的判別結(jié)果,將修正后數(shù)字波形轉(zhuǎn)換為對應(yīng)的0/1比特序列;54、根據(jù)磁卡標準對所述比特序列解碼。
2.根據(jù)權(quán)利要求I所述的磁卡解碼方法,其特征在于,所述步驟SI是通過將磁頭接到 MCU的差分ADC上進行采樣的。
3.根據(jù)權(quán)利要求I所述的磁卡解碼方法,其特征在于,所述步驟S4之后還包括步驟 S5 :若解碼失敗,則將步驟SI中修正后得到的數(shù)字波形按采樣方向的相反方向取出,并執(zhí)行步驟S2。
4.根據(jù)權(quán)利要求I至3任一項所述的磁卡解碼方法,其特征在于,所述步驟SI之前還包括以下步驟S0、判斷是否開始進行采樣;若否,則繼續(xù)判斷是否開始進行采樣;若是,則進行步驟SI。
5.根據(jù)權(quán)利要求4所述的磁卡解碼方法,其特征在于,當(dāng)判斷開始進行采樣后判斷相鄰兩個采樣點之間的電壓值,并在連續(xù)幾百個采樣點中任意兩個采樣點之間的電壓差值小于ImV時,結(jié)束米樣。
6.根據(jù)權(quán)利要求I所述的磁卡解碼方法,其特征在于,所述步驟SI中采用極值法將采樣到的模擬波形轉(zhuǎn)換成初始數(shù)字波形具體為,將極大值點歸到高電平,從該點開始之后的點都歸到高電平,直到遇到極小值點;將極小值點歸到低電平,從該點開始之后的點都歸到低電平,直到遇到極大值點;得到初始數(shù)字波形。
7.根據(jù)權(quán)利要求I所述的磁卡解碼方法,其特征在于,所述步驟SI中采用曲線擬合的方法對所述初始數(shù)字波形的脈寬進行修正包括以下步驟,51021、計算出曲線多項式極值點的位置χ;51022、根據(jù)χ與采樣點極值點的位置關(guān)系修正初始數(shù)字波形的脈寬。
8.根據(jù)權(quán)利要求I所述的磁卡解碼方法,其特征在于,所述步驟S2中以所述基準脈寬對修正后數(shù)字波形的脈寬進行判別,及步驟S3中將修正后數(shù)字波形轉(zhuǎn)換為對應(yīng)的0/1比特序列,具體包括以下步驟S301、判斷當(dāng)前脈寬與當(dāng)前基準脈寬的比例是否處于[kl,k2]內(nèi);若是,則將當(dāng)前脈寬轉(zhuǎn)換為比特0,并調(diào)整基準脈寬,繼續(xù)進行對下一脈寬的判別;若否,則進行步驟S302 ;S302、判斷當(dāng)前脈寬與當(dāng)前基準脈寬的比例是處于[k3,+m)內(nèi),是處于[k2,k3]內(nèi),還是處于(O, kl]內(nèi);若當(dāng)前脈寬與當(dāng)前基準脈寬的比例處于[k3,+ °o)內(nèi),則放棄當(dāng)前脈寬,并終止此次解碼過程或調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;若當(dāng)前脈寬與當(dāng)前基準脈寬的比例處于[k2,k3]內(nèi),則將當(dāng)前脈寬轉(zhuǎn)換為比特O,并在調(diào)整基準脈寬時增加調(diào)整系數(shù),返回步驟S301,繼續(xù)進行對下一脈寬的判別;若當(dāng)前脈寬與當(dāng)前基準脈寬的比例處于(O,kl]內(nèi),則判斷后一個脈寬與當(dāng)前基準脈寬的比例是否處于(O,kl];若是,則將當(dāng)前脈寬和后一個脈寬轉(zhuǎn)換為比特1,并調(diào)整基準脈寬,返回步驟S301 ;若否,則進行步驟S303 ;S303、判斷后一個脈寬與當(dāng)前基準脈寬的比例是處于[k3,+m)內(nèi),還是處于[kl,k3] 內(nèi);若后一個脈寬與當(dāng)前基準脈寬的比例處于[k3,+ m)內(nèi),則終止此次解碼過程或放棄當(dāng)前脈寬,并調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;若后一個脈寬與當(dāng)前基準脈寬的比例處于[kl,k3]內(nèi),則判斷前一個脈寬與前一個基準脈寬的比例是否處于[kl,k2]內(nèi);若否,則執(zhí)行步驟S306 ;若是,則判斷前一個脈寬是否小于后一個脈寬;若是,則進行步驟S304 ;若否,則進行步驟S305 ;S304、判斷當(dāng)前脈寬與前一個脈寬之和與當(dāng)前基準脈寬的比例是否處于[kl,k2]內(nèi); 若是,則將當(dāng)前脈寬和后一個脈寬轉(zhuǎn)換為比特1,將后一個脈寬轉(zhuǎn)換為比特O,并調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;若否,則將當(dāng)前脈寬轉(zhuǎn)換為比特O,并調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;S305、判斷當(dāng)前脈寬與前一個脈寬之和與當(dāng)前基準脈寬的比例是否處于[kl,k2]內(nèi); 若是,則將當(dāng)前脈寬和前一個脈寬轉(zhuǎn)換為比特1,將后一個脈寬轉(zhuǎn)換為比特O,并調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;若否,則將當(dāng)前脈寬轉(zhuǎn)換為比特O,并調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;S306、判斷前第二個脈寬與前一個基準脈寬的比例是否處于(0,kl]內(nèi);若是,則進行步驟S307 ;若否,則將當(dāng)前脈寬轉(zhuǎn)換為比特O,并調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;S307、判斷當(dāng)前脈寬、前一個脈寬和前第二個脈寬的脈寬之和,與前一個基準脈寬的比例是否處于[kl,k2]內(nèi);若是,則將后一個脈寬和后第二個脈寬均轉(zhuǎn)換為比特O,并調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;若否,則將當(dāng)前脈寬轉(zhuǎn)換為比特O,并調(diào)整基準脈寬,返回步驟S301,繼續(xù)進行對下一脈寬的判別;其中,0〈kl〈l〈k2〈k3。
全文摘要
本發(fā)明公開一種磁卡解碼方法,包括以下步驟S1、采用極值法將采樣到的模擬波形轉(zhuǎn)換成初始數(shù)字波形,并采用曲線擬合的方法對所述初始數(shù)字波形的脈寬進行修正;S2、將磁卡的前導(dǎo)比特0的脈寬作為初始基準脈寬,使用所述初始基準脈寬對修正后數(shù)字波形的第一個脈寬進行判別,并由初始基準脈寬根據(jù)EWMA公式得到第二基準脈寬,以第二基準脈寬為基準對修正后數(shù)字波形的第二個脈寬進行判別;重復(fù)執(zhí)行調(diào)整基準脈寬及根據(jù)相應(yīng)基準脈寬對修正后數(shù)字波形的脈寬進行判別的過程,直至修正后數(shù)字波形的脈寬全部被判別完;S3、根據(jù)步驟S2的判別結(jié)果,將修正后數(shù)字波形轉(zhuǎn)換為對應(yīng)的0/1比特序列;S4、根據(jù)磁卡標準對所述比特序列解碼。
文檔編號G06K7/08GK102722690SQ20121016769
公開日2012年10月10日 申請日期2012年5月25日 優(yōu)先權(quán)日2012年5月25日
發(fā)明者劉文燦 申請人:福建聯(lián)迪商用設(shè)備有限公司