Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
杨家三木
qtcpp_demo
提交
402d1229
qtcpp_demo
项目概览
杨家三木
/
qtcpp_demo
与 Fork 源项目一致
Fork自
colorEagleStdio / qtcpp_demo
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
qtcpp_demo
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
402d1229
编写于
6月 19, 2021
作者:
M
manjaro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
estimate freq
上级
92d9f1c7
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
136 addition
and
45 deletion
+136
-45
sdr_deepdetect/sdd_emitter/main.cpp
sdr_deepdetect/sdd_emitter/main.cpp
+2
-2
sdr_deepdetect/sdd_reciever/main.cpp
sdr_deepdetect/sdd_reciever/main.cpp
+125
-34
sdr_deepdetect/waveform.cpp
sdr_deepdetect/waveform.cpp
+2
-2
sdr_deepdetect/waveform.h
sdr_deepdetect/waveform.h
+2
-2
uhd_cpp/uhd_the_ark.cpp
uhd_cpp/uhd_the_ark.cpp
+5
-5
未找到文件。
sdr_deepdetect/sdd_emitter/main.cpp
浏览文件 @
402d1229
...
...
@@ -28,10 +28,10 @@ int runSend()
char
error_string
[
4096
];
//Sample rate in Hz
double
sprate
=
240000
;
double
tx_freq
=
20
0.0e6
;
double
tx_freq
=
61
0.0e6
;
double
tx_sprate
=
sprate
;
double
tx_gain
=
70
;
double
tx_bw
=
sprate
/
MODRATE_N
<
200000
?
200000
:
sprate
/
MODRATE_N
;
double
tx_bw
=
sprate
;
//发射信号。MIMO时,可以指定0,1
size_t
tx_channel
[]
=
{
0
};
...
...
sdr_deepdetect/sdd_reciever/main.cpp
浏览文件 @
402d1229
...
...
@@ -7,6 +7,7 @@
#include <thread>
#include <memory>
#include <atomic>
#include <math.h>
#include "../waveform.h"
static
bool
stop_signal_called
=
false
;
#define UHD_DO(X) \
...
...
@@ -26,6 +27,10 @@ void sigint_handler(int code){
std
::
shared_ptr
<
SPTYPE
[][
2
]
>
readbuf
[
2
];
std
::
atomic
<
int
>
curr_active
=
0
;
std
::
atomic
<
int
>
curr_deal
=
0
;
//Sample rate in Hz
double
sprate
=
240000
;
std
::
atomic
<
bool
>
syn
=
false
;
//消费者线程,for rx
void
dealer
();
int
runRecieve
()
...
...
@@ -35,12 +40,11 @@ int runRecieve()
//要用libuhd操作RTLSDR,需要soapyuhd 来代理
char
dev_args
[]
=
"available=Yes,driver=rtlsdr,label=Generic RTL2832U :: 77771111153705700,manufacturer=Generic,product=RTL2832U,rtl=0,serial=77771111153705700,tuner=Rafael Micro R820T,type=soapy"
;
char
error_string
[
4096
];
//Sample rate in Hz
double
sprate
=
240000
;
//接收频率
double
rx_freq
=
20
0e6
;
double
rx_freq
=
61
0e6
;
double
rx_sprate
=
sprate
;
double
rx_gain
=
1
0.0
;
double
rx_gain
=
0.0
;
bool
rx_agc
=
false
;
double
rx_bw
=
240000
;
//接收信号。MIMO时,可以指定0,1
...
...
@@ -137,11 +141,11 @@ int runRecieve()
// Issue stream command
fprintf
(
stderr
,
"Issuing stream command.
\n
"
);
UHD_DO
(
uhd_rx_streamer_issue_stream_cmd
(
rx_streamer
,
&
rx_stream_cmd
));
readbuf
[
0
]
=
std
::
shared_ptr
<
SPTYPE
[][
2
]
>
(
new
SPTYPE
[
READ_BUF_SIZE
+
rx_sps_buff
*
4
][
2
]);
readbuf
[
1
]
=
std
::
shared_ptr
<
SPTYPE
[][
2
]
>
(
new
SPTYPE
[
READ_BUF_SIZE
+
rx_sps_buff
*
4
][
2
]);
size_t
total_red
=
0
;
UHD_DO
(
uhd_rx_streamer_issue_stream_cmd
(
rx_streamer
,
&
rx_stream_cmd
));
//Read, RX in Main Thread
while
(
!
stop_signal_called
)
{
size_t
num_rx_samps
=
0
;
...
...
@@ -161,7 +165,7 @@ int runRecieve()
{
fprintf
(
stderr
,
"Switch Cache to %d
\n
"
,
(
int
)
curr_active
);
size_t
start_move
=
READ_BUF_SIZE
-
WAVSIZE
;
size_t
end_move
=
total_red
;
size_t
end_move
=
total_red
-
1
;
size_t
copyto
=
end_move
-
start_move
+
1
;
SPTYPE
(
*
dest
)[
2
]
=
readbuf
[
1
-
curr_active
].
get
();
SPTYPE
(
*
src
)[
2
]
=
readbuf
[
curr_active
].
get
();
...
...
@@ -169,6 +173,19 @@ int runRecieve()
memcpy
(
dest
,
src
,
copyto
*
sizeof
(
SPTYPE
)
*
2
);
total_red
=
copyto
;
curr_active
=
1
-
curr_active
;
if
(
!
syn
)
{
rx_stream_cmd
.
stream_mode
=
UHD_STREAM_MODE_STOP_CONTINUOUS
;
UHD_DO
(
uhd_rx_streamer_issue_stream_cmd
(
rx_streamer
,
&
rx_stream_cmd
));
while
(
curr_active
!=
curr_deal
)
{
std
::
this_thread
::
sleep_for
(
std
::
chrono
::
milliseconds
(
1000
));
fprintf
(
stderr
,
"Waiting for syn.
\n
"
);
}
rx_stream_cmd
.
stream_mode
=
UHD_STREAM_MODE_START_CONTINUOUS
;
UHD_DO
(
uhd_rx_streamer_issue_stream_cmd
(
rx_streamer
,
&
rx_stream_cmd
));
}
}
}
if
(
rx_streamer
)
uhd_rx_streamer_free
(
&
rx_streamer
);
...
...
@@ -186,8 +203,36 @@ int runRecieve()
void
runDeal
()
{
const
int
DealEnd
=
READ_BUF_SIZE
-
WAVSIZE
;
float
(
*
cross
)[
2
][
2
]
=
new
float
[
DealEnd
][
2
][
2
];
float
(
*
judge
)[
2
]
=
new
float
[
DealEnd
][
2
];
const
int
steps
=
201
;
float
(
*
cross
[
steps
])[
2
][
2
]
;
for
(
int
i
=
0
;
i
<
steps
;
++
i
)
cross
[
i
]
=
new
float
[
DealEnd
][
2
][
2
];
float
(
*
judge
[
steps
])[
2
]
;
for
(
int
i
=
0
;
i
<
steps
;
++
i
)
judge
[
i
]
=
new
float
[
DealEnd
][
2
];
float
(
*
freq_mv
[
steps
])[
2
];
for
(
int
i
=
0
;
i
<
steps
;
++
i
)
freq_mv
[
i
]
=
new
float
[
DealEnd
][
2
];
float
(
*
sig
[
steps
])[
2
]
;
for
(
int
i
=
0
;
i
<
steps
;
++
i
)
sig
[
i
]
=
new
float
[
DealEnd
][
2
];
const
float
pi
=
3.1415927
;
for
(
int
df
=
0
;
df
<
steps
;
++
df
)
{
float
f
=
(
df
-
steps
/
2
)
*
50
;
for
(
int
pv
=
0
;
pv
<
DealEnd
;
++
pv
)
{
float
t
=
pv
/
sprate
;
freq_mv
[
df
][
pv
][
0
]
=
cos
(
2
*
pi
*
f
*
t
);
freq_mv
[
df
][
pv
][
1
]
=
sin
(
2
*
pi
*
f
*
t
);
}
}
int
startDF
=
0
,
endDF
=
steps
;
while
(
!
stop_signal_called
)
{
if
((
int
)
curr_active
==
(
int
)
curr_deal
)
{
...
...
@@ -197,45 +242,91 @@ void runDeal()
int
deal
=
1
-
curr_active
;
short
(
*
pBufRx
)[
2
]
=
readbuf
[
deal
].
get
();
fprintf
(
stderr
,
"Dealing %d
\n
"
,
deal
);
//xorr
#pragma omp simd
for
(
size_t
i
=
0
;
i
<
DealEnd
;
++
i
)
float
maxAbs
=
0
;
int
maxDF
=
2
;
#pragma omp parallel for
for
(
int
df
=
startDF
;
df
<
endDF
;
++
df
)
{
cross
[
i
][
0
][
0
]
=
0
;
cross
[
i
][
0
][
1
]
=
0
;
cross
[
i
][
1
][
0
]
=
0
;
cross
[
i
][
1
][
1
]
=
0
;
for
(
size_t
j
=
0
;
j
<
WAVSIZE
;
++
j
)
//xorr
#pragma omp simd
for
(
size_t
i
=
0
;
i
<
DealEnd
;
++
i
)
{
sig
[
df
][
i
][
0
]
=
(
pBufRx
[
i
][
0
]
*
freq_mv
[
df
][
i
][
0
]
-
pBufRx
[
i
][
1
]
*
freq_mv
[
df
][
i
][
1
]);
sig
[
df
][
i
][
1
]
=
(
pBufRx
[
i
][
0
]
*
freq_mv
[
df
][
i
][
1
]
+
pBufRx
[
i
][
1
]
*
freq_mv
[
df
][
i
][
0
]);
}
#pragma omp simd
for
(
size_t
i
=
0
;
i
<
DealEnd
;
++
i
)
{
cross
[
df
][
i
][
0
][
0
]
=
0
;
cross
[
df
][
i
][
0
][
1
]
=
0
;
cross
[
df
][
i
][
1
][
0
]
=
0
;
cross
[
df
][
i
][
1
][
1
]
=
0
;
for
(
size_t
j
=
0
;
j
<
WAVSIZE
;
++
j
)
{
cross
[
df
][
i
][
0
][
0
]
+=
(
sig
[
df
][
i
+
j
][
0
]
*
wav_xorr
[
0
][
j
][
0
]
-
sig
[
df
][
i
+
j
][
1
]
*
wav_xorr
[
0
][
j
][
1
]);
cross
[
df
][
i
][
0
][
1
]
+=
(
sig
[
df
][
i
+
j
][
0
]
*
wav_xorr
[
0
][
j
][
1
]
+
sig
[
df
][
i
+
j
][
1
]
*
wav_xorr
[
0
][
j
][
0
]);
cross
[
df
][
i
][
1
][
0
]
+=
(
sig
[
df
][
i
+
j
][
0
]
*
wav_xorr
[
1
][
j
][
0
]
-
sig
[
df
][
i
+
j
][
1
]
*
wav_xorr
[
1
][
j
][
1
]);
cross
[
df
][
i
][
1
][
1
]
+=
(
sig
[
df
][
i
+
j
][
0
]
*
wav_xorr
[
1
][
j
][
1
]
+
sig
[
df
][
i
+
j
][
1
]
*
wav_xorr
[
1
][
j
][
0
]);
}
judge
[
df
][
i
][
0
]
=
(
cross
[
df
][
i
][
0
][
0
]
/
32768
*
cross
[
df
][
i
][
0
][
0
]
/
32768
+
cross
[
df
][
i
][
0
][
1
]
/
32768
*
cross
[
df
][
i
][
0
][
1
]
/
32768
);
judge
[
df
][
i
][
1
]
=
(
cross
[
df
][
i
][
1
][
0
]
/
32768
*
cross
[
df
][
i
][
1
][
0
]
/
32768
+
cross
[
df
][
i
][
1
][
1
]
/
32768
*
cross
[
df
][
i
][
1
][
1
]
/
32768
);
}
float
maxv
=
0
;
#pragma omp simd
for
(
size_t
i
=
0
;
i
<
DealEnd
;
++
i
)
{
cross
[
i
][
0
][
0
]
+=
(
pBufRx
[
i
+
j
][
0
]
*
wav_xorr
[
0
][
j
][
0
]
-
pBufRx
[
i
+
j
][
1
]
*
wav_xorr
[
0
][
j
][
1
]);
cross
[
i
][
0
][
1
]
+=
(
pBufRx
[
i
+
j
][
0
]
*
wav_xorr
[
0
][
j
][
1
]
+
pBufRx
[
i
+
j
][
1
]
*
wav_xorr
[
0
][
j
][
0
])
;
cross
[
i
][
1
][
0
]
+=
(
pBufRx
[
i
+
j
][
0
]
*
wav_xorr
[
1
][
j
][
0
]
-
pBufRx
[
i
+
j
][
1
]
*
wav_xorr
[
1
][
j
][
1
]);
cross
[
i
][
1
][
1
]
+=
(
pBufRx
[
i
+
j
][
0
]
*
wav_xorr
[
1
][
j
][
1
]
+
pBufRx
[
i
+
j
][
1
]
*
wav_xorr
[
1
][
j
][
0
])
;
if
(
maxv
<
judge
[
df
][
i
][
0
])
maxv
=
judge
[
df
][
i
][
0
]
;
if
(
maxv
<
judge
[
df
][
i
][
1
])
maxv
=
judge
[
df
][
i
][
1
]
;
}
judge
[
i
][
0
]
=
(
cross
[
i
][
0
][
0
]
/
32768
*
cross
[
i
][
0
][
0
]
/
32768
+
cross
[
i
][
0
][
1
]
/
32768
*
cross
[
i
][
0
][
1
]
/
32768
);
judge
[
i
][
1
]
=
(
cross
[
i
][
1
][
0
]
/
32768
*
cross
[
i
][
1
][
0
]
/
32768
+
cross
[
i
][
1
][
1
]
/
32768
*
cross
[
i
][
1
][
1
]
/
32768
);
#pragma omp critical
{
if
(
maxv
>
maxAbs
)
{
maxAbs
=
maxv
;
maxDF
=
df
;
}
}
}
printf
(
"MaxDF=%d
\n
"
,
maxDF
);
for
(
size_t
i
=
0
;
i
<
DealEnd
;
++
i
)
{
if
(
judge
[
i
][
1
]
-
judge
[
i
][
0
]
>
20
000
)
if
(
judge
[
maxDF
][
i
][
0
]
>=
1000
||
judge
[
maxDF
][
i
][
1
]
>=
1
000
)
{
printf
(
"0=%f, 1=%f, 1
\n
"
,
judge
[
i
][
0
],
judge
[
i
][
1
]);
fflush
(
stdout
);
i
+=
WAVSIZE
;
}
else
if
(
judge
[
i
][
0
]
-
judge
[
i
][
1
]
>
20000
)
{
printf
(
"0=%f, 1=%f, 0
\n
"
,
judge
[
i
][
0
],
judge
[
i
][
1
]);
fflush
(
stdout
);
i
+=
WAVSIZE
;
if
(
judge
[
maxDF
][
i
][
0
]
*
8
<
judge
[
maxDF
][
i
][
1
])
{
printf
(
"%lu:0=%f, 1=%f, 1
\n
"
,
i
,
judge
[
maxDF
][
i
][
0
],
judge
[
maxDF
][
i
][
1
]);
fflush
(
stdout
);
i
+=
WAVSIZE
;
startDF
=
(
maxDF
-
2
)
<
0
?
0
:
(
maxDF
-
2
);
endDF
=
(
maxDF
+
2
)
>
steps
?
steps
:
((
maxDF
+
2
));
syn
=
true
;
}
else
if
(
judge
[
maxDF
][
i
][
1
]
*
8
<
judge
[
maxDF
][
i
][
0
])
{
printf
(
"%lu:0=%f, 1=%f, 0
\n
"
,
i
,
judge
[
maxDF
][
i
][
0
],
judge
[
maxDF
][
i
][
1
]);
fflush
(
stdout
);
i
+=
WAVSIZE
;
startDF
=
(
maxDF
-
2
)
<
0
?
0
:
(
maxDF
-
2
);
endDF
=
(
maxDF
+
2
)
>
steps
?
steps
:
((
maxDF
+
2
));
syn
=
true
;
}
}
}
//判决
curr_deal
=
1
-
deal
;
}
delete
[]
cross
;
delete
[]
judge
;
for
(
int
i
=
0
;
i
<
steps
;
++
i
)
{
delete
[]
cross
[
i
];
delete
[]
judge
[
i
];
delete
[]
freq_mv
[
i
];
delete
[]
sig
[
i
];
}
}
int
main
()
{
...
...
sdr_deepdetect/waveform.cpp
浏览文件 @
402d1229
...
...
@@ -3,7 +3,7 @@
#include "waveform.h"
//4倍符号速率
SPTYPE
wav_spread
[
2
][
WAVSIZE
][
2
];
SPTYPE
wav
[
2
][
MODRATE_N
][
2
];
static
SPTYPE
wav
[
2
][
MODRATE_N
][
2
];
float
wav_xorr
[
2
][
WAVSIZE
][
2
];
void
init_wavform
(
void
)
{
...
...
@@ -15,7 +15,7 @@ void init_wavform(void)
wav
[
1
][
i
][
1
]
=
-
C_AMP
;
}
//扩频
char
reg
[
21
]
=
{
1
,
1
,
0
,
0
,
1
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
1
};
char
reg
[
21
]
=
{
0
,
1
,
1
,
0
,
0
,
1
,
0
,
1
,
1
,
0
,
0
,
1
,
0
,
1
,
1
,
0
,
0
,
1
,
0
,
1
,
1
};
//seq[0]是 0的符号,1是1的符号。每个符号中的0,1又对应了wav的IQ路
char
seq
[
2
][
SPREAD_RAT
];
memset
(
seq
,
0
,
sizeof
(
seq
));
...
...
sdr_deepdetect/waveform.h
浏览文件 @
402d1229
...
...
@@ -2,8 +2,8 @@
#define WAVEFORM_H
typedef
short
SPTYPE
;
#define MODRATE_N 4
#define C_AMP
8192
#define SPREAD_RAT 1
00
#define C_AMP
30000
#define SPREAD_RAT 1
28
#define WAVSIZE SPREAD_RAT*MODRATE_N
extern
SPTYPE
wav_spread
[
2
][
WAVSIZE
][
2
];
extern
float
wav_xorr
[
2
][
WAVSIZE
][
2
];
...
...
uhd_cpp/uhd_the_ark.cpp
浏览文件 @
402d1229
...
...
@@ -47,13 +47,13 @@ int return_code = EXIT_SUCCESS;
static
const
int
modraten
=
4
;
//Sample rate in Hz
const
double
sprate
=
2
0
0000
;
const
double
sprate
=
2
4
0000
;
int
main
(
int
/*argc*/
,
char
*
/*argv*/
[])
{
const
char
dev_args
[]
=
""
;
//接收频率
double
rx_freq
=
20
0e6
;
double
rx_freq
=
61
0e6
;
double
rx_sprate
=
sprate
;
double
rx_gain
=
55.0
;
bool
rx_agc
=
true
;
...
...
@@ -62,9 +62,9 @@ int main(int /*argc*/, char* /*argv*/[])
size_t
rx_channel
[]
=
{
0
};
const
char
rx_ana
[]
=
"RX2"
;
double
tx_freq
=
20
0e6
;
double
tx_freq
=
61
0e6
;
double
tx_sprate
=
sprate
;
double
tx_gain
=
4
0
;
double
tx_gain
=
7
0
;
double
tx_bw
=
sprate
;
//发射信号。MIMO时,可以指定0,1
size_t
tx_channel
[]
=
{
0
};
...
...
@@ -368,7 +368,7 @@ int do_io(
}
static
const
int
amp
=
1024
;
static
const
int
amp
=
30000
;
static
const
int
spread_ratio
=
128
;
static
const
size_t
wav_size
=
spread_ratio
*
modraten
;
static
short
wav_spread
[
2
][
wav_size
][
2
];
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录