From 1e75346751d44d5c803ea113603cf12b61ef0ed1 Mon Sep 17 00:00:00 2001
From: Pepping <pepping>
Date: Thu, 27 Aug 2015 11:47:30 +0000
Subject: [PATCH] Fixed for statistics read-out

---
 .../tc_apertif_unb1_correlator_filter.py      | 343 +++++++-----------
 1 file changed, 125 insertions(+), 218 deletions(-)

diff --git a/applications/apertif/designs/apertif_unb1_correlator/revisions/apertif_unb1_correlator_filter/tc_apertif_unb1_correlator_filter.py b/applications/apertif/designs/apertif_unb1_correlator/revisions/apertif_unb1_correlator_filter/tc_apertif_unb1_correlator_filter.py
index 784322bcc8..506a21f944 100644
--- a/applications/apertif/designs/apertif_unb1_correlator/revisions/apertif_unb1_correlator_filter/tc_apertif_unb1_correlator_filter.py
+++ b/applications/apertif/designs/apertif_unb1_correlator/revisions/apertif_unb1_correlator_filter/tc_apertif_unb1_correlator_filter.py
@@ -1,240 +1,147 @@
-#! /usr/bin/env python
-###############################################################################
-#
-# Copyright (C) 2012
-# ASTRON (Netherlands Institute for Radio Astronomy) <http://www.astron.nl/>
-# P.O.Box 2, 7990 AA Dwingeloo, The Netherlands
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-#
-###############################################################################
-
-"""Test case for the apertif_unb1_correlator_mesh_distr_ref design.
-
-   Description:
-
-    
-   Usage:
-
-   > python tc_apertif_unb1_correlator_mesh_distr_ref.py --gn 0:7 --sim 
-
-"""
-
-###############################################################################
-# System imports
 import test_case
 import node_io
 import unb_apertif as apr
-import pi_diag_block_gen
-import pi_diag_data_buffer
+import pi_st_sst
+import pi_diag_wg_wideband
+import pi_bsn_source
 import pi_bsn_monitor
-import pi_ppsh  
-import pi_st_sst  
-import dsp_test
-
-import sys, os
-import subprocess  
-import time
+import pi_bsn_scheduler
+import pi_fil_ppf_w
+import pi_ss_ss_wide
+import pi_bf_bf
 import pylab as pl
 import numpy as np
 import scipy as sp
-import random
 from tools import *
-from common import *  
-import mem_init_file
+from common import *
+from common_dsp import *
+
 
 ###############################################################################
+# Setup
+
+c_nof_regs_per_stat = 2           # The number of registers used for one statistic value
+
+c_nof_streams       = 1
+c_fft_size          = 64
+c_nof_chan          = 2
+
 
 # Create a test case object
 tc = test_case.Testcase('TB - ', '')
-
-# Constants/Generics that are shared between VHDL and Python
-# Name                   Value   Default   Description
-# START_VHDL_GENERICS
-g_nof_input_streams = 12       # 16 
-g_blocks_per_sync   = 16 #32   # 781250
-
-# Define settings for the block generator
-c_bg_nof_streams          = g_nof_input_streams 
-c_bg_ram_size             = 128
-c_db_nof_streams          = g_nof_input_streams
-c_db_ram_size             = 8
-c_samples_per_packet      = 128
-c_gapsize                 = 64
-c_mem_low_addr            = 0
-c_mem_high_addr           = c_samples_per_packet-1
-c_bsn_init                = 42
-c_in_dat_w                = 8
-c_nof_read_back_samples   = 1
-c_nof_10GbE_streams       = 3
-c_nof_lanes               = 4      
-c_nof_regs_per_stat       = 2           # The number of registers used for one statistic value
-
-c_write_bg_data            = False 
-c_write_bg_data_to_file    = False  
-                             
-tc.append_log(3, '>>>')      
-tc.append_log(1, '>>> Title : Test script for apertif_unb1_correlator_mesh_distr_ref' )
+tc.set_result('PASSED')
+tc.append_log(3, '>>>')
+tc.append_log(1, '>>> Title : Test bench for bn_filterbank design')
 tc.append_log(3, '>>>')
 tc.append_log(3, '')
-tc.set_result('PASSED')
+
 
 # Create access object for nodes
 io = node_io.NodeIO(tc.nodeImages, tc.base_ip)
 
-# Create block generator instance
-bg = pi_diag_block_gen.PiDiagBlockGen(tc, io, g_nof_input_streams, c_bg_ram_size, instanceName='INPUT')
-
-# Create databuffer instances
-db_proc = pi_diag_data_buffer.PiDiagDataBuffer(tc, io, instanceName = 'PROC', nofStreams=c_db_nof_streams, ramSizePerStream=c_db_ram_size)
-
-# Create bsn-monitor instance
-bsn = pi_bsn_monitor.PiBsnMonitor(tc, io, nofStreams=2)
-
-# - Create statistics instance                                                                                
-st = pi_st_sst.PiStSst(tc, io, g_nof_input_streams, c_samples_per_packet, c_nof_regs_per_stat)
-
-# Create dsp_test instance for helpful methods
-dsp_test_bg = dsp_test.DspTest(inDatW=c_in_dat_w)
-
-pps = pi_ppsh.PiPpsh(tc, io, nodeNr=tc.nodeFnNrs)
-
-if __name__ == "__main__":  
-     
-    ################################################################################
-    ##
-    ## Initialize the blockgenerators
-    ##
-    ################################################################################
-    # - Write settings to the block generator 
-    tc.append_log(3, '>>>')
-    tc.append_log(3, '>>> Write settings to the block generator')
-    tc.append_log(3, '>>>')
-
-    bg.write_block_gen_settings(c_samples_per_packet, g_blocks_per_sync, c_gapsize, c_mem_low_addr, c_mem_high_addr, c_bsn_init)
-    
-    # - Create a list with the input data and write it to the RAMs of the block generator
-    tc.append_log(3, '>>>')
-    tc.append_log(3, '>>> Write data to the waveform RAM of all channels')
-    tc.append_log(3, '>>>')
-    inputData = []
-    
-    dataList=[]
-    for h in range(tc.nofNodes):
-        nodeData = []
-        for i in xrange(c_nof_10GbE_streams):   #3
-            for j in xrange(c_nof_lanes):       #4
-                data = []
-                for k in xrange(0, c_samples_per_packet):
-                    real = (c_nof_10GbE_streams*h + i) & (2**c_in_dat_w-1)   # Telescope-stream number [23:0] in real part. Used as source-identifier. 
-                    imag = (2*j+ (k % 2)) & (2**c_in_dat_w-1)                # Alternatng destination number in imag part: (0,1) (2,3) 4,5) (6,7)
-                    data.append((imag << c_in_dat_w) + real)   
-                nodeData.append(data)
-        dataList.append(nodeData)
-    for i in dataList:
-        print i
-    inputData = []
-    in_h = 0
-    for h in tc.nodeNrs:   
-        for i in xrange(g_nof_input_streams):
-            if c_write_bg_data == True:      
-                bg.write_waveform_ram(dataList[in_h][i], i, [h])
-            if c_write_bg_data_to_file == True:                                                                   
-                filename = "../../src/hex/node" + str(h) + "/bg_in_data_mesh_distr_" + str(i) + ".hex"
-                mem_init_file.list_to_hex(list_in=dataList[in_h][i], filename=filename, mem_width=c_nof_complex*c_in_dat_w, mem_depth=2**(ceil_log2(c_bg_ram_size)))
-            dataListComplex = bg.convert_concatenated_to_complex(dataList[in_h][i], c_in_dat_w)
-            inputData.append(dataListComplex)  
-        in_h = in_h+1
-    
-    # - Enable the block generator
-    tc.append_log(3, '>>>')
-    tc.append_log(3, '>>> Start the block generator')
-    tc.append_log(3, '>>>')
-    tc.append_log(3, '')
-    
-    bg.write_enable_pps()
-    
-#    bsn.read_bsn_monitor(0)
-#    bsn.read_bsn_monitor(1)
-   
-    do_until_ge(db_proc.read_nof_words, ms_retry=3000, val=c_db_ram_size, s_timeout=3600)
-    
-#    bsn.read_bsn_monitor(0)
-#    bsn.read_bsn_monitor(1)
-    
-    ###############################################################################
-    #
-    # Read data from data buffer
-    #
-    ###############################################################################
-    db_out = []
-    for i in range(c_bg_nof_streams): 
-        db_out.append(flatten(db_proc.read_data_buffer(streamNr=i, n=c_nof_read_back_samples, radix='uns', width=c_nof_complex*c_in_dat_w, nofColumns=8)))
-
-    ###############################################################################
-    #
-    # Verify data
-    #
-    ###############################################################################
-    tc.append_log(0, 'The Real output ')
-    for i in db_out: 
-        db_re = []  
-        for j in i:                        
-            real = j & 0xFF
-            db_re.append(real)
-        tc.append_log(0, '%s' % str(db_re)) 
-
-    tc.append_log(3, '')
-    tc.append_log(0, 'The Imaginary output ')
-    for i in db_out:                                             
-        db_im = []  
-        for j in i:                        
-            imag = (j & 0xFF00) >> c_in_dat_w
-            db_im.append(imag)
-        tc.append_log(0, '%s' % str(db_im))       
-        
-        
-#        tc.append_log(0, '%s' % str((i & 0xFF00) >> c_in_dat_w)) 
-
-#    bsn.read_bsn_monitor(0)
-#    bsn.read_bsn_monitor(1)
-
-
-  #  for i in range(c_bg_nof_streams): 
-  #      for j in range(tc.nofNodes): 
-  #          for k in range(c_nof_read_back_samples):    
-  #              if db_out_re[i][j*c_nof_read_back_samples + k] != i:
-  #                  tc.append_log(1, 'Error in real part. Expected %d. Received %d', (i,db_out_re[i][j*c_nof_read_back_samples + k]))      
-  #                  tc.set_result('FAILED')
-  #              if j < 4:
-  #                  if db_out_im[i][j*c_nof_read_back_samples + k] != j*2:
-  #                      tc.append_log(1, 'Error in imag part. Expected %d. Received %d', (j*2,db_out_im[i][j*c_nof_read_back_samples + k]))      
-  #                      tc.set_result('FAILED')
-  #              else:
-  #                  if db_out_im[i][j*c_nof_read_back_samples + k] != j*2+1:
-  #                      tc.append_log(1, 'Error in imag part. Expected %d. Received %d', (j*2+1,db_out_im[i][j*c_nof_read_back_samples + k]))          
-  #                      tc.set_result('FAILED')
-
-    ###############################################################################
-    # End
-    tc.set_section_id('')
-    tc.append_log(3, '')
-    tc.append_log(3, '>>>')
-    tc.append_log(0, '>>> Test bench result: %s' % tc.get_result())
-    tc.append_log(3, '>>>')
-    
-    sys.exit(tc.get_result())
 
+#def __init__(self, tc, io, nofStats=256, statDataWidth=56, nofRegsPerStat=2, xstEnable=False, instanceNr = 0, nodeNr=None):
+
+# - Create statistics instance
+cst = []
+for i in xrange(c_nof_streams):                                                                                       
+    cst.append( pi_st_sst.PiStSst(tc, io, c_fft_size*c_nof_chan, 56, c_nof_regs_per_stat, False, i, tc.nodeBnNrs))
+
+# Create bsn-monitor instance                          
+bsn_input = pi_bsn_monitor.PiBsnMonitor(tc, io, instanceName='INPUT', nofStreams=3)
+bsn_proc  = pi_bsn_monitor.PiBsnMonitor(tc, io, instanceName='PROC', nofStreams=4)
+
+# - Create filter instance
+#fil = pi_fil_ppf_w.PiFilPpfw(tc, io, apr.c_nof_input_signals_per_bn, c_nof_taps, c_fft_size, apr.c_wb_factor)
+
+# - Read statistics
+tc.append_log(3, '>>>')
+tc.append_log(3, '>>> Read BSN monitors ')
+tc.append_log(3, '>>>')
+tc.append_log(3, '')
+
+#bsn_input.read_bsn_monitor(0)
+#bsn_input.read_bsn_monitor(1)
+#bsn_input.read_bsn_monitor(2)
+#
+#bsn_proc.read_bsn_monitor(0)
+#bsn_proc.read_bsn_monitor(1)
+#bsn_proc.read_bsn_monitor(2)
+#bsn_proc.read_bsn_monitor(3)
+
+# - Read statistics
+tc.append_log(3, '>>>')
+tc.append_log(3, '>>> Read Statistics for first instance')
+tc.append_log(3, '>>>')
+tc.append_log(3, '')
+
+data = []
+for k in range(c_nof_streams):
+    data.append(cst[k].read_stats(return_complex=False));
+
+print data    
+tc.append_log(3, '')
 
 
+spectrum1 = []
+spectrum2 = []
+
+for l in range(c_fft_size):
+    spectrum1.append(float(data[0][0][2*l]+1));
+    spectrum2.append(float(data[0][0][2*l+1]+1));
+
+#spectrum3 = []
+#spectrum4 = []
+#for k in range(apr.c_wb_factor):
+#    for l in range(c_fft_size/8):
+#        spectrum3.append(float(data[4+k][0][2*l]+1));
+#        spectrum4.append(float(data[4+k][0][2*l+1]+1));
+
+print len(spectrum1)
+print spectrum1
+
+spectrum1_reordered = fft_reorder(spectrum1)
+spectrum2_reordered = fft_reorder(spectrum2)
+print spectrum1_reordered
+
+spectrum_log1 = []
+spectrum_log2 = []
+#spectrum_log3 = []
+#spectrum_log4 = []
+
+for k in range(c_fft_size):
+  spectrum_log1.append(10*math.log10(spectrum1_reordered[k]))
+  spectrum_log2.append(10*math.log10(spectrum2_reordered[k]))
+##  spectrum_log3.append(10*math.log10(spectrum3[k]))
+##  spectrum_log4.append(10*math.log10(spectrum4[k]))
+
+f_as = []
+for k in range(c_fft_size):
+#    f_as.append(k*0.781250/(c_fft_size))
+    f_as.append(k)
+
+pl.figure(1)
+pl.plot(f_as, spectrum_log1)
+pl.grid(True)
+pl.xlabel('Channel index')
+pl.ylabel('channel power')
+
+pl.figure(2)
+pl.plot(f_as, spectrum_log2)
+pl.grid(True)
+pl.xlabel('Channel index')
+pl.ylabel('channel power')
+
+##pl.figure(3)
+##pl.plot(f_as, spectrum_log3)
+##pl.grid(True)
+##pl.xlabel('frequency in Mhz')
+##pl.ylabel('statistics')
+##
+##pl.figure(4)
+##pl.plot(f_as, spectrum_log4)
+##pl.grid(True)
+##pl.xlabel('frequency in Mhz')
+##pl.ylabel('statistics')
+#
+pl.show()
-- 
GitLab