Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
colorEagleStdio
qtcpp_demo
提交
37a155eb
qtcpp_demo
项目概览
colorEagleStdio
/
qtcpp_demo
通知
463
Star
24
Fork
12
代码
文件
提交
分支
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 搜索 >>
提交
37a155eb
编写于
9月 16, 2021
作者:
M
manjaro-xfce
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
软件无线电-相关使用FFT
上级
f3225970
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
62 addition
and
21 deletion
+62
-21
uhd_cpp/sdr.pro
uhd_cpp/sdr.pro
+1
-1
uhd_cpp/uhd_the_ark.cpp
uhd_cpp/uhd_the_ark.cpp
+61
-20
未找到文件。
uhd_cpp/sdr.pro
浏览文件 @
37a155eb
...
...
@@ -5,5 +5,5 @@ CONFIG -= qt
SOURCES
+=
\
uhd_the_ark
.
cpp
LIBS
+=
-
luhd
-
lpthread
-
lgomp
LIBS
+=
-
luhd
-
lpthread
-
lgomp
-
lfftw3
QMAKE_CXXFLAGS_RELEASE
+=
-
fopenmp
-
O3
-
fopenmp
-
mavx2
uhd_cpp/uhd_the_ark.cpp
浏览文件 @
37a155eb
...
...
@@ -15,7 +15,7 @@
#include <atomic>
#include <iostream>
#include <uhd.h>
#include <fftw3.h>
static
bool
stop_signal_called
=
false
;
static
char
error_string
[
1024
];
static
char
err_msg
[
1024
];
...
...
@@ -47,13 +47,13 @@ int return_code = EXIT_SUCCESS;
static
const
int
modraten
=
4
;
//Sample rate in Hz
const
double
sprate
=
2
4
0000
;
const
double
sprate
=
2
5
0000
;
int
main
(
int
/*argc*/
,
char
*
/*argv*/
[])
{
const
char
dev_args
[]
=
""
;
//接收频率
double
rx_freq
=
61
0e6
;
double
rx_freq
=
20
0e6
;
double
rx_sprate
=
sprate
;
double
rx_gain
=
55.0
;
bool
rx_agc
=
true
;
...
...
@@ -62,12 +62,12 @@ int main(int /*argc*/, char* /*argv*/[])
size_t
rx_channel
[]
=
{
0
};
const
char
rx_ana
[]
=
"RX2"
;
double
tx_freq
=
61
0e6
;
double
tx_freq
=
20
0e6
;
double
tx_sprate
=
sprate
;
double
tx_gain
=
70
;
double
tx_bw
=
sprate
;
//发射信号。MIMO时,可以指定0,1
size_t
tx_channel
[]
=
{
0
};
size_t
tx_channel
[]
=
{
1
};
const
char
tx_ana
[]
=
"TX/RX"
;
if
(
sizeof
(
rx_channel
)
>
sizeof
(
rx_channel
[
0
])
||
sizeof
(
tx_channel
)
>
sizeof
(
tx_channel
[
0
])
)
...
...
@@ -196,7 +196,7 @@ int main(int /*argc*/, char* /*argv*/[])
// Set gain
fprintf
(
stderr
,
"Setting TX Gain: %f db...
\n
"
,
tx_gain
);
UHD_DO
(
uhd_usrp_set_tx_gain
(
usrp
,
tx_gain
,
0
,
""
));
UHD_DO
(
uhd_usrp_set_tx_gain
(
usrp
,
tx_gain
,
tx_channel
[
0
]
,
""
));
// See what gain actually is
UHD_DO
(
uhd_usrp_get_tx_gain
(
usrp
,
tx_channel
[
0
],
""
,
&
tx_gain
));
...
...
@@ -368,7 +368,7 @@ int do_io(
}
static
const
int
amp
=
30000
;
static
const
int
amp
=
8192
;
static
const
int
spread_ratio
=
128
;
static
const
size_t
wav_size
=
spread_ratio
*
modraten
;
static
short
wav_spread
[
2
][
wav_size
][
2
];
...
...
@@ -474,6 +474,18 @@ void dealer()
const
unsigned
int
half_sz
=
wav_size
/
2
;
short
(
*
pBufRx
)[
2
]
=
rx_buf_ptr
.
get
();
double
(
*
ampwin
)[
2
]
=
new
double
[
wav_size
][
2
];
fftw_complex
*
in
[
2
],
*
out
[
2
];
fftw_plan
p
[
2
];
in
[
0
]
=
(
fftw_complex
*
)
fftw_malloc
(
sizeof
(
fftw_complex
)
*
wav_size
);
out
[
0
]
=
(
fftw_complex
*
)
fftw_malloc
(
sizeof
(
fftw_complex
)
*
wav_size
);
p
[
0
]
=
fftw_plan_dft_1d
(
wav_size
,
in
[
0
],
out
[
0
],
FFTW_FORWARD
,
FFTW_ESTIMATE
);
in
[
1
]
=
(
fftw_complex
*
)
fftw_malloc
(
sizeof
(
fftw_complex
)
*
wav_size
);
out
[
1
]
=
(
fftw_complex
*
)
fftw_malloc
(
sizeof
(
fftw_complex
)
*
wav_size
);
p
[
1
]
=
fftw_plan_dft_1d
(
wav_size
,
in
[
1
],
out
[
1
],
FFTW_FORWARD
,
FFTW_ESTIMATE
);
//fftw_execute(p); /* repeat as needed */
double
globalMax
=
0
;
while
(
!
stop_signal_called
)
{
if
(
deal_count
+
wav_size
>=
rx_count
||
rx_count
<
wav_size
)
...
...
@@ -489,20 +501,44 @@ void dealer()
++
deal_count
;
continue
;
}
double
cross
[
2
][
2
]
=
{{
0
,
0
},{
0
,
0
}};
unsigned
long
long
start_x
=
deal_count
-
wav_size
;
//xorr
#pragma omp simd
for
(
size_t
i
=
0
;
i
<
wav_size
;
++
i
)
{
const
int
xb
=
(
start_x
+
i
)
%
rxbuf_points
;
cross
[
0
][
0
]
+=
(
pBufRx
[
xb
][
0
]
*
wav_xorr
[
0
][
i
][
0
]
-
pBufRx
[
xb
][
1
]
*
wav_xorr
[
0
][
i
][
1
]);
cross
[
0
][
1
]
+=
(
pBufRx
[
xb
][
0
]
*
wav_xorr
[
0
][
i
][
1
]
+
pBufRx
[
xb
][
1
]
*
wav_xorr
[
0
][
i
][
0
]);
cross
[
1
][
0
]
+=
(
pBufRx
[
xb
][
0
]
*
wav_xorr
[
1
][
i
][
0
]
-
pBufRx
[
xb
][
1
]
*
wav_xorr
[
1
][
i
][
1
]);
cross
[
1
][
1
]
+=
(
pBufRx
[
xb
][
0
]
*
wav_xorr
[
1
][
i
][
1
]
+
pBufRx
[
xb
][
1
]
*
wav_xorr
[
1
][
i
][
0
]);
in
[
0
][
i
][
0
]
=
(
pBufRx
[
xb
][
0
]
*
wav_xorr
[
0
][
i
][
0
]
-
pBufRx
[
xb
][
1
]
*
wav_xorr
[
0
][
i
][
1
])
/
16384.0
;
in
[
0
][
i
][
1
]
=
(
pBufRx
[
xb
][
0
]
*
wav_xorr
[
0
][
i
][
1
]
+
pBufRx
[
xb
][
1
]
*
wav_xorr
[
0
][
i
][
0
])
/
16384.0
;
in
[
1
][
i
][
0
]
=
(
pBufRx
[
xb
][
0
]
*
wav_xorr
[
1
][
i
][
0
]
-
pBufRx
[
xb
][
1
]
*
wav_xorr
[
1
][
i
][
1
])
/
16384.0
;
in
[
1
][
i
][
1
]
=
(
pBufRx
[
xb
][
0
]
*
wav_xorr
[
1
][
i
][
1
]
+
pBufRx
[
xb
][
1
]
*
wav_xorr
[
1
][
i
][
0
])
/
16384.0
;
}
fftw_execute
(
p
[
0
]);
fftw_execute
(
p
[
1
]);
double
max_abs0
=
0
,
max_abs1
=
0
;
for
(
size_t
i
=
0
;
i
<
wav_size
;
++
i
)
{
const
double
a0
=
out
[
0
][
i
][
0
]
*
out
[
0
][
i
][
0
]
+
out
[
0
][
i
][
1
]
*
out
[
0
][
i
][
1
];
const
double
a1
=
out
[
1
][
i
][
0
]
*
out
[
1
][
i
][
0
]
+
out
[
1
][
i
][
1
]
*
out
[
1
][
i
][
1
];
if
(
a0
>
max_abs0
)
max_abs0
=
a0
;
if
(
a1
>
max_abs1
)
max_abs1
=
a1
;
}
ampwin
[
deal_count
%
wav_size
][
0
]
=
max_abs0
;
ampwin
[
deal_count
%
wav_size
][
1
]
=
max_abs1
;
if
(
globalMax
<
max_abs0
)
{
printf
(
"%lf,%lf
\n
"
,
max_abs0
,
max_abs1
);
globalMax
=
max_abs0
;
}
if
(
globalMax
<
max_abs1
)
{
printf
(
"%lf,%lf
\n
"
,
max_abs0
,
max_abs1
);
globalMax
=
max_abs1
;
}
ampwin
[
deal_count
%
wav_size
][
0
]
=
cross
[
0
][
0
]
/
32768.0
*
cross
[
0
][
0
]
/
32768.0
+
cross
[
0
][
1
]
/
32768.0
*
cross
[
0
][
1
]
/
32768.0
;
ampwin
[
deal_count
%
wav_size
][
1
]
=
cross
[
1
][
0
]
/
32768.0
*
cross
[
1
][
0
]
/
32768.0
+
cross
[
1
][
1
]
/
32768.0
*
cross
[
1
][
1
]
/
32768.0
;
bool
best0
=
true
,
best1
=
true
;
...
...
@@ -515,23 +551,28 @@ void dealer()
if
(
ampwin
[(
deal_count
+
i
-
wav_size
)
%
wav_size
][
1
]
>=
ampwin
[(
deal_count
+
half_sz
-
wav_size
)
%
wav_size
][
1
])
best1
=
false
;
}
if
(
ampwin
[(
deal_count
+
i
-
wav_size
)
%
wav_size
][
1
]
*
8
>=
ampwin
[(
deal_count
+
half_sz
-
wav_size
)
%
wav_size
][
0
])
best0
=
false
;
if
(
ampwin
[(
deal_count
+
i
-
wav_size
)
%
wav_size
][
0
]
*
8
>=
ampwin
[(
deal_count
+
half_sz
-
wav_size
)
%
wav_size
][
1
])
best1
=
false
;
}
if
(
ampwin
[(
deal_count
+
half_sz
-
wav_size
)
%
wav_size
][
1
]
*
10
>=
ampwin
[(
deal_count
+
half_sz
-
wav_size
)
%
wav_size
][
0
])
best0
=
false
;
if
(
ampwin
[(
deal_count
+
half_sz
-
wav_size
)
%
wav_size
][
0
]
*
10
>=
ampwin
[(
deal_count
+
half_sz
-
wav_size
)
%
wav_size
][
1
])
best1
=
false
;
if
(
best0
)
{
//next_test = deal_count + wav_size - modraten * 4
;
next_test
=
deal_count
+
wav_size
/
2
-
modraten
*
16
;
putchar
(
'0'
);
}
else
if
(
best1
)
{
//next_test = deal_count + wav_size - modraten * 4
;
next_test
=
deal_count
+
wav_size
/
2
-
modraten
*
16
;
putchar
(
'1'
);
}
++
deal_count
;
}
delete
[]
ampwin
;
fftw_destroy_plan
(
p
[
0
]);
fftw_free
(
in
[
0
]);
fftw_free
(
out
[
0
]);
fftw_destroy_plan
(
p
[
1
]);
fftw_free
(
in
[
1
]);
fftw_free
(
out
[
1
]);
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录