Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG-RAN
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Michael Black
OpenXG-RAN
Commits
c160f96d
Commit
c160f96d
authored
Jul 19, 2013
by
Raymond Knopp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
git-svn-id:
http://svn.eurecom.fr/openair4G/trunk@4042
818b1a75-f10b-46b9-bf7c-635c3b92a50f
parent
350c7808
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
86 additions
and
25 deletions
+86
-25
openairITS/phy/DOT11/data_detection.c
openairITS/phy/DOT11/data_detection.c
+11
-9
openairITS/phy/DOT11/initial_sync.c
openairITS/phy/DOT11/initial_sync.c
+1
-1
openairITS/phy/DOT11/phy_tx_start.c
openairITS/phy/DOT11/phy_tx_start.c
+4
-1
openairITS/phy/SIMULATION/Makefile
openairITS/phy/SIMULATION/Makefile
+1
-1
openairITS/phy/SIMULATION/dot11sim.c
openairITS/phy/SIMULATION/dot11sim.c
+69
-13
No files found.
openairITS/phy/DOT11/data_detection.c
View file @
c160f96d
...
@@ -186,7 +186,7 @@ int data_detection(RX_VECTOR_t *rxv,uint8_t *data_ind,uint32_t* rx_data,int fram
...
@@ -186,7 +186,7 @@ int data_detection(RX_VECTOR_t *rxv,uint8_t *data_ind,uint32_t* rx_data,int fram
#endif
#endif
#endif
#endif
//
log2_maxh=10
;
//
log2_maxh=7
;
mult_cpx_vector_norep_unprepared_conjx2
(
rxDATA_F
,(
int16_t
*
)
chest
,(
int16_t
*
)
rxDATA_F_comp
,
64
,
log2_maxh
);
mult_cpx_vector_norep_unprepared_conjx2
(
rxDATA_F
,(
int16_t
*
)
chest
,(
int16_t
*
)
rxDATA_F_comp
,
64
,
log2_maxh
);
#ifdef EXECTIME
#ifdef EXECTIME
#ifdef RTAI
#ifdef RTAI
...
@@ -225,7 +225,7 @@ int data_detection(RX_VECTOR_t *rxv,uint8_t *data_ind,uint32_t* rx_data,int fram
...
@@ -225,7 +225,7 @@ int data_detection(RX_VECTOR_t *rxv,uint8_t *data_ind,uint32_t* rx_data,int fram
scale
=
FOUR_OVER_SQRT_42
;
scale
=
FOUR_OVER_SQRT_42
;
for
(
i
=
0
;
i
<
48
;
i
++
)
{
for
(
i
=
0
;
i
<
48
;
i
++
)
{
// printf("mag[%d] = %d\n",i,rxDATA_F_mag[i]);
//
printf("mag[%d] = %d\n",i,rxDATA_F_mag[i]);
rxDATA_F_mag
[
i
]
=
(
int16_t
)((
rxDATA_F_mag
[
i
]
*
scale
)
>>
15
);
rxDATA_F_mag
[
i
]
=
(
int16_t
)((
rxDATA_F_mag
[
i
]
*
scale
)
>>
15
);
}
}
if
((
rxv
->
rate
>>
1
)
==
3
)
if
((
rxv
->
rate
>>
1
)
==
3
)
...
@@ -301,6 +301,8 @@ int data_detection(RX_VECTOR_t *rxv,uint8_t *data_ind,uint32_t* rx_data,int fram
...
@@ -301,6 +301,8 @@ int data_detection(RX_VECTOR_t *rxv,uint8_t *data_ind,uint32_t* rx_data,int fram
rotate_cpx_vector_norep
(
rxDATA_F_comp2
,
&
cfo_Q15
,
rxDATA_F_comp3
,
48
,
log2_maxh
>>
1
);
rotate_cpx_vector_norep
(
rxDATA_F_comp2
,
&
cfo_Q15
,
rxDATA_F_comp3
,
48
,
log2_maxh
>>
1
);
#ifdef DEBUG_DATA
#ifdef DEBUG_DATA
if
(
s
==
0
)
write_output
(
"rxDATA_F_mag.m"
,
"rxDAT_mag"
,
rxDATA_F_mag
,
48
,
1
,
0
);
sprintf
(
fname
,
"rxDATA_F%d.m"
,
s
);
sprintf
(
fname
,
"rxDATA_F%d.m"
,
s
);
sprintf
(
vname
,
"rxDAT_F_%d"
,
s
);
sprintf
(
vname
,
"rxDAT_F_%d"
,
s
);
write_output
(
fname
,
vname
,
rxDATA_F
,
128
,
2
,
1
);
write_output
(
fname
,
vname
,
rxDATA_F
,
128
,
2
,
1
);
...
@@ -376,14 +378,14 @@ int data_detection(RX_VECTOR_t *rxv,uint8_t *data_ind,uint32_t* rx_data,int fram
...
@@ -376,14 +378,14 @@ int data_detection(RX_VECTOR_t *rxv,uint8_t *data_ind,uint32_t* rx_data,int fram
pos
=
interleaver_16qam
[
k
];
pos
=
interleaver_16qam
[
k
];
// printf("k %d, pos %d\n",k,pos);
// printf("k %d, pos %d\n",k,pos);
if
((
pos
&
1
)
==
1
)
{
if
((
pos
&
1
)
==
1
)
{
tmp
=
((
int16_t
*
)
rxDATA_F_comp
3
)[
pos
>>
1
]
>>
4
;
tmp
=
((
int16_t
*
)
rxDATA_F_comp
2
)[
pos
>>
1
]
>>
4
;
//printf("pos (msb) %d : %d\n",pos>>1,tmp);
//
printf("pos (msb) %d : %d\n",pos>>1,tmp);
}
}
else
{
else
{
tmp
=
((
int16_t
*
)
rxDATA_F_comp
3
)[
pos
>>
1
];
tmp
=
((
int16_t
*
)
rxDATA_F_comp
2
)[
pos
>>
1
];
tmp
=
(
tmp
<
0
)
?
tmp
:
-
tmp
;
tmp
=
(
tmp
<
0
)
?
tmp
:
-
tmp
;
tmp
=
(
tmp
+
rxDATA_F_mag
[
pos
>>
2
])
>>
4
;
tmp
=
(
tmp
+
rxDATA_F_mag
[
pos
>>
2
])
>>
4
;
//printf("pos (lsb) %d : rxDATA_F_mag[%d] %d : %d (%d)\n",pos>>1,pos>>2,rxDATA_F_mag[pos>>2],tmp,((int16_t*)rxDATA_F_comp2)[pos>>1]);
//
printf("pos (lsb) %d : rxDATA_F_mag[%d] %d : %d (%d)\n",pos>>1,pos>>2,rxDATA_F_mag[pos>>2],tmp,((int16_t*)rxDATA_F_comp2)[pos>>1]);
}
}
if
(
tmp
<-
8
)
if
(
tmp
<-
8
)
...
@@ -401,10 +403,10 @@ int data_detection(RX_VECTOR_t *rxv,uint8_t *data_ind,uint32_t* rx_data,int fram
...
@@ -401,10 +403,10 @@ int data_detection(RX_VECTOR_t *rxv,uint8_t *data_ind,uint32_t* rx_data,int fram
rxDATA_llr[k] = (int8_t)tmp;
rxDATA_llr[k] = (int8_t)tmp;
*/
*/
}
}
if
(
rxv
->
rate
==
3
)
{
// rate 3/4, so add zeros for punctured bits
if
(
rxv
->
rate
==
5
)
{
// rate 3/4, so add zeros for punctured bits
llr_ptr
=
rxDATA_llr2
;
llr_ptr
=
rxDATA_llr2
;
memset
(
rxDATA_llr2
,
0
,
144
);
memset
(
rxDATA_llr2
,
0
,
288
);
for
(
k
=
0
,
k2
=
0
;
k
<
96
;
k
++
,
k2
++
)
{
for
(
k
=
0
,
k2
=
0
;
k
<
192
;
k
++
,
k2
++
)
{
rxDATA_llr2
[
k2
]
=
rxDATA_llr
[
k
];
rxDATA_llr2
[
k2
]
=
rxDATA_llr
[
k
];
if
((
k
&
3
)
==
2
)
if
((
k
&
3
)
==
2
)
k2
+=
2
;
k2
+=
2
;
...
...
openairITS/phy/DOT11/initial_sync.c
View file @
c160f96d
...
@@ -268,7 +268,7 @@ CHANNEL_STATUS_t initial_sync(RX_VECTOR_t **rx_vector,
...
@@ -268,7 +268,7 @@ CHANNEL_STATUS_t initial_sync(RX_VECTOR_t **rx_vector,
#endif
#endif
#endif
#endif
if
((
dB_fixed
(
mean_energy
)
>
1
5
)
&&
(
peak_energy
>
(
50
*
mean_energy
)))
{
if
((
dB_fixed
(
mean_energy
)
>
1
0
)
&&
(
peak_energy
>
(
50
*
mean_energy
)))
{
#ifdef DEBUG_SYNC
#ifdef DEBUG_SYNC
write_output
(
"STSLTScorr.m"
,
"STSLTScorrT"
,
corrT
,
512
,
2
,
1
);
write_output
(
"STSLTScorr.m"
,
"STSLTScorrT"
,
corrT
,
512
,
2
,
1
);
#endif
#endif
...
...
openairITS/phy/DOT11/phy_tx_start.c
View file @
c160f96d
...
@@ -403,8 +403,11 @@ int phy_tx_start_bot(TX_VECTOR_t *tx_vector,int16_t *output_ptr,uint32_t tx_offs
...
@@ -403,8 +403,11 @@ int phy_tx_start_bot(TX_VECTOR_t *tx_vector,int16_t *output_ptr,uint32_t tx_offs
}
}
break
;
break
;
default:
break
;
}
}
#ifdef DEBUG_TX
#ifdef DEBUG_TX
if
(
s
<
12
)
{
if
(
s
<
12
)
{
for
(
i
=
0
;
i
<
64
;
i
++
)
for
(
i
=
0
;
i
<
64
;
i
++
)
...
...
openairITS/phy/SIMULATION/Makefile
View file @
c160f96d
...
@@ -3,7 +3,7 @@ CC = gcc
...
@@ -3,7 +3,7 @@ CC = gcc
SSE3PROC
=
$(
shell
echo
`
grep
ssse3 /proc/cpuinfo
`
)
SSE3PROC
=
$(
shell
echo
`
grep
ssse3 /proc/cpuinfo
`
)
SSE4PROC
=
$(
shell
echo
`
grep
sse4 /proc/cpuinfo
`
)
SSE4PROC
=
$(
shell
echo
`
grep
sse4 /proc/cpuinfo
`
)
CPUFLAGS
=
-mmmx
-msse
-msse2
-m32
-mssse3
#-msse4
CPUFLAGS
=
-mmmx
-msse
-msse2
-m32
-mssse3
-msse4
.1
#CPUFLAGS += $(shell if [ -z $(SSE3PROC) ]; then echo "" ; else echo "-mssse3"; fi)
#CPUFLAGS += $(shell if [ -z $(SSE3PROC) ]; then echo "" ; else echo "-mssse3"; fi)
#CPUFLAGS += $(shell if [ -z $(SSE4PROC) ]; then echo "" ; else echo "-msse4"; fi)
#CPUFLAGS += $(shell if [ -z $(SSE4PROC) ]; then echo "" ; else echo "-msse4"; fi)
...
...
openairITS/phy/SIMULATION/dot11sim.c
View file @
c160f96d
...
@@ -55,6 +55,15 @@ int main(int argc, char **argv) {
...
@@ -55,6 +55,15 @@ int main(int argc, char **argv) {
int
off
,
off2
;
int
off
,
off2
;
double
txg
,
txg_dB
;
double
txg
,
txg_dB
;
int
log2_maxh
;
int
log2_maxh
;
double
snr_array
[
100
];
int
errors_array
[
100
];
int
trials_array
[
100
];
int
misdetected_errors_array
[
100
];
int
signal_errors_array
[
100
];
int
missed_packets_array
[
100
];
int
cnt
=
0
;
char
fname
[
100
],
vname
[
100
];
int
stop
=
0
;
data_ind
=
(
uint8_t
*
)
malloc
(
4095
+
2
+
1
);
data_ind
=
(
uint8_t
*
)
malloc
(
4095
+
2
+
1
);
data_ind_rx
=
(
uint8_t
*
)
malloc
(
4095
+
2
+
1
);
data_ind_rx
=
(
uint8_t
*
)
malloc
(
4095
+
2
+
1
);
...
@@ -230,7 +239,7 @@ int main(int argc, char **argv) {
...
@@ -230,7 +239,7 @@ int main(int argc, char **argv) {
}
}
phy_tx_start
(
&
tx_vector
,
txdata
,
0
,
data_ind
);
phy_tx_start
(
&
tx_vector
,
txdata
,
0
,
FRAME_LENGTH_SAMPLES_MAX
,
data_ind
);
tx_lev
=
signal_energy
((
int32_t
*
)
txdata
,
320
);
tx_lev
=
signal_energy
((
int32_t
*
)
txdata
,
320
);
tx_lev_dB
=
(
unsigned
int
)
dB_fixed
(
tx_lev
);
tx_lev_dB
=
(
unsigned
int
)
dB_fixed
(
tx_lev
);
...
@@ -246,11 +255,12 @@ int main(int argc, char **argv) {
...
@@ -246,11 +255,12 @@ int main(int argc, char **argv) {
for
(
SNR
=
snr0
;
SNR
<
snr1
;
SNR
+=
.
2
)
{
for
(
SNR
=
snr0
;
SNR
<
snr1
;
SNR
+=
.
2
)
{
printf
(
"n_frames %d SNR %f
\n
"
,
n_frames
,
SNR
);
printf
(
"n_frames %d SNR %f
sdu_length %d rate %d
\n
"
,
n_frames
,
SNR
,
tx_vector
.
sdu_length
,
tx_vector
.
rate
);
errors
=
0
;
errors
=
0
;
misdetected_errors
=
0
;
misdetected_errors
=
0
;
signal_errors
=
0
;
signal_errors
=
0
;
missed_packets
=
0
;
missed_packets
=
0
;
stop
=
0
;
for
(
trial
=
0
;
trial
<
n_frames
;
trial
++
)
{
for
(
trial
=
0
;
trial
<
n_frames
;
trial
++
)
{
// printf("Trial %d (errors %d), sdu_length_samples %d\n",trial,errors,sdu_length_samples);
// printf("Trial %d (errors %d), sdu_length_samples %d\n",trial,errors,sdu_length_samples);
sigma2_dB
=
25
;
//10*log10((double)tx_lev) - SNR;
sigma2_dB
=
25
;
//10*log10((double)tx_lev) - SNR;
...
@@ -311,13 +321,19 @@ int main(int argc, char **argv) {
...
@@ -311,13 +321,19 @@ int main(int argc, char **argv) {
else
else
off2
=
off
;
off2
=
off
;
if
((
initial_sync
(
&
rxv
,
&
rx_offset
,
&
log2_maxh
,(
uint32_t
*
)
rxdata
[
0
],
FRAME_LENGTH_SAMPLES_MAX
,
off2
,
1
)
==
BUSY
))
{
if
((
initial_sync
(
&
rxv
,
&
rx_offset
,
&
log2_maxh
,(
uint32_t
*
)
rxdata
[
0
],
FRAME_LENGTH_SAMPLES_MAX
,
off2
,
1
)
==
BUSY
))
{
// printf("Channel is busy, rxv %p, offset %d\n",(void*)rxv,rx_offset);
if
(
n_frames
==
1
)
printf
(
"Channel is busy, rxv %p, offset %d
\n
"
,(
void
*
)
rxv
,
rx_offset
);
no_detection
=
0
;
no_detection
=
0
;
if
(
rxv
)
{
if
(
rxv
)
{
// printf("Rate %d, SDU_LENGTH %d\n",rxv->rate,rxv->sdu_length);
if
(
n_frames
==
1
)
printf
(
"Rate %d, SDU_LENGTH %d
\n
"
,
rxv
->
rate
,
rxv
->
sdu_length
);
if
(
(
rxv
->
rate
!=
tx_vector
.
rate
)
||
(
rxv
->
sdu_length
!=
tx_vector
.
sdu_length
))
{
if
(
(
rxv
->
rate
!=
tx_vector
.
rate
)
||
(
rxv
->
sdu_length
!=
tx_vector
.
sdu_length
))
{
signal_errors
++
;
signal_errors
++
;
printf
(
"SIGNAL error: rx_offset %d, tx_offset %d (off2 %d)
\n
"
,
rx_offset
,
tx_offset
,
off2
);
if
((
signal_errors
>
(
n_frames
/
10
))
&&
(
trial
>=
100
))
{
stop
=
1
;
}
if
(
n_frames
==
1
)
printf
(
"SIGNAL error: rx_offset %d, tx_offset %d (off2 %d)
\n
"
,
rx_offset
,
tx_offset
,
off2
);
break
;
break
;
}
}
else
{
else
{
...
@@ -325,20 +341,32 @@ int main(int argc, char **argv) {
...
@@ -325,20 +341,32 @@ int main(int argc, char **argv) {
if
(
data_detection
(
rxv
,
data_ind_rx
,(
uint32_t
*
)
rxdata
[
0
],
FRAME_LENGTH_SAMPLES_MAX
,
rx_offset
,
log2_maxh
,
NULL
))
{
if
(
data_detection
(
rxv
,
data_ind_rx
,(
uint32_t
*
)
rxdata
[
0
],
FRAME_LENGTH_SAMPLES_MAX
,
rx_offset
,
log2_maxh
,
NULL
))
{
for
(
i
=
0
;
i
<
rxv
->
sdu_length
+
6
;
i
++
)
{
for
(
i
=
0
;
i
<
rxv
->
sdu_length
+
6
;
i
++
)
{
if
(
data_ind
[
i
]
!=
data_ind_rx
[
i
])
{
if
(
data_ind
[
i
]
!=
data_ind_rx
[
i
])
{
printf
(
"error position %d : %x,%x
\n
"
,
i
,
data_ind
[
i
],
data_ind_rx
[
i
]);
//
printf("error position %d : %x,%x\n",i,data_ind[i],data_ind_rx[i]);
misdetected_errors
++
;
misdetected_errors
++
;
errors
++
;
errors
++
;
}
}
}
}
if
((
errors
>
(
n_frames
/
10
))
&&
(
trial
>
100
))
{
stop
=
1
;
break
;
}
}
// initial_synch returns IDLE
}
// initial_synch returns IDLE
else
{
else
{
/* printf("Running data_detection fails\n");
errors
++
;
for (i=0;i<rxv->sdu_length+6;i++) {
if
(
n_frames
==
1
)
{
if (data_ind[i]!=data_ind_rx[i]) {
printf
(
"Running data_detection fails
\n
"
);
printf("error position %d : %x,%x\n",i,data_ind[i],data_ind_rx[i]);
for
(
i
=
0
;
i
<
rxv
->
sdu_length
+
6
;
i
++
)
{
if
(
data_ind
[
i
]
!=
data_ind_rx
[
i
])
{
printf
(
"error position %d : %x,%x
\n
"
,
i
,
data_ind
[
i
],
data_ind_rx
[
i
]);
}
}
}
}
}
*/
if
((
errors
>
(
n_frames
/
10
))
&&
(
trial
>=
100
))
{
stop
=
1
;
break
;
}
}
}
break
;
break
;
}
}
...
@@ -350,15 +378,43 @@ int main(int argc, char **argv) {
...
@@ -350,15 +378,43 @@ int main(int argc, char **argv) {
}
}
if
(
no_detection
==
1
)
if
(
no_detection
==
1
)
missed_packets
++
;
missed_packets
++
;
if
(
stop
==
1
)
break
;
}
}
printf
(
"
\n
SNR %f dB: errors %d/%d, misdetected errors %d/%d,signal_errors %d/%d, missed_packets %d/%d
\n
"
,
SNR
,
errors
,
n_frames
-
signal_errors
,
misdetected_errors
,
n_frames
-
signal_errors
,
signal_errors
,
n_frames
,
missed_packets
,
n_frames
);
printf
(
"
\n
SNR %f dB: errors %d/%d, misdetected errors %d/%d,signal_errors %d/%d, missed_packets %d/%d
\n
"
,
SNR
,
errors
,
trial
-
signal_errors
,
misdetected_errors
,
trial
-
signal_errors
,
signal_errors
,
trial
,
missed_packets
,
trial
);
snr_array
[
cnt
]
=
SNR
;
errors_array
[
cnt
]
=
errors
;
trials_array
[
cnt
]
=
trial
;
misdetected_errors_array
[
cnt
]
=
misdetected_errors
;
signal_errors_array
[
cnt
]
=
signal_errors
;
missed_packets_array
[
cnt
]
=
missed_packets
;
cnt
++
;
if
(
cnt
>
99
)
{
printf
(
"too many SNR points, exiting ...
\n
"
);
break
;
}
if
(
errors
==
0
)
break
;
#ifdef EXECTIME
#ifdef EXECTIME
print_is_stats
();
print_is_stats
();
print_dd_stats
();
print_dd_stats
();
#endif
#endif
}
}
sprintf
(
fname
,
"SNR_%d_%d.m"
,
tx_vector
.
rate
,
tx_vector
.
sdu_length
);
sprintf
(
vname
,
"SNR_%d_%d_v"
,
tx_vector
.
rate
,
tx_vector
.
sdu_length
);
write_output
(
fname
,
vname
,
snr_array
,
cnt
,
1
,
7
);
sprintf
(
fname
,
"errors_%d_%d.m"
,
tx_vector
.
rate
,
tx_vector
.
sdu_length
);
sprintf
(
vname
,
"errors_%d_%d_v"
,
tx_vector
.
rate
,
tx_vector
.
sdu_length
);
write_output
(
fname
,
vname
,
errors_array
,
cnt
,
1
,
2
);
sprintf
(
fname
,
"trials_%d_%d.m"
,
tx_vector
.
rate
,
tx_vector
.
sdu_length
);
sprintf
(
vname
,
"trials_%d_%d_v"
,
tx_vector
.
rate
,
tx_vector
.
sdu_length
);
write_output
(
fname
,
vname
,
trials_array
,
cnt
,
1
,
2
);
sprintf
(
fname
,
"signal_errors_%d_%d.m"
,
tx_vector
.
rate
,
tx_vector
.
sdu_length
);
sprintf
(
vname
,
"signal_errors_%d_%d_v"
,
tx_vector
.
rate
,
tx_vector
.
sdu_length
);
write_output
(
fname
,
vname
,
signal_errors_array
,
cnt
,
1
,
2
);
free
(
data_ind
);
free
(
data_ind
);
free
(
data_ind_rx
);
free
(
data_ind_rx
);
// free_channel_desc_scm(ch);
// free_channel_desc_scm(ch);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment