Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
O
OpenXG UE
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 UE
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
#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
);
#ifdef EXECTIME
#ifdef RTAI
...
...
@@ -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
;
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
);
}
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
rotate_cpx_vector_norep
(
rxDATA_F_comp2
,
&
cfo_Q15
,
rxDATA_F_comp3
,
48
,
log2_maxh
>>
1
);
#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
(
vname
,
"rxDAT_F_%d"
,
s
);
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
pos
=
interleaver_16qam
[
k
];
// printf("k %d, pos %d\n",k,pos);
if
((
pos
&
1
)
==
1
)
{
tmp
=
((
int16_t
*
)
rxDATA_F_comp
3
)[
pos
>>
1
]
>>
4
;
//printf("pos (msb) %d : %d\n",pos>>1,tmp);
tmp
=
((
int16_t
*
)
rxDATA_F_comp
2
)[
pos
>>
1
]
>>
4
;
//
printf("pos (msb) %d : %d\n",pos>>1,tmp);
}
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
+
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
)
...
...
@@ -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;
*/
}
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
;
memset
(
rxDATA_llr2
,
0
,
144
);
for
(
k
=
0
,
k2
=
0
;
k
<
96
;
k
++
,
k2
++
)
{
memset
(
rxDATA_llr2
,
0
,
288
);
for
(
k
=
0
,
k2
=
0
;
k
<
192
;
k
++
,
k2
++
)
{
rxDATA_llr2
[
k2
]
=
rxDATA_llr
[
k
];
if
((
k
&
3
)
==
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,
#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
write_output
(
"STSLTScorr.m"
,
"STSLTScorrT"
,
corrT
,
512
,
2
,
1
);
#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
}
break
;
default:
break
;
}
#ifdef DEBUG_TX
if
(
s
<
12
)
{
for
(
i
=
0
;
i
<
64
;
i
++
)
...
...
openairITS/phy/SIMULATION/Makefile
View file @
c160f96d
...
...
@@ -3,7 +3,7 @@ CC = gcc
SSE3PROC
=
$(
shell
echo
`
grep
ssse3 /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 $(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) {
int
off
,
off2
;
double
txg
,
txg_dB
;
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_rx
=
(
uint8_t
*
)
malloc
(
4095
+
2
+
1
);
...
...
@@ -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_dB
=
(
unsigned
int
)
dB_fixed
(
tx_lev
);
...
...
@@ -246,11 +255,12 @@ int main(int argc, char **argv) {
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
;
misdetected_errors
=
0
;
signal_errors
=
0
;
missed_packets
=
0
;
stop
=
0
;
for
(
trial
=
0
;
trial
<
n_frames
;
trial
++
)
{
// printf("Trial %d (errors %d), sdu_length_samples %d\n",trial,errors,sdu_length_samples);
sigma2_dB
=
25
;
//10*log10((double)tx_lev) - SNR;
...
...
@@ -311,13 +321,19 @@ int main(int argc, char **argv) {
else
off2
=
off
;
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
;
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
))
{
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
;
}
else
{
...
...
@@ -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
))
{
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
]);
//
printf("error position %d : %x,%x\n",i,data_ind[i],data_ind_rx[i]);
misdetected_errors
++
;
errors
++
;
}
}
if
((
errors
>
(
n_frames
/
10
))
&&
(
trial
>
100
))
{
stop
=
1
;
break
;
}
}
// initial_synch returns IDLE
else
{
/* printf("Running data_detection fails\n");
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]);
errors
++
;
if
(
n_frames
==
1
)
{
printf
(
"Running data_detection fails
\n
"
);
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
;
}
...
...
@@ -350,15 +378,43 @@ int main(int argc, char **argv) {
}
if
(
no_detection
==
1
)
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
print_is_stats
();
print_dd_stats
();
#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_rx
);
// 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