Code Monkey home page Code Monkey logo

emitter-detection-book's Introduction

MATLAB Companion to Emitter Detection and Geolocation for Electronic Warfare

This repository contains the MATLAB code, released under the MIT License, that generates all of the figures and implements all of the algorithms and many of the performance calculations within the texts Emitter Detection and Geolocation for Electronic Warfare, by Nicholas A. O'Donoughue, Artech House, 2019 and Practical Geolocation for Electronic Warfare using MATLAB, by Nicholas A. O'Donoughue, Artech House, 2022.

The textbooks can be purchased from Artech House directly at the following links: Emitter Detection and Geolocation for Electronic Warfare, and Practical Geolocation for Electronic Warfare using MATLAB Both are also available from Amazon.

A python port is in progress, check the git repository.

Update 20221027 -- Additional Features Complete

This repository now contains code for several new features, discussed in the second textbook.

A few of the new features include:

  • Scripts for handling 3D coordinate systems (including ENU, ECEF, and Geodetic Lat/Lon)
  • The ability to specify arbitrary test/reference sensor pairs for TDOA and FDOA (as opposed to setting the final sensor to be a common reference), along with code to modify covariance matrices to translate from sensor-level errors (TOA/FOA on each sensor) to measurement-level (covariance of TDOA and FDOA measurements between sensor pairs). Many of the examples from the first textbook have been updated to refer to the new utilities.
  • Generic solvers for constrained cases (see the +utils/+constraints/ folder). Examples for the second book are contained in the examples/ folder, and contain the prefix book2_; figure generator functions contain the same prefix.

Installation

Simply open the folder in MATLAB or add the root folder containing this repository to the MATLAB search path. Clone this repository, or download the latest release from the Mathworks File Exchange.

View Emitter Detection and Geolocation for Electronic Warfare on File Exchange

Figures

To generate the figures in the book, execute the script runAll.m.

Warning: Some of the figures are generated through a Monte Carlo simulation that can take several hours to complete. For this reason, the variable force_recalc is set to False, which will skip any figures that were generated with a lengthy simulation. To generate those figures, set force_recalc=True.

Alternatively, one can call one of the chapter specific scripts in the folder make_figures, such as:

force_recalc=True;
make_figures/ch1_drawFigures;

Files with the prefix make_figures/book2_ generate figures from the second textbook.

The output will be stored in the figures/ folder. Output for the second book will be placed in a nested folder called practicalGeo/ under the figures/ folder.

Examples

The examples/ folder contains the code to execute each of the examples in the textbook. Files with the prefix book2_ refer to the second textbook.

Homework

The hw/ folder contains data sets used for two homework problems in Chapter 8.

Live Scripts

The live_scripts/ folder contains MATLAB Live script versions for the examples in examples/. It is currently a work in progress, and more will be added over the coming weeks. MATLAB Live scripts blend text and code to enable interactive learning.

Test Scripts

The testscripts/ folder is used to house test scripts, to ensure that utilities are operating as functions, and to enable regression testing in the future. Currently, there is only a single test script, used to verify that coordinate conversions are internally consistent.

Utilities

A number of utilities are provided in this repository, under the following namespaces:

  • +aoa/ Code to execute angle-of-arrival estimation, as discussed in Chapter 7
  • +array/ Code to execute array-based angle-of-arrival estimation, as discussed in Chapter 8
  • +atm/ Code to model atmospheric loss, as discussed in Appendix Carlo
  • +detector/ Code to model detection performance, as discussed in Chapter 3-4
  • +fdoa/ Code to execute Frequency Difference of Arrival (FDOA) geolocation processing, as discussed in Chapter 12.
  • +hybrid/ Code to execute hybrid geolocation processing, as discussed in Chapter 13.
  • +noise/ Code to model noise power, as discussed in Appendix D.
  • +prop/ Code to model propagation losses, as discussed in Appendix B.
  • +tdoa/ Code to execute Time Difference of Arrival (TDOA) geolocation processing, as discussed in Chapter 11.
  • +tracker/ Code to implement simplified tracker scenarios, discussed in Chapters 7 and 8 of the second book.
  • +triang/ Code to model triangulation from multiple AOA measurements, as discussed in Chapter 10.
  • +utils/ Generic utilities, including numerical solvers used in geolocation algorithms.

Feedback

Please submit any suggestions, bugs, or comments to nicholas [dot] odonoughue [at] ieee [dot] org.

emitter-detection-book's People

Contributors

nodonoughue avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

emitter-detection-book's Issues

Hybrid velocity Jacobian MATLAB syntax

Is this a bug in the computation of the hybrid velocity jacobian? The syntax looks wrong. The inputs to zeros should be scalars.

Jv = cat(2,zeros(size(J_aoa), zeros(size(J_tdoa), J_fdoa_v)));

Should it be this?

Jv = cat(2,zeros(size(J_aoa)), zeros(size(J_tdoa)), J_fdoa_v);

Tough to test as-is since the examples scripts and hybrid.computeCRLB don't support the case with source having a non-zero velocity.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.