Code Monkey home page Code Monkey logo

agora's People

Contributors

anujkaliaiitd avatar arjunvb avatar asedlmayr avatar cancarlak avatar chaeyoung-lee avatar danieldegrasse avatar forrestzhong avatar gavindeed avatar jianding17 avatar kevinaboos avatar mindy-min-zhang avatar obejarano avatar ox5bc avatar ramla-i avatar rdoosty avatar s-noghabi avatar tingjunchen avatar unkadoug avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

agora's Issues

Use C++ header files instead of C

The most problematic one is the usage of #include <complex.h>; we need to use include <complex> instead.
The reason for this is that the complex.h C-style header file performs a global #define I ... which breaks the compilation multiple other libraries, primarily some Boost libraries.

Other C-style header includes should be transformed to use the C++-style headers too, though those are lower priority.

change argos to sdr

For generality, change file and function names including argos to sdr. Further, unify usrp and iris functions.

Uplink symbol placement in frame can cause validation errors

Test case with ./test/test_agora/test_agora.sh
Common config
{
"ofdm_ca_num" : 2048,
"ofdm_data_num" : 1200,
"worker_thread_num" : 1,
"socket_thread_num" : 1,
"demul_block_size" : 40,
"antenna_num" : 8,
"ue_num" : 8,
"modulation" : "64QAM",
"Zc" : 104,
"client_ul_pilot_syms" : 0,
"frames_to_test" : 1,
"noise_level" : 0.01
}

PASS
"frames" : [
"BPPPPPPPPUGGG"
],

FAIL
"frames" : [
"BPPPPPPPPGUGG"
],

Remove USE_LDPC flag

LDPC should always be enabled. This will avoid the complexity of maintaining two code paths.

CI prevent concurrent builds

The CI server cannot support multiple concurrent Agora tests. Add a feature to prevent concurrent builds/tests.

Clean up test files

Files under test/ and microbench/ need to be better organized. My suggestion is that files under test folder should be used for correctness test. Performance test files can be moved to microbench folder.

[README] Missing Dependencies

The install instructions are missing the following dependencies:

  • intel-mkl : Used by armadillo
  • libfftw3-dev : Used by muFFT

Missing iris_serials5.txt and symbol size mismatch

When I run ./millipede on my branch (akalia, which has some compilation fixes compared to the develop branch), I run into the following error:

$ ./millipede
Unable to open device file /home/ankalia/Millipede/data/iris_serials5.txt
modulation: 16QAM
Encoder: Zc: 32, code block per symbol: 1, code block len: 704, encoded block len: 2112, decoder iterations: 5
IFFT output is normalized with 354.000000
generated pilot symbol size does not match configured symbol size!

Thanks for any help!

Failed test_millipede.sh

I ran test_millipede.sh 50 times (on the current master branch, commit c14e775) and it seems to fail a few times. From the output of the tests:

$ cat out | grep -i fail
Failed uplink test! Error rate: 48291/595200
Failed downlink test! Error rate: 58/72
Failed uplink test! Error rate: 179344/595200
Failed downlink test! Error rate: 11/72
Failed uplink test! Error rate: 128485/595200
Failed downlink test! Error rate: 72/72

I am running on a low core count (8 core) machine, in case processor speed is a possible factor.

Set up CI

This version does not include the emulator test.

Potential memory overrun in test_ldpc

Zc = 112, {encoding, decoding}: {58.45, 24.36} Mbps, {42.15, 101.16} us per code block. Bit errors = 0, BER = 0.000
Zc = 120, {encoding, decoding}: {61.33, 21.26} Mbps, {43.04, 124.18} us per code block. Bit errors = 0, BER = 0.000

==50457==ERROR: AddressSanitizer: unknown-crash on address 0x7ffceebe3e6f at pc 0x00000061ae9d bp 0x7ffceebe3b70 sp 0x7ffceebe3b60
READ of size 32 at 0x7ffceebe3e6f thread T0
#0 0x61ae9c in _mm256_loadu_si256(long long __vector(4) const*) /usr/lib/gcc/x86_64-linux-gnu/9/include/avxintrin.h:922
#1 0x61ae9c in avx2enc::cycle_bit_shift_72to128(long long __vector(4), short, short) /home/rice/Documents/Development/Repos/agora_updown/src/encoder/cyclic_shift.cpp:69
#2 0x61cc0d in avx2enc::ldpc_encoder_bg1(signed char*, signed char*, short const*, short const*, short const*, short, unsigned char) /home/rice/Documents/Development/Repos/agora_updown/src/encoder/encoder.cpp:32
#3 0x62125a in avx2enc::bblib_ldpc_encoder_5gnr(bblib_ldpc_encoder_5gnr_request*, bblib_ldpc_encoder_5gnr_response*) /home/rice/Documents/Development/Repos/agora_updown/src/encoder/encoder.cpp:286
#4 0x482f33 in ldpc_encode_helper /home/rice/Documents/Development/Repos/agora_updown/src/common/utils_ldpc.hpp:226
#5 0x48478b in main /home/rice/Documents/Development/Repos/agora_updown/test/compute_kernels/ldpc/test_ldpc.cpp:75
#6 0x7f962e8cb0b2 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x270b2)
#7 0x480e4d in _start (/home/rice/Documents/Development/Repos/agora_updown/build/test_ldpc+0x480e4d)

Address 0x7ffceebe3e6f is located in stack of thread T0 at offset 399 in frame
#0 0x61a65f in avx2enc::cycle_bit_shift_72to128(long long __vector(4), short, short) /home/rice/Documents/Development/Repos/agora_updown/src/encoder/cyclic_shift.cpp:37

This frame has 3 object(s):
[32, 64) 'x0' (line 58)
[96, 128) 'x2' (line 58)
[160, 416) 'shuffle_table' (line 39) <== Memory access at offset 399 partially overflows this variable
HINT: this may be a false positive if your program uses some custom stack unwind mechanism, swapcontext or vfork
(longjmp and C++ exceptions are supported)
SUMMARY: AddressSanitizer: unknown-crash /usr/lib/gcc/x86_64-linux-gnu/9/include/avxintrin.h:922 in _mm256_loadu_si256(long long __vector(4) const*)
Shadow bytes around the buggy address:
0x10001dd74770: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x10001dd74780: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x10001dd74790: 00 00 00 00 00 00 00 00 00 00 00 00 f1 f1 f1 f1
0x10001dd747a0: 00 00 00 00 f2 f2 f2 f2 00 00 00 00 f2 f2 f2 f2
0x10001dd747b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x10001dd747c0: 00 00 00 00 00 00 00 00 00 00 00 00 00[00]00 00
0x10001dd747d0: f3 f3 f3 f3 f3 f3 f3 f3 00 00 00 00 00 00 00 00
0x10001dd747e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x10001dd747f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x10001dd74800: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x10001dd74810: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
Shadow gap: cc
==50457==ABORTING

Remove `demod_hard_buffer` and its usage

Now that LDPC decoding is always enabled, there is no need for this.

According to @jianding17 :

We actually don’t need to save demul data now since decoding is the last step and we only check the correctness of data in the last step in the end-to-end test

This is an easy change, but requires that someone familiar with the Python GUI environment make sure correctness is maintained there, since demod_hard_buffer is only used from within the Python environment.

Note that the following functions should also be removed too:

  • Millipede::save_demul_data_to_file

  • Millipede_getDemulData

Validate the mac code with downlink

Previously tested uplink when compiling with the ENABLE_MAC=true option. Test / validate / implement mac code with downlink (both bs and user side).

Support dual-channel downlink transmission

We currently support downlink transmission from one channel on the SDRs. Support for dual-channel or four-channels (for USRP) needs to be added. In such case data of all channels are transmitted at once using the same write function.

Use only frame-wide indices for symbols

Currently we have two types of indexes for a symbol. For example, an uplink symbol has frame-wide index, and an index among the uplink symbols in the frame. Using one index (the frame-wide index) everywhere will avoid confusion regarding which index is being used.

Mac Data Sender and Receiver

Add basic functionality to send data from a file from the UE (uplink) and written to a file on the BS (uplink).

macuser
macbs

Build fails when DPDK is enabled.

Trying to compile Agora with DPDK enabled (-DUSE_DPDK=1) fails:

home/marinosi/git/Agora/src/agora/txrx/txrx_DPDK.cpp: In member function ‘int PacketTXRX::dequeue_send(int)’:
/home/marinosi/git/Agora/src/agora/txrx/txrx_DPDK.cpp:216:32: error: ‘data_symbol_idx’ was not declared in this scope
     new (pkt) Packet(frame_id, data_symbol_idx, 0 /* cell_id */, ant_id);
                                ^~~~~~~~~~~~~~~
/home/marinosi/git/Agora/src/agora/txrx/txrx_DPDK.cpp:216:32: note: suggested alternative: ‘data_symbol_idx_dl’
     new (pkt) Packet(frame_id, data_symbol_idx, 0 /* cell_id */, ant_id);
                                ^~~~~~~~~~~~~~~
                                data_symbol_idx_dl

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.