Skip to content

IqSimulator #10

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ add_executable(blah2
src/capture/Source.cpp
src/capture/rspduo/RspDuo.cpp
src/capture/usrp/Usrp.cpp
src/capture/iqsimulator/IqSimulator.cpp
src/capture/iqsimulator/TgtGen.cpp
src/process/ambiguity/Ambiguity.cpp
src/process/clutter/WienerHopf.cpp
src/process/detection/CfarDetector1D.cpp
Expand All @@ -57,6 +59,7 @@ add_executable(blah2
src/data/Detection.cpp
src/data/Track.cpp
src/data/meta/Timing.cpp
src/utilities/Conversions.cpp
)

target_link_libraries(blah2 PRIVATE
Expand Down
120 changes: 70 additions & 50 deletions api/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ var stash_map = require('./stash/maxhold.js');
var stash_detection = require('./stash/detection.js');
var stash_iqdata = require('./stash/iqdata.js');
var stash_timing = require('./stash/timing.js');
var stash_falsetargets = require('./stash/falsetargets.js');

// constants
const PORT = 3000;
Expand All @@ -16,19 +17,21 @@ var track = '';
var timestamp = '';
var timing = '';
var iqdata = '';
var falsetargets = '';
var data = '';
var data_map;
var data_detection;
var data_tracker;
var data_timestamp;
var data_timing;
var data_iqdata;
var data_falsetargets;
var capture = false;

// api server
const app = express();
// header on all requests
app.use(function(req, res, next) {
app.use(function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header('Cache-Control', 'private, no-cache, no-store, must-revalidate');
res.header('Expires', '-1');
Expand Down Expand Up @@ -56,6 +59,9 @@ app.get('/api/timing', (req, res) => {
app.get('/api/iqdata', (req, res) => {
res.send(iqdata);
});
app.get('/api/falsetargets', (req, res) => {
res.send(falsetargets);
});

// stash API
app.get('/stash/map', (req, res) => {
Expand All @@ -70,6 +76,9 @@ app.get('/stash/iqdata', (req, res) => {
app.get('/stash/timing', (req, res) => {
res.send(stash_timing.get_data_timing());
});
app.get('/stash/falsetargets', (req, res) => {
res.send(stash_falsetargets.get_data_falsetargets());
});

// read state of capture
app.get('/capture', (req, res) => {
Expand All @@ -85,100 +94,111 @@ app.listen(PORT, HOST, () => {
});

// tcp listener map
const server_map = net.createServer((socket)=>{
socket.write("Hello From Server!")
socket.on("data",(msg)=>{
data_map = data_map + msg.toString();
if (data_map.slice(-1) === "}")
{
map = data_map;
data_map = '';
}
});
socket.on("close",()=>{
console.log("Connection closed.");
})
const server_map = net.createServer((socket) => {
socket.write("Hello From Server!")
socket.on("data", (msg) => {
data_map = data_map + msg.toString();
if (data_map.slice(-1) === "}") {
map = data_map;
data_map = '';
}
});
socket.on("close", () => {
console.log("Connection closed.");
})
});
server_map.listen(3001);

// tcp listener detection
const server_detection = net.createServer((socket)=>{
const server_detection = net.createServer((socket) => {
socket.write("Hello From Server!")
socket.on("data",(msg)=>{
data_detection = data_detection + msg.toString();
if (data_detection.slice(-1) === "}")
{
detection = data_detection;
data_detection = '';
}
socket.on("data", (msg) => {
data_detection = data_detection + msg.toString();
if (data_detection.slice(-1) === "}") {
detection = data_detection;
data_detection = '';
}
});
socket.on("close",()=>{
console.log("Connection closed.");
socket.on("close", () => {
console.log("Connection closed.");
})
});
server_detection.listen(3002);

// tcp listener tracker
const server_tracker = net.createServer((socket)=>{
const server_tracker = net.createServer((socket) => {
socket.write("Hello From Server!")
socket.on("data",(msg)=>{
data_tracker = data_tracker + msg.toString();
if (data_tracker.slice(-1) === "}")
{
track = data_tracker;
data_tracker = '';
}
socket.on("data", (msg) => {
data_tracker = data_tracker + msg.toString();
if (data_tracker.slice(-1) === "}") {
track = data_tracker;
data_tracker = '';
}
});
socket.on("close",()=>{
console.log("Connection closed.");
socket.on("close", () => {
console.log("Connection closed.");
})
});
server_tracker.listen(3003);

// tcp listener timestamp
const server_timestamp = net.createServer((socket)=>{
const server_timestamp = net.createServer((socket) => {
socket.write("Hello From Server!")
socket.on("data",(msg)=>{
socket.on("data", (msg) => {
data_timestamp = data_timestamp + msg.toString();
timestamp = data_timestamp;
data_timestamp = '';
});
socket.on("close",()=>{
console.log("Connection closed.");
socket.on("close", () => {
console.log("Connection closed.");
})
});
server_timestamp.listen(4000);

// tcp listener timing
const server_timing = net.createServer((socket)=>{
const server_timing = net.createServer((socket) => {
socket.write("Hello From Server!")
socket.on("data",(msg)=>{
socket.on("data", (msg) => {
data_timing = data_timing + msg.toString();
if (data_timing.slice(-1) === "}")
{
if (data_timing.slice(-1) === "}") {
timing = data_timing;
data_timing = '';
}
});
socket.on("close",()=>{
console.log("Connection closed.");
socket.on("close", () => {
console.log("Connection closed.");
})
});
server_timing.listen(4001);

// tcp listener iqdata metadata
const server_iqdata = net.createServer((socket)=>{
const server_iqdata = net.createServer((socket) => {
socket.write("Hello From Server!")
socket.on("data",(msg)=>{
socket.on("data", (msg) => {
data_iqdata = data_iqdata + msg.toString();
if (data_iqdata.slice(-1) === "}")
{
if (data_iqdata.slice(-1) === "}") {
iqdata = data_iqdata;
data_iqdata = '';
}
});
socket.on("close",()=>{
console.log("Connection closed.");
socket.on("close", () => {
console.log("Connection closed.");
})
});
server_iqdata.listen(4002);

// tcp listener falsetargets
const server_falsetargets = net.createServer((socket) => {
socket.write("Hello From Server!")
socket.on("data", (msg) => {
data_falsetargets = data_falsetargets + msg.toString();
if (data_falsetargets.slice(-1) === "}") {
falsetargets = data_falsetargets;
data_falsetargets = '';
}
});
socket.on("close", () => {
console.log("Connection closed.");
})
});
server_falsetargets.listen(4003);
50 changes: 50 additions & 0 deletions api/stash/falsetargets.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
const http = require('http');

var falsetargets = [];
frequency = [];
var ts = '';
var output = [];
const options_falsetargets = {
host: '127.0.0.1',
path: '/api/falsetargets',
port: 3000
};

function update_data() {

// check if timestamp is updated
http.get(options_falsetargets, function (res) {
res.setEncoding('utf8');
res.on('data', function (body) {
if (ts != body) {
ts = body;
http.get(options_falsetargets, function (res) {
let body_map = '';
res.setEncoding('utf8');
res.on('data', (chunk) => {
body_map += chunk;
});
res.on('end', () => {
try {

output = JSON.parse(body_map);
// false targets
falsetargets.push(output.falsetargets);
} catch (e) {
console.error(e.message);
}
});
});
}
});
});

};

setInterval(update_data, 100);

function get_data() {
return output;
};

module.exports.get_data_falsetargets = get_data;
17 changes: 9 additions & 8 deletions config/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ capture:
fs: 2000000
fc: 204640000
device:
type: "RspDuo"
type: "IqSimulator"
replay:
state: false
loop: true
Expand All @@ -14,13 +14,13 @@ process:
buffer: 1.5
overlap: 0
ambiguity:
delayMin: -10
delayMax: 400
dopplerMin: -200
dopplerMax: 200
delayMin: -10 # bins
delayMax: 400 # bins
dopplerMin: -200 # Hz
dopplerMax: 200 # Hz
clutter:
delayMin: -10
delayMax: 400
delayMin: -10 # bins
delayMax: 400 # bins
detection:
pfa: 0.00001
nGuard: 2
Expand All @@ -46,6 +46,7 @@ network:
timestamp: 4000
timing: 4001
iqdata: 4002
falsetargets: 4003

truth:
asdb:
Expand All @@ -58,7 +59,7 @@ truth:
port: 30001

save:
iq: true
iq: false
map: false
detection: false
timing: false
Expand Down
28 changes: 28 additions & 0 deletions config/false_targets.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
targets:
- id: 0
type: "static"
location:
range: 10000 # meters
velocity:
doppler: 50 # Hertz
rcs: -20 # dBsm - this is a bit contrived for a static target
state: "active"

- id: 1
type: "static"
location:
range: 30000 # meters
velocity:
doppler: -150 # Hertz
rcs: -20 # dBsm
state: "active"

- id: 2
type: "moving_radar"
location:
range: 5000 # meters
velocity:
doppler: 100 # Hertz
dopplerRate: 0 # Hertz/second
rcs: -20 # dBsm - this is also contrived
state: "active"
1 change: 1 addition & 0 deletions html/controller/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
<li class="py-1"><a class="text-reset text-decoration-none" href="/display/detection/delay-doppler">Detections in delay-Doppler over time</a></li>
<li class="py-1"><a class="text-reset text-decoration-none" href="/display/spectrum">Spectrum reference</a></li>
<li class="py-1"><a class="text-reset text-decoration-none" href="/display/timing">Timing display</a></li>
<li class="py-1"><a class="text-reset text-decoration-none" href="/display/falsetargets">False Target Data</a></li>
</ul>
</div>
<div class="col-sm-12 col-md-12">
Expand Down
25 changes: 25 additions & 0 deletions html/display/falsetargets/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="UTF-8">
<title>blah2</title>
<!-- load lib js -->
<script src="../../lib/bootstrap-5.2.3.min.js"></script>
<script src="../../lib/jquery-3.6.4.min.js"></script>
<!-- load lib css -->
<link rel="stylesheet" href="../../lib/bootstrap-5.2.3.min.css">
<style>
</style>
</head>
<body style="background-color:#f78c58;">
<div style="height: 100vh; width: 95vw" class="container-fluid">
<div style="height: 100vh; width: 95vw" class="row d-flex">
<div class="justify-content-center" id="data"></div>
</div>
</body>
<script>
xTitle = "False Targets";
</script>
<script src="../../js/table_falsetargets.js"></script>
</html>
Loading