agora-wireless / agora Goto Github PK
View Code? Open in Web Editor NEWLicense: Other
License: Other
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.
Update unit tests in Jenkinsfile
The mac packet delivered to the UE is not the same as what is decoded at the base station.
For generality, change file and function names including argos to sdr. Further, unify usrp and iris functions.
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"
],
LDPC should always be enabled. This will avoid the complexity of maintaining two code paths.
Add the single-gain feature for rxgain and txgain.
Print BER of UEs (four or more users) and see if performance degrades.
Perhaps we should rename it to num_ul_cal_pilot_syms; // Number of uplink data symbols with phase calibration pilots per frame
The CI server cannot support multiple concurrent Agora tests. Add a feature to prevent concurrent builds/tests.
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.
The current check fails when cmake uses cc instead of gcc.
Remove the external library json dependency by adding the latest release to the repo (v3.9.1) enable json comments.
Update the concurrentqueue to release 1.0.3
The install instructions are missing the following dependencies:
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!
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.
Replace Scramble dynamic memory
This version does not include the emulator test.
==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
Update post-checkout hook for the new CI URL
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
Previously tested uplink when compiling with the ENABLE_MAC=true option. Test / validate / implement mac code with downlink (both bs and user side).
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.
Upon Release / Tag the versioned doxygen output (HTML) should be generated and hosted. The live link should be added to the readme.
Add WLAN scrambler before encoder and descrambler after decoder.
The PacketTXRX class is an combination of all four variant classes and the definition is up to the linker and some compile flags. It would be better to have each derived class implement a common interface and make use of commonalities in the base class. Then the decision can be boiled down to the inclusion of an object with the proper derived class.
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.
Add basic functionality to send data from a file from the UE (uplink) and written to a file on the BS (uplink).
macuser
macbs
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
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.