diff -r 345b1ca54e88 -r 039a3e647356 kerneltest/e32utils/nistsecurerng/src/approximateentropy.cpp --- a/kerneltest/e32utils/nistsecurerng/src/approximateentropy.cpp Wed Sep 15 13:42:27 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,111 +0,0 @@ -/* -* Portions Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -* All rights reserved. -* This component and the accompanying materials are made available -* under the terms of "Eclipse Public License v1.0" -* which accompanies this distribution, and is available -* at the URL "http://www.eclipse.org/legal/epl-v10.html". -* -* Initial Contributors: -* Nokia Corporation - initial contribution. -* -* Contributors: -* -* Description: -* The original NIST Statistical Test Suite code is placed in public domain. -* (http://csrc.nist.gov/groups/ST/toolkit/rng/documentation_software.html) -* -* This software was developed at the National Institute of Standards and Technology by -* employees of the Federal Government in the course of their official duties. Pursuant -* to title 17 Section 105 of the United States Code this software is not subject to -* copyright protection and is in the public domain. The NIST Statistical Test Suite is -* an experimental system. NIST assumes no responsibility whatsoever for its use by other -* parties, and makes no guarantees, expressed or implied, about its quality, reliability, -* or any other characteristic. We would appreciate acknowledgment if the software is used. -*/ - -#include "openc.h" -#include "../include/externs.h" -#include "../include/utilities.h" -#include "../include/cephes.h" - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - A P P R O X I M A T E E N T R O P Y T E S T - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -void -ApproximateEntropy(int m, int n) -{ - int i, j, k, r, blockSize, seqLength, powLen, index; - double sum, numOfBlocks, ApEn[2], apen, chi_squared, p_value; - unsigned int *P; - - fprintf(stats[TEST_APEN], "\t\t\tAPPROXIMATE ENTROPY TEST\n"); - fprintf(stats[TEST_APEN], "\t\t--------------------------------------------\n"); - fprintf(stats[TEST_APEN], "\t\tCOMPUTATIONAL INFORMATION:\n"); - fprintf(stats[TEST_APEN], "\t\t--------------------------------------------\n"); - fprintf(stats[TEST_APEN], "\t\t(a) m (block length) = %d\n", m); - - seqLength = n; - r = 0; - - for ( blockSize=m; blockSize<=m+1; blockSize++ ) { - if ( blockSize == 0 ) { - ApEn[0] = 0.00; - r++; - } - else { - numOfBlocks = (double)seqLength; - powLen = (int)pow(2, blockSize+1)-1; - if ( (P = (unsigned int*)calloc(powLen,sizeof(unsigned int)))== NULL ) { - fprintf(stats[TEST_APEN], "ApEn: Insufficient memory available.\n"); - return; - } - for ( i=1; i 0 ) - sum += P[index]*log(P[index]/numOfBlocks); - index++; - } - sum /= numOfBlocks; - ApEn[r] = sum; - r++; - free(P); - } - } - apen = ApEn[0] - ApEn[1]; - - chi_squared = 2.0*seqLength*(log(2) - apen); - p_value = cephes_igamc(pow(2, m-1), chi_squared/2.0); - - fprintf(stats[TEST_APEN], "\t\t(b) n (sequence length) = %d\n", seqLength); - fprintf(stats[TEST_APEN], "\t\t(c) Chi^2 = %f\n", chi_squared); - fprintf(stats[TEST_APEN], "\t\t(d) Phi(m) = %f\n", ApEn[0]); - fprintf(stats[TEST_APEN], "\t\t(e) Phi(m+1) = %f\n", ApEn[1]); - fprintf(stats[TEST_APEN], "\t\t(f) ApEn = %f\n", apen); - fprintf(stats[TEST_APEN], "\t\t(g) Log(2) = %f\n", log(2.0)); - fprintf(stats[TEST_APEN], "\t\t--------------------------------------------\n"); - - if ( m > (int)(log(seqLength)/log(2)-5) ) { - fprintf(stats[TEST_APEN], "\t\tNote: The blockSize = %d exceeds recommended value of %d\n", m, - MAX(1, (int)(log(seqLength)/log(2)-5))); - fprintf(stats[TEST_APEN], "\t\tResults are inaccurate!\n"); - fprintf(stats[TEST_APEN], "\t\t--------------------------------------------\n"); - } - - fprintf(stats[TEST_APEN], "%s\t\tp_value = %f\n\n", p_value < ALPHA ? "FAILURE" : "SUCCESS", p_value); - fprintf(results[TEST_APEN], "%f\n", p_value); -}