Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
R
rdma-mwe
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
Titouan Soulard
rdma-mwe
Commits
b26ab9e6
Commit
b26ab9e6
authored
Jan 29, 2024
by
Titouan Soulard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix a mistake: count is the number of IQ samples
parent
28952c5f
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
32 additions
and
27 deletions
+32
-27
example/generate_iq_samples.c
example/generate_iq_samples.c
+6
-5
libtrx/trx_play.c
libtrx/trx_play.c
+19
-17
trx-bridge/bridge.c
trx-bridge/bridge.c
+7
-5
No files found.
example/generate_iq_samples.c
View file @
b26ab9e6
...
...
@@ -2,7 +2,7 @@
#include <stdint.h>
#include <math.h>
#define SAMPLE_COUNT 1
536
#define SAMPLE_COUNT 1
00
int
main
(
void
)
{
FILE
*
outfile
;
...
...
@@ -11,16 +11,17 @@ int main(void) {
float
time
;
for
(
i
=
0
;
i
<
SAMPLE_COUNT
;
i
++
)
{
fflush
(
stdout
);
time
=
(
float
)
i
/
((
float
)
SAMPLE_COUNT
);
samples
[
i
*
2
]
=
cos
(
6
.
28318530718
*
time
);
samples
[
i
*
2
]
=
cos
f
(
6
.
28318530718
*
time
);
samples
[
i
*
2
+
1
]
=
0
.
0
;
printf
(
"
\r
Generating sample %lu: %f"
,
i
+
1
,
samples
[
i
*
2
]);
printf
(
"
\r
Generating sample for time %f: %f
\n
"
,
time
,
samples
[
i
*
2
]);
fflush
(
stdout
);
}
printf
(
"
\n
Writing...
\n
"
);
outfile
=
fopen
(
"pure_sine.bin"
,
"w"
);
fwrite
(
samples
,
SAMPLE_COUNT
*
sizeof
(
float
),
1
,
outfile
);
fwrite
(
samples
,
SAMPLE_COUNT
*
2
*
sizeof
(
float
),
1
,
outfile
);
fclose
(
outfile
);
return
0
;
...
...
libtrx/trx_play.c
View file @
b26ab9e6
...
...
@@ -6,13 +6,13 @@
#include "amarisoft/trx_driver.h"
#define SAMPLE_RATE_KHZ
2304
0
#define
FLOAT_TO_CHAR_RATIO sizeof(float) / sizeof(char
)
#define SAMPLE_RATE_KHZ
3072
0
#define
COMPLEX_SIZE (sizeof(TRXComplex) / sizeof(char)
)
#define I1E6 1000000
#define I1E9 1000000000
struct
TRXPlayContext
{
float
*
samples
;
TRXComplex
*
samples
;
uint64_t
sample_count
;
uint64_t
current_sample
;
};
...
...
@@ -28,30 +28,32 @@ int trx_play_read(TRXState *s, trx_timestamp_t *ptimestamp, void **psamples, int
struct
TRXPlayContext
*
trx_play_ctx
;
uint64_t
extra_samples
;
float
**
channels
;
uint64_t
copy_samples
;
TRXComplex
**
channels
;
trx_play_ctx
=
s
->
opaque
;
channels
=
(
float
**
)
psamples
;
channels
=
(
TRXComplex
**
)
psamples
;
// Handle reading after end of buffer
if
(
trx_play_ctx
->
current_sample
+
count
>=
trx_play_ctx
->
sample_count
)
{
extra_samples
=
trx_play_ctx
->
current_sample
+
count
-
trx_play_ctx
->
sample_count
;
copy_samples
=
count
-
extra_samples
;
memcpy
(
channels
[
0
],
trx_play_ctx
->
samples
+
trx_play_ctx
->
current_sample
,
(
count
-
extra_samples
)
*
sizeof
(
float
));
memcpy
(
channels
[
1
],
trx_play_ctx
->
samples
+
trx_play_ctx
->
current_sample
,
(
count
-
extra_samples
)
*
sizeof
(
float
));
memcpy
(
channels
[
0
],
trx_play_ctx
->
samples
+
trx_play_ctx
->
current_sample
,
copy_samples
*
sizeof
(
TRXComplex
));
memcpy
(
channels
[
1
],
trx_play_ctx
->
samples
+
trx_play_ctx
->
current_sample
,
copy_samples
*
sizeof
(
TRXComplex
));
if
(
extra_samples
>
0
)
{
memcpy
(
channels
[
0
]
,
trx_play_ctx
->
samples
,
extra_samples
*
sizeof
(
float
));
memcpy
(
channels
[
1
]
,
trx_play_ctx
->
samples
,
extra_samples
*
sizeof
(
float
));
memcpy
(
channels
[
0
]
+
copy_samples
,
trx_play_ctx
->
samples
,
extra_samples
*
sizeof
(
TRXComplex
));
memcpy
(
channels
[
1
]
+
copy_samples
,
trx_play_ctx
->
samples
,
extra_samples
*
sizeof
(
TRXComplex
));
}
trx_play_ctx
->
current_sample
=
extra_samples
;
}
else
{
memcpy
(
channels
[
0
],
trx_play_ctx
->
samples
+
trx_play_ctx
->
current_sample
,
count
*
sizeof
(
float
));
memcpy
(
channels
[
1
],
trx_play_ctx
->
samples
+
trx_play_ctx
->
current_sample
,
count
*
sizeof
(
float
));
memcpy
(
channels
[
0
],
trx_play_ctx
->
samples
+
trx_play_ctx
->
current_sample
,
count
*
sizeof
(
TRXComplex
));
memcpy
(
channels
[
1
],
trx_play_ctx
->
samples
+
trx_play_ctx
->
current_sample
,
count
*
sizeof
(
TRXComplex
));
//
trx_play_ctx->current_sample += count;
trx_play_ctx
->
current_sample
+=
count
;
}
return
count
;
...
...
@@ -93,22 +95,22 @@ int trx_driver_init(TRXState *s) {
// Allocate the right size
fseek
(
samples_file_handle
,
0
,
SEEK_END
);
sample_count
=
ftell
(
samples_file_handle
)
/
FLOAT_TO_CHAR_RATIO
;
sample_count
=
ftell
(
samples_file_handle
)
/
COMPLEX_SIZE
;
rewind
(
samples_file_handle
);
samples_file_content
=
malloc
(
sample_count
*
sizeof
(
float
));
result
=
fread
(
samples_file_content
,
sample_count
,
1
,
samples_file_handle
);
samples_file_content
=
malloc
(
sample_count
*
sizeof
(
TRXComplex
));
result
=
fread
(
samples_file_content
,
sample_count
*
sizeof
(
TRXComplex
)
,
1
,
samples_file_handle
);
if
(
result
!=
1
)
{
fprintf
(
stderr
,
"trx_play: could not read samples from file
\n
"
);
return
-
1
;
}
trx_play_ctx
->
samples
=
(
float
*
)
samples_file_content
;
trx_play_ctx
->
samples
=
(
TRXComplex
*
)
samples_file_content
;
trx_play_ctx
->
sample_count
=
sample_count
;
trx_play_ctx
->
current_sample
=
0
;
printf
(
"trx_play: looping %u frames
\n
"
,
sample_count
);
printf
(
"trx_play: looping %u frames
from %s
\n
"
,
sample_count
,
samples_file_path
);
s
->
opaque
=
trx_play_ctx
;
s
->
trx_start_func2
=
trx_play_start
;
...
...
trx-bridge/bridge.c
View file @
b26ab9e6
...
...
@@ -156,11 +156,13 @@ int main(int argc, char *argv[]) {
int
(
*
input_lib_init
)(
TRXState
*
s
);
int
(
*
output_lib_init
)(
TRXState
*
s
);
float
*
input_samples
=
malloc
(
8192
*
sizeof
(
float
));
float
*
input_channels
[
2
]
=
{
input_samples
,
&
input_samples
[
4096
]
};
// IQ samples are complex numbers
// A flat plane of Complex is created for all channels
TRXComplex
*
input_samples
=
malloc
(
8192
*
sizeof
(
TRXComplex
));
TRXComplex
*
input_channels
[
2
]
=
{
input_samples
,
&
input_samples
[
4096
]
};
float
*
output_samples
=
malloc
(
8192
*
sizeof
(
float
));
float
*
output_channels
[
2
]
=
{
output_samples
,
&
output_samples
[
4096
]
};
TRXComplex
*
output_samples
=
malloc
(
8192
*
sizeof
(
TRXComplex
));
TRXComplex
*
output_channels
[
2
]
=
{
output_samples
,
&
output_samples
[
4096
]
};
while
((
opt
=
getopt
(
argc
,
argv
,
"c:p:"
))
!=
-
1
)
{
if
(
opt
==
'c'
)
{
...
...
@@ -306,7 +308,7 @@ int main(int argc, char *argv[]) {
count
=
input_trx_state
.
trx_read_func2
(
&
input_trx_state
,
&
input_ts
,
(
void
**
)
input_channels
,
count
,
0
,
&
read_md
);
input_ts
+=
count
;
output_trx_state
.
trx_write_func2
(
&
output_trx_state
,
input_ts
,
(
const
void
**
)
input_channels
,
count
/
2
,
0
,
&
write_md
);
output_trx_state
.
trx_write_func2
(
&
output_trx_state
,
input_ts
,
(
const
void
**
)
input_channels
,
count
,
0
,
&
write_md
);
}
dlclose
(
input_lib_handle
);
...
...
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