-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Deploy maia-sdr/maia-sdr-web to maia-sdr/maia-sdr-web:gh-pages
- Loading branch information
GitHub Actions
committed
Sep 30, 2023
0 parents
commit 01597f2
Showing
25 changed files
with
3,230 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
<!doctype html> | ||
<title>404 Not Found</title> | ||
<h1>404 Not Found</h1> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
maia-sdr.org |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,204 @@ | ||
<!DOCTYPE html> | ||
<html lang="en"> | ||
|
||
<head> | ||
<meta charset="UTF-8"> | ||
<title>About | Maia SDR </title> | ||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> | ||
|
||
<link rel="icon" type="image/png" sizes="32x32" href="/maia-icon-32x32.png"> | ||
<link rel="icon" type="image/png" sizes="128x128" href="/maia-icon-128x128.png"> | ||
<link rel="icon" type="image/png" sizes="180x180" href="/maia-icon-180x180.png"> | ||
<link rel="icon" type="image/png" sizes="192x192" href="/maia-icon-192x192.png"> | ||
<link rel="apple-touch-icon" type="image/png" sizes="32x32" href="/maia-icon-32x32.png"> | ||
<link rel="apple-touch-icon" type="image/png" sizes="128x128" href="/maia-icon-128x128.png"> | ||
<link rel="apple-touch-icon" type="image/png" sizes="180x180" href="/maia-icon-180x180.png"> | ||
<link rel="apple-touch-icon" type="image/png" sizes="192x192" href="/maia-icon-192x192.png"> | ||
|
||
<style> | ||
:root { | ||
/* Primary theme color */ | ||
--primary-color: #d0d0ff; | ||
/* Primary theme text color */ | ||
--primary-text-color: black; | ||
/* Primary theme link color */ | ||
--primary-link-color: #2020a0; | ||
/* Secondary color: the background body color */ | ||
--secondary-color: white; | ||
--secondary-text-color: #303030; | ||
/* Highlight text color of table of content */ | ||
--toc-highlight-text-color: #4040ff; | ||
} | ||
</style> | ||
|
||
<link href="https://fonts.googleapis.com/css?family=Alfa+Slab+One&display=swap" rel="stylesheet"> | ||
<link href="https://fonts.googleapis.com/css?family=Fira+Sans:400,500,600&display=swap" rel="stylesheet"> | ||
<link rel="stylesheet" href="/normalize.css"> | ||
<link rel="stylesheet" href="https://maia-sdr.org/juice.css"> | ||
|
||
|
||
</head> | ||
|
||
<body> | ||
|
||
<header class="box-shadow"> | ||
|
||
|
||
<a href="https://maia-sdr.org/"> | ||
<div class="logo"> | ||
<img src="https://maia-sdr.org/maia-icon-192x192.png" alt="logo"> | ||
Maia SDR | ||
</div> | ||
</a> | ||
|
||
<nav> | ||
|
||
|
||
<a class="nav-item subtitle-text" href="https://maia-sdr.org/installation/">Installation</a> | ||
|
||
|
||
|
||
<a class="nav-item subtitle-text" href="https://maia-sdr.org/waterfall-demo/">Waterfall demo</a> | ||
|
||
|
||
|
||
<a class="nav-item subtitle-text" href="https://maia-sdr.org/about/">About</a> | ||
|
||
|
||
|
||
<a class="nav-item subtitle-text" href="https://maia-sdr.org/faq/">FAQ</a> | ||
|
||
|
||
|
||
</nav> | ||
|
||
</header> | ||
|
||
|
||
<main> | ||
|
||
|
||
<div class="toc"> | ||
|
||
</div> | ||
|
||
|
||
<div class="content text"> | ||
|
||
<div class="heading-text">About Maia SDR</div> | ||
<p>Maia SDR is an open-source project started by <a href="https://destevez.net">Daniel | ||
Estévez</a> in 2022 with the goal of developing radio | ||
applications whose signal processing runs mainly on an FPGA. In this sense, Maia | ||
SDR is an FPGA-based SDR (see the <a href="https://maia-sdr.org/faq/#misnomer">FAQ</a> if you find this term | ||
strange).</p> | ||
<p>There are several motivations that led to this project:</p> | ||
<ol> | ||
<li>There is a thriving open-source SDR community, which develops great pieces of | ||
software. However, not many people are doing FPGA development (though there are | ||
some notable exceptions).</li> | ||
<li>There is an open-source FPGA community doing amazing work and projects. Most | ||
of these projects are not related to radio or signal processing, and the | ||
interaction between the FGPA and SDR communities is minimal (with a few | ||
exceptions).</li> | ||
<li>Affordable handheld and portable radios are not very flexible and do not | ||
offer much variety in terms of how to explore the RF spectrum and have fun with | ||
it. A PC running SDR software is vastly superior in capabilities to a compact | ||
solution.</li> | ||
<li>Portable solutions should use FPGA processing as much as possible in order to | ||
save power and offer capabilities which are not possible with embedded CPUs.</li> | ||
</ol> | ||
<p>With these ideas in mind, Maia SDR starts as a project with the long term goal | ||
of building an open-source compact/portable radio that offers high flexibility | ||
in the same sense that SDR software does, and that uses an FPGA for most of its | ||
signal processing. The work-in-progress project will hopefully serve as a | ||
stepping stone that people can extend or use as a base for their projects, and | ||
will bring more FPGA development to the SDR community and more collaboration | ||
between the FPGA and SDR communities.</p> | ||
<p>The ideal hardware for this project would be an affordable board (or stack of | ||
boards) with a relatively capable FPGA that supports an open-source toolchain, | ||
an RFIC of some sort, some kind of RISC-V SoC or microcontroller, and UI | ||
hardware (touchscreen, etc.). Unfortunately, something like this does not | ||
currently exist. This is a chicken and egg problem, in the sense that there are | ||
not enough open-source FPGA designs yet to make this hardware interesting, so | ||
the hardware does not get developed, and so there is no hardware to develop the | ||
FPGA designs for. If I started by developing the hardware, I would probably | ||
never finish. Instead of dreaming about this hardware, a good way to kickstart | ||
these activities is to focus on an existing, affordable, and widely available | ||
hardware that can serve as a "good enough replacement".</p> | ||
<p>I have decided to focus on the <a href="https://www.analog.com/en/design-center/evaluation-hardware-and-software/evaluation-boards-kits/adalm-pluto.html">ADALM | ||
Pluto</a> | ||
because it is a very popular and common SDR, and it has a fairly capable Zynq | ||
FPGA + ARM SoC. Together with a smartphone for the UI, this pair of devices give | ||
a portable solution for which already many hobbyists have the required | ||
hardware. This platform serves to develop a "product" that can have useful | ||
features right from the start, rather than having something in a | ||
work-in-progress state that people cannot use until (and if) it is finished.</p> | ||
<p>Maia SDR attempts to bring more interest in FPGA delopment for radio | ||
applications, and to serve as a starting point for other projects, by dealing | ||
with things which are usually entry barriers (such as how to move data around | ||
with DMAs or how to compute an FFT). It also serves as a playground to explore | ||
novel technologies and ideas.</p> | ||
<p>The HDL code of Maia SDR is written in | ||
<a href="https://github.com/amaranth-lang/amaranth">Amaranth</a>, which is a Python-based | ||
HDL and toolchain. This is one of the flagship projects of the open-source FPGA | ||
community, and there have already been some small projects using Amaranth for | ||
radio applications (see an <a href="https://www.youtube.com/watch?v=A5LOyRVED3c">SDR transmitter tutorial at EU GNU Radio | ||
days</a> and a <a href="https://blog.kiranshila.com/blog/casper_amaranth.md">post about how to use | ||
Amaranth for radio | ||
astronomy</a>).</p> | ||
<p>The software of Maia SDR runs on the Zynq ARM CPU and serves to control the FPGA | ||
and to provide an interface to a smartphone (or other device) connected to the | ||
Pluto. It does so by spawning an HTTP server that has a web application as UI, a | ||
RESTful API for control, and uses WebSockets to stream data. The software is | ||
written in <a href="https://www.rust-lang.org/">Rust</a> using asynchronous programming. I | ||
think that Rust is a very good language for systems development, and has a | ||
wonderful open-source community behind. Perhaps this choice of technology will | ||
give at some point a link between Maia SDR and | ||
<a href="https://www.futuresdr.org/">FutureSDR</a>, which is a very interesting SDR runtime | ||
project that is also implemented in asynchronous Rust.</p> | ||
<p>The UI of Maia SDR is a web application that uses WebGL2 to render the waterfall | ||
display. It is implemented in Rust using WebAssembly.</p> | ||
|
||
|
||
</div> | ||
|
||
|
||
|
||
</main> | ||
|
||
|
||
<footer> | ||
<small class="subtext"> | ||
<a href="https://maia-sdr.org">Maia SDR</a> — <a href="mailto:[email protected]">[email protected]</a> | ||
</small> | ||
<small class="subtext"> | ||
Copyright <a href="https://destevez.net">Daniel Estévez</a> | ||
</small> | ||
</footer> | ||
|
||
<script> | ||
const scrollHandler = entries => { | ||
// Find the first entry which intersecting and ratio > 0.9 to highlight. | ||
let entry = entries.find(entry => { | ||
return entry.isIntersecting && entry.intersectionRatio > 0.9; | ||
}); | ||
if (!entry) return; | ||
|
||
document.querySelectorAll(".toc a").forEach((item) => { | ||
item.classList.remove("active"); | ||
}); | ||
|
||
// let url = new URL(`#${entry.target.id}`); | ||
let link = document.querySelector(`.toc a[href$="${decodeURIComponent(`#${entry.target.id}`)}"]`) | ||
if (link) { | ||
link.classList.add("active"); | ||
link.scrollIntoView({ behavior: "auto", block: "nearest" }); | ||
} | ||
}; | ||
// Set -100px root margin to improve highlight experience. | ||
const observer = new IntersectionObserver(scrollHandler, { threshold: 1 }); | ||
let items = document.querySelectorAll('h1,h2,h3,h4,h5,h6'); | ||
items.forEach(item => observer.observe(item)); | ||
</script> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,179 @@ | ||
<!DOCTYPE html> | ||
<html lang="en"> | ||
|
||
<head> | ||
<meta charset="UTF-8"> | ||
<title>FAQ | Maia SDR </title> | ||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> | ||
|
||
<link rel="icon" type="image/png" sizes="32x32" href="/maia-icon-32x32.png"> | ||
<link rel="icon" type="image/png" sizes="128x128" href="/maia-icon-128x128.png"> | ||
<link rel="icon" type="image/png" sizes="180x180" href="/maia-icon-180x180.png"> | ||
<link rel="icon" type="image/png" sizes="192x192" href="/maia-icon-192x192.png"> | ||
<link rel="apple-touch-icon" type="image/png" sizes="32x32" href="/maia-icon-32x32.png"> | ||
<link rel="apple-touch-icon" type="image/png" sizes="128x128" href="/maia-icon-128x128.png"> | ||
<link rel="apple-touch-icon" type="image/png" sizes="180x180" href="/maia-icon-180x180.png"> | ||
<link rel="apple-touch-icon" type="image/png" sizes="192x192" href="/maia-icon-192x192.png"> | ||
|
||
<style> | ||
:root { | ||
/* Primary theme color */ | ||
--primary-color: #d0d0ff; | ||
/* Primary theme text color */ | ||
--primary-text-color: black; | ||
/* Primary theme link color */ | ||
--primary-link-color: #2020a0; | ||
/* Secondary color: the background body color */ | ||
--secondary-color: white; | ||
--secondary-text-color: #303030; | ||
/* Highlight text color of table of content */ | ||
--toc-highlight-text-color: #4040ff; | ||
} | ||
</style> | ||
|
||
<link href="https://fonts.googleapis.com/css?family=Alfa+Slab+One&display=swap" rel="stylesheet"> | ||
<link href="https://fonts.googleapis.com/css?family=Fira+Sans:400,500,600&display=swap" rel="stylesheet"> | ||
<link rel="stylesheet" href="/normalize.css"> | ||
<link rel="stylesheet" href="https://maia-sdr.org/juice.css"> | ||
|
||
|
||
</head> | ||
|
||
<body> | ||
|
||
<header class="box-shadow"> | ||
|
||
|
||
<a href="https://maia-sdr.org/"> | ||
<div class="logo"> | ||
<img src="https://maia-sdr.org/maia-icon-192x192.png" alt="logo"> | ||
Maia SDR | ||
</div> | ||
</a> | ||
|
||
<nav> | ||
|
||
|
||
<a class="nav-item subtitle-text" href="https://maia-sdr.org/installation/">Installation</a> | ||
|
||
|
||
|
||
<a class="nav-item subtitle-text" href="https://maia-sdr.org/waterfall-demo/">Waterfall demo</a> | ||
|
||
|
||
|
||
<a class="nav-item subtitle-text" href="https://maia-sdr.org/about/">About</a> | ||
|
||
|
||
|
||
<a class="nav-item subtitle-text" href="https://maia-sdr.org/faq/">FAQ</a> | ||
|
||
|
||
|
||
</nav> | ||
|
||
</header> | ||
|
||
|
||
<main> | ||
|
||
|
||
|
||
|
||
<div class="toc"> | ||
|
||
<div class="toc-sticky"> | ||
|
||
<div class="toc-item"> | ||
<a class="subtext" href="https://maia-sdr.org/faq/#why-the-name-maia-sdr">Why the name "Maia SDR"?</a> | ||
</div> | ||
|
||
|
||
<div class="toc-item"> | ||
<a class="subtext" href="https://maia-sdr.org/faq/#misnomer">Isn't "FPGA-based SDR" a misnomer?</a> | ||
</div> | ||
|
||
|
||
<div class="toc-item"> | ||
<a class="subtext" href="https://maia-sdr.org/faq/#how-is-maia-sdr-pronounced">How is "Maia SDR" pronounced?</a> | ||
</div> | ||
|
||
|
||
</div> | ||
|
||
</div> | ||
|
||
|
||
<div class="content text"> | ||
|
||
<div class="heading-text">FAQ</div> | ||
<h1 id="why-the-name-maia-sdr">Why the name "Maia SDR"?</h1> | ||
<p><a href="https://en.wikipedia.org/wiki/Maia_(star)">Maia</a> is a star in the | ||
<a href="https://en.wikipedia.org/wiki/Pleiades">Pleiades</a> cluster. I chose the name | ||
because I like how it sounds, and because it is related to astronomy. The name | ||
vaguely hints at radio astronomy, which is a topic dear to me. Even though Maia | ||
SDR has not been developed with radio astronomy in mind as a potential use case, | ||
it could potentially be of interest to the radio astronomy FPGA community.</p> | ||
<h1 id="misnomer">Isn't "FPGA-based SDR" a misnomer?</h1> | ||
<p>Sure. If most of the digital signal processing is done in FPGA, it is not done | ||
in software. I know and partly share comments in the SDR community about how the | ||
term "SDR" is often used inappropriately and has become somewhat of a | ||
buzzword. In this sense, calling Maia SDR an "SDR" is not very | ||
appropriate. However, I cannot think of a better term. I do not know of a word | ||
other than SDR that evokes the same ideas in terms of functionality, hardware | ||
devices, community, etc.</p> | ||
<p>Also, in a certain sense I think that "SDR" is not a very bad name for Maia | ||
SDR. As a project, it strives to explore in the future concepts such as | ||
relatively fast-synthesis using open source FPGA toolchains, on demand | ||
reconfiguration, and other concepts related to flexibility in terms of | ||
functionality. In this sense, Maia SDR has more in common with a software radio | ||
application than with a silicon radio. Ultimately, the flexibility might matter | ||
more than whether the DSP computations are done in LUTs or in an ALU.</p> | ||
<h1 id="how-is-maia-sdr-pronounced">How is "Maia SDR" pronounced?</h1> | ||
<p>Maia is pronounced in English as /ˈmeɪə/, but I often use the Spanish | ||
pronunciation /'maja/ (English <em>my-ah</em>). This is closer to the original Greek and Latin | ||
pronunciations. You can use whichever you prefer.</p> | ||
|
||
|
||
</div> | ||
|
||
|
||
|
||
</main> | ||
|
||
|
||
<footer> | ||
<small class="subtext"> | ||
<a href="https://maia-sdr.org">Maia SDR</a> — <a href="mailto:[email protected]">[email protected]</a> | ||
</small> | ||
<small class="subtext"> | ||
Copyright <a href="https://destevez.net">Daniel Estévez</a> | ||
</small> | ||
</footer> | ||
|
||
<script> | ||
const scrollHandler = entries => { | ||
// Find the first entry which intersecting and ratio > 0.9 to highlight. | ||
let entry = entries.find(entry => { | ||
return entry.isIntersecting && entry.intersectionRatio > 0.9; | ||
}); | ||
if (!entry) return; | ||
|
||
document.querySelectorAll(".toc a").forEach((item) => { | ||
item.classList.remove("active"); | ||
}); | ||
|
||
// let url = new URL(`#${entry.target.id}`); | ||
let link = document.querySelector(`.toc a[href$="${decodeURIComponent(`#${entry.target.id}`)}"]`) | ||
if (link) { | ||
link.classList.add("active"); | ||
link.scrollIntoView({ behavior: "auto", block: "nearest" }); | ||
} | ||
}; | ||
// Set -100px root margin to improve highlight experience. | ||
const observer = new IntersectionObserver(scrollHandler, { threshold: 1 }); | ||
let items = document.querySelectorAll('h1,h2,h3,h4,h5,h6'); | ||
items.forEach(item => observer.observe(item)); | ||
</script> | ||
</body> | ||
</html> |
Oops, something went wrong.