1. 程式人生 > >NIST測試結果分析

NIST測試結果分析

最近學習需要做了一些關於NIST的工作,便於學習交流,將一些對結果分析的過程做一些總結。

我用的NIST版本(點選開啟連結

前序的如何模擬的過程就不講了,很多部落格又提到,而且NIST的 user guider (點選開啟連結)講得很清楚(下圖就是文件裡的例子)。


以上只是模擬的過程,接下來進入正題。

一.結果檔案都在哪。

二.怎麼樣才有正確的結果。

三.這些資料之間是什麼關係。

一.結果檔案在什麼地方

模擬結束後會在experiment這個資料夾裡面有關於每一項測試的一個單獨的資料夾和finalanalysisreport這個檔案(後者是講所有的資料報告整合在一起的一個相對簡介的報告檔案)


二.怎麼樣才有正確的結果

    當然很有可能你開啟finalanalysisreport.txt這個檔案的時候是這樣的。


根據我的經驗,這是兩個原因導致的。1.沒有足夠多的資料量。2.在執行NIST的時候的how many streanms後面的提示輸入的資料不應該是1,感覺資料量足夠多的話,保證這個數大於10比較靠譜。

如果你的資料量實在不夠,就只能修改一些引數了!比如我就是這樣,

我只有10000個數據,這樣我雖然可以在finalanalysisreport.txt裡面得到具體的p-value值,但是我全測所有測試項時,在這個檔案裡面並沒有serial和approxiamteEntropy的資料,這我就納悶了!最後在experiment這個資料夾裡找到serial和approxiamteEntropy的單獨的資料報告檔案,看了裡面的state這個檔案,才知道,也是資料量不夠的問題,當然只是針對當前的模擬引數而言的(我用的預設的模擬引數)。

於是我就修改了模擬引數。很幸運,得到了資料結果(下圖以approxiamteEntropy的修改為例)。


三.finalanalysisreport.txt這個檔案裡面的資料都是什麼關係。


以上圖為例進行說明。

這裡的資料組為10(也就是how many streams後我輸入的是10),這樣由於P-value的取值區間是0-1的,於是將這個區間等分成10個區間,在模擬的時候會得到10個P-value值,所以C1-C10的數值就是這10個P-value落在相應區間的數量(可以在每一個測試對應的資料夾裡面找到這些P-value值進行驗證)。

那finalanalysisreport.txt的P-value和各測試項報告檔案裡的10個p-value有什麼關係了!

其實finalanalysisreport.txt的P-value只是衡量這10個p-value分佈均勻性的一種指標而已,是利用卡方分佈進行統計的!


當然,我雖然知道了這些,但是我資料量不夠,在finalanalysisreport.txt裡面還是沒有serial和approximateEntropy的結果,於是我就只能自己手算了。

找到serial和approximateEntropy在experimens資料夾裡的報告檔案,裡面的result的資料就是我需要的資料(當然你得先保證這些資料是有效的,看state裡面是否通過測試,通過了說明資料有效),接下來就是根據上圖的公式進行手算了!

算出X^2這個值不難,根據資料將分佈表寫出來,直接就可以計算了!問題是igamc這個函式,就沒有辦法了!於是我利用了matlab計算,matlab裡面的這個函式是gammainc(x,a),也就是不完全gamma函式。雖然可以得到結果,但是我利用測得的frequence的P-value(finalanalysisreport.txt裡的值)利用這個公式在matlab裡進行驗證,結果並不是完全相同。

於是我只能利用最後一招了!

得出serial和approximateEntropy的P-value值分佈後,直接在finalanalysisreport.txt裡面找和這兩個有相同分佈的資料項,這樣兩者的P-valueT肯定是相同的。從X^2的計算來看,這種分佈相同只要具有相同的比重量就可以,沒有必要C1-C10的分佈比重完全一樣。看倒數第二圖裡面的blockfrequence和第一個cumulativesums,他們的P-valueT是相同,但是再看他們的分佈,只是都是三個2,四個1,和三個0,而已。

終於寫完了!希望對各位有所幫助,其實如果你的資料量夠多,有幾十萬個那麼,其實就簡單了很多,省去了很多沒有必要的麻煩,我剛剛開始就是很納悶為什麼會得不到所有的資料項的結果報告,都是資料量的問題!還有就是user guider真的很有必要好好看一下!