Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
sfewfsaf
qtcpp_demo
提交
c300b65a
qtcpp_demo
项目概览
sfewfsaf
/
qtcpp_demo
与 Fork 源项目一致
Fork自
colorEagleStdio / qtcpp_demo
通知
3
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 搜索 >>
提交
c300b65a
编写于
1月 22, 2021
作者:
M
manjaro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
b210 Linux 下 61.44M 连续处理
上级
9e159a6f
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
71 addition
and
40 deletion
+71
-40
uhd_cpp/uhd_spectrum/main.cpp
uhd_cpp/uhd_spectrum/main.cpp
+6
-1
uhd_cpp/uhd_spectrum/specwidget.cpp
uhd_cpp/uhd_spectrum/specwidget.cpp
+16
-21
uhd_cpp/uhd_spectrum/uhd_device.cpp
uhd_cpp/uhd_spectrum/uhd_device.cpp
+41
-12
uhd_cpp/uhd_spectrum/uhd_device.h
uhd_cpp/uhd_spectrum/uhd_device.h
+8
-6
未找到文件。
uhd_cpp/uhd_spectrum/main.cpp
浏览文件 @
c300b65a
#include "specwidget.h"
#ifdef __GNUC__
#include <unistd.h>
#endif
#include <QApplication>
int
main
(
int
argc
,
char
*
argv
[])
{
#ifdef __GNUC__
nice
(
0
);
#endif
QApplication
a
(
argc
,
argv
);
specWidget
w
;
w
.
show
();
...
...
uhd_cpp/uhd_spectrum/specwidget.cpp
浏览文件 @
c300b65a
...
...
@@ -431,8 +431,8 @@ void specWidget::resetFFT()
{
if
(
save_count
+
100
<
rx_count
)
{
s
td
::
shared_ptr
<
short
>
buf
=
vec_buffer
[
save_count
%
bufsz
];
size_t
len
=
vec_buffersz
[
save_count
%
bufsz
];
s
hort
*
buf
=
m_buffer_iq
[
save_count
%
bufsz
];
size_t
len
=
m_buf_iqsize
[
save_count
%
bufsz
];
++
save_count
;
if
(
!
m_bSaveToFile
)
{
...
...
@@ -459,7 +459,7 @@ void specWidget::resetFFT()
}
if
(
!
m_bSaveToFile
)
continue
;
fOut
.
write
((
char
*
)
buf
.
get
()
,
len
*
sizeof
(
short
)
*
2
);
fOut
.
write
((
char
*
)
buf
,
len
*
sizeof
(
short
)
*
2
);
}
else
QThread
::
msleep
(
10
);
...
...
@@ -502,44 +502,39 @@ void specWidget::appendWavComplex(const double (* pWav)[2], const int count, dou
void
specWidget
::
timerEvent
(
QTimerEvent
*
e
)
{
static
std
::
shared_ptr
<
double
>
ppbuf
(
new
double
[
65536
*
4
]);
static
std
::
shared_ptr
<
double
>
ppbuf
(
new
double
[
65536
*
16
]);
static
double
(
*
pBufIQ
)[
2
]
=
(
double
(
*
)[
2
])
ppbuf
.
get
();
const
int
fft_bytes_needed
=
m_nFFTSize
*
2
*
2
;
//int fft
if
(
e
->
timerId
()
==
m_nTimerID
)
{
const
int
num_blocks
=
m_nFFTSize
/
m_spb_size
+
3
;
if
(
!
m_bSaveToFile
)
{
const
int
sppoints
=
fft_bytes_needed
/
(
sizeof
(
short
))
/
(
2
);
Q_ASSERT
(
sppoints
==
m_nFFTSize
);
{
double
ref1v
=
16384
;
int
curr_tx
=
(
rx_count
+
bufsz
-
100
)
%
bufsz
;
int
curr_tx
=
(
rx_count
+
bufsz
-
num_blocks
)
%
bufsz
;
int
total_cp
=
0
;
memset
(
pBufIQ
,
0
,
sizeof
(
double
)
*
2
*
sppoints
);
while
(
total_cp
<
sppoints
)
//
memset(pBufIQ,0,sizeof(double)*2*sppoints);
while
(
total_cp
<
m_nFFTSize
)
{
const
size_t
sz
=
vec_buffersz
[
curr_tx
];
const
short
(
*
datap
)[
2
]
=
(
const
short
(
*
)[
2
])
vec_buffer
[
curr_tx
].
get
()
;
for
(
size_t
i
=
0
;
i
<
sz
&&
total_cp
<
sppoints
;
++
i
,
++
total_cp
)
const
size_t
sz
=
m_buf_iqsize
[
curr_tx
];
const
short
(
*
datap
)[
2
]
=
(
const
short
(
*
)[
2
])
m_buffer_iq
[
curr_tx
]
;
for
(
size_t
i
=
0
;
i
<
sz
&&
total_cp
<
m_nFFTSize
;
++
i
,
++
total_cp
)
{
double
hv
=
(
1
-
0.46
)
-
0.46
*
cos
(
2
*
3.1415926
*
total_cp
/
(
sppoints
-
1
));
pBufIQ
[
total_cp
][
0
]
=
datap
[
i
][
0
]
*
hv
;
pBufIQ
[
total_cp
][
1
]
=
datap
[
i
][
1
]
*
hv
;
pBufIQ
[
total_cp
][
0
]
=
datap
[
i
][
0
];
pBufIQ
[
total_cp
][
1
]
=
datap
[
i
][
1
];
}
++
curr_tx
;
curr_tx
%=
bufsz
;
if
(
!
sz
)
break
;
}
appendWavComplex
(
pBufIQ
,
sppoints
,
ref1v
);
appendWavComplex
(
pBufIQ
,
m_nFFTSize
,
ref1v
);
if
(
m_nCurrentCenter
>=
0
&&
m_nCurrentCenter
<
m_nFFTSize
)
{
ui
->
sMeter
->
setLevel
(
m_dFFTAmp
[
m_nCurrentCenter
]);
//ui->sMeter->setSqlLevel(m_dFFTAmp[m_nCurrentCenter]);
}
ui
->
lcdNumber_saveBehind
->
display
(
int
(
rx_count
*
m_spb_size
*
4
/
1024
/
1024
));
}
else
{
...
...
uhd_cpp/uhd_spectrum/uhd_device.cpp
浏览文件 @
c300b65a
#include "uhd_device.h"
#include <QThread>
#include <QDebug>
#include <QCoreApplication>
using
uhd
::
tune_request_t
;
using
uhd
::
tx_streamer
;
...
...
@@ -36,11 +37,17 @@ uhd_device::uhd_device()
,
streaming
(
false
)
,
rx_count
(
0
)
{
m_buffer_tmFrag
=
new
double
[
bufsz
];
m_buffer_tmSec
=
new
long
long
[
bufsz
];
m_buffer_iq_all
=
new
short
[
bufsz
*
m_spb_size
*
2
];
m_buffer_iq
=
new
short
*
[
bufsz
];
m_buf_iqsize
=
new
int
[
bufsz
];
for
(
int
i
=
0
;
i
<
bufsz
;
++
i
)
{
vec_buffer
.
push_back
(
shared_ptr
<
short
>
(
new
short
[
m_spb_size
*
2
]));
vec_buffersz
.
push_back
(
0
);
vec_buffer_tm
.
push_back
(
uhd
::
time_spec_t
());
m_buffer_tmFrag
[
i
]
=
0
;
m_buffer_tmSec
[
i
]
=
0
;
m_buffer_iq
[
i
]
=
&
m_buffer_iq_all
[
i
*
m_spb_size
*
2
];
m_buf_iqsize
[
i
]
=
0
;
}
}
...
...
@@ -51,11 +58,17 @@ uhd_device::uhd_device(const std::string &args)
,
rx_count
(
0
)
{
m_buffer_tmFrag
=
new
double
[
bufsz
];
m_buffer_tmSec
=
new
long
long
[
bufsz
];
m_buffer_iq_all
=
new
short
[
bufsz
*
m_spb_size
*
2
];
m_buffer_iq
=
new
short
*
[
bufsz
];
m_buf_iqsize
=
new
int
[
bufsz
];
for
(
int
i
=
0
;
i
<
bufsz
;
++
i
)
{
vec_buffer
.
push_back
(
shared_ptr
<
short
>
(
new
short
[
m_spb_size
*
2
]));
vec_buffersz
.
push_back
(
0
);
vec_buffer_tm
.
push_back
(
uhd
::
time_spec_t
());
m_buffer_tmFrag
[
i
]
=
0
;
m_buffer_tmSec
[
i
]
=
0
;
m_buffer_iq
[
i
]
=
&
m_buffer_iq_all
[
i
*
m_spb_size
*
2
];
m_buf_iqsize
[
i
]
=
0
;
}
}
uhd_device
::~
uhd_device
()
...
...
@@ -66,6 +79,13 @@ uhd_device::~uhd_device()
QThread
::
msleep
(
100
);
}
delete
[]
m_buffer_tmFrag
;
delete
[]
m_buffer_tmSec
;
delete
[]
m_buffer_iq_all
;
delete
[]
m_buffer_iq
;
delete
[]
m_buf_iqsize
;
}
void
uhd_device
::
setDevArgs
(
const
std
::
string
&
args
)
...
...
@@ -143,21 +163,30 @@ void uhd_device::run_IO()
stream_cmd
.
time_spec
=
uhd
::
time_spec_t
();
streaming
=
true
;
rx_stream
->
issue_stream_cmd
(
stream_cmd
);
try
{
while
(
!
stop_signal_called
)
{
vec_buffersz
[
rx_count
%
bufsz
]
=
rx_stream
->
recv
((
void
*
)(
vec_buffer
[
rx_count
%
bufsz
].
get
()),
m_spb_size
,
md_rx
,
0.1
,
false
);
//md_rx可以读取时戳
vec_buffer_tm
[
rx_count
%
bufsz
]
=
md_rx
.
time_spec
;
const
int
off
=
rx_count
%
bufsz
;
m_buf_iqsize
[
off
]
=
rx_stream
->
recv
((
void
*
)(
m_buffer_iq
[
off
]),
m_spb_size
,
md_rx
,
10
,
false
);
++
rx_count
;
//md_rx可以读取时戳
m_buffer_tmFrag
[
off
]
=
md_rx
.
time_spec
.
get_frac_secs
();
m_buffer_tmSec
[
off
]
=
md_rx
.
time_spec
.
get_full_secs
();
if
(
md_rx
.
error_code
==
uhd
::
rx_metadata_t
::
ERROR_CODE_TIMEOUT
)
fputs
(
"Time out."
,
stderr
);
{
fputs
(
"Tout"
,
stderr
);
rx_stream
->
issue_stream_cmd
(
stream_cmd
);
}
else
if
(
md_rx
.
error_code
==
uhd
::
rx_metadata_t
::
ERROR_CODE_OVERFLOW
)
fputs
(
"Over flow"
,
stderr
);
{
fputs
(
"O"
,
stderr
);
rx_stream
->
issue_stream_cmd
(
stream_cmd
);
}
else
if
(
md_rx
.
error_code
!=
uhd
::
rx_metadata_t
::
ERROR_CODE_NONE
)
{
cerr
<<
"Receiver error: "
<<
md_rx
.
strerror
()
<<
endl
;
stop_signal_called
=
true
;
rx_stream
->
issue_stream_cmd
(
stream_cmd
)
;
}
}
...
...
uhd_cpp/uhd_spectrum/uhd_device.h
浏览文件 @
c300b65a
...
...
@@ -41,17 +41,19 @@ protected:
std
::
atomic
<
bool
>
stop_signal_called
;
std
::
atomic
<
bool
>
streaming
;
std
::
string
m_dev_args
;
size_t
m_spb_size
=
10000
;
size_t
m_spb_size
=
65536
;
uhd
::
usrp
::
multi_usrp
::
sptr
usrp
;
int
m_channel
=
0
;
protected:
//初始化队列
std
::
vector
<
uhd
::
time_spec_t
>
vec_buffer_tm
;
std
::
vector
<
std
::
shared_ptr
<
short
>
>
vec_buffer
;
std
::
vector
<
int
>
vec_buffersz
;
const
int
bufsz
=
65536
;
double
*
m_buffer_tmFrag
;
long
long
*
m_buffer_tmSec
;
short
*
m_buffer_iq_all
;
short
*
*
m_buffer_iq
;
int
*
m_buf_iqsize
;
const
int
bufsz
=
1024
;
//收发计数
std
::
atomic
<
long
long
>
rx_count
;
long
long
rx_count
;
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录