def test_beta(): N = 30 dv = 3 dc = 6 num_codewords = 10 H = get_H(N, dv, dc) codewords = get_codewords(H, num_codewords) p = 0.25 max_iter = 10 trials = 100 print 'GOT ALL CODEWORDS' step = 0.1 b = np.arange(0, 0.5, step) results = set() for beta in b: success_rate = [0] * num_codewords print beta, for i, word in enumerate(codewords): for _ in xrange(trials): codeword = word codeword = convert_to_posneg(codeword) codeword = simulateBEC(p, codeword) f = FactorGraph(H) codeword = f.decode_BEC_memoryless(codeword, beta, max_iter) codeword = convert_to_zeroone(codeword) if tuple(codeword) == word: success_rate[i] += 1 / float(trials) stat = np.average(success_rate) print stat results.add(tuple([beta, stat])) print results for point in results: plt.plot(point[0], point[1], 'ro') plt.show()
def test_N(): use_sql = False if (use_sql): conn = sqlite3.connect('blocklength.db') c = conn.cursor() c.execute('''CREATE TABLE points (N integer, alpha real, beta real, perror real, sd real)''') dv = 3 dc = 6 alpha = 0.25 beta = 0.1 START = 450 END = 450 STEP = START REPEAT = 10 TRIALS = 15 for N in xrange(START, END + STEP, STEP): if (use_sql): conn.commit() print '***', N, '***' H = get_H(N, dv, dc) # print 'H DONE' word = [0] * N max_iter = N / 4 failure_rate = [0] * TRIALS noiseless_failure_rate = [0] * TRIALS for i in xrange(TRIALS): for _ in xrange(REPEAT): # print i codeword = word codeword = convert_to_posneg(codeword) codeword = simulateBEC(alpha, codeword) f = FactorGraph(H) codeword = f.decode_BEC_memory(codeword, beta, max_iter) codeword = convert_to_zeroone(codeword) if codeword != word: failure_rate[i] += 1.0 / REPEAT # print 'SD', np.std(failure_rate) if N == START: plt.errorbar(N, np.average(failure_rate), np.std(failure_rate), linestyle='None', marker='o', color='red', label='beta = 0.1') else: plt.errorbar(N, np.average(failure_rate), np.std(failure_rate), linestyle='None', marker='o', color='red') if (use_sql): c.execute('INSERT INTO points VALUES (?,?,?,?,?)', (N, alpha, beta, np.average(failure_rate), np.std(failure_rate))) ''' for i in xrange(TRIALS): for _ in xrange(REPEAT): # print i codeword = word codeword = convert_to_posneg(codeword) codeword = simulateBEC(alpha, codeword) f = FactorGraph(H) codeword = f.decode_BEC_memoryless(codeword, 0, max_iter) codeword = convert_to_zeroone(codeword) if codeword != word: noiseless_failure_rate[i] += 1.0 / REPEAT if N == START: plt.errorbar(N, np.average(noiseless_failure_rate), np.std(noiseless_failure_rate), linestyle='None', marker='o', color='blue', label='beta = 0') else: plt.errorbar(N, np.average(noiseless_failure_rate), np.std(noiseless_failure_rate), linestyle='None', marker='o', color='blue') if(use_sql): c.execute('INSERT INTO points VALUES (?,?,?,?,?)', (N, alpha, 0, np.average(noiseless_failure_rate), np.std(noiseless_failure_rate))) #plt.show() ''' #for point in noisy_results: # plt.plot(point[0], point[1], 'ro') #for point in noiseless_results: # plt.plot(point[0], point[1], 'bo') plt.axis((0, N + STEP, -0.05, 0.5)) plt.xlabel('Block Length') plt.ylabel('Probability of Error') plt.legend(loc='upper right') plt.suptitle('Block Length vs. Probability of Error for alpha = 0.25') plt.xticks(np.arange(0, END + STEP, STEP)) plt.yticks(np.arange(0, 0.5 + 0.05, 0.05)) if (use_sql): conn.commit() print 'DONE' plt.show()