{"id":213,"date":"2025-07-31T14:36:13","date_gmt":"2025-07-31T22:36:13","guid":{"rendered":"https:\/\/salemdata.net\/johnpress\/?p=213"},"modified":"2025-07-31T14:36:13","modified_gmt":"2025-07-31T22:36:13","slug":"iq-multicast","status":"publish","type":"post","link":"https:\/\/salemdata.net\/johnpress\/?p=213","title":{"rendered":"iq Multicast"},"content":{"rendered":"<div class=\"gfmr-markdown-container\"><div class=\"gfmr-markdown-source\" style=\"display: none;\">\n&lt;p class=&quot;wp-block-paragraph&quot;&gt;I released a tool,&lt;strong&gt; iq_multicast&lt;\/strong&gt;, that broadcasts a USB Software Defined Radio (&#8220;SDR&#8221;) IQ stream.  The tools are written in the C programming language.   SDRs range from the $50 (kit on Amazon) RTL-SDR to several hundred dollar versions, e.g. HackRF One ($300) and AirSpy2 ($180).&lt;\/p&gt;\n\n\n\n&lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;RTL-SDR $50&lt;\/td&gt;&lt;td&gt;AirSpy2 $180&lt;\/td&gt;&lt;\/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2025\/07\/20250731_152053_Thu.png&quot; alt=&quot;&quot;&gt;&lt;\/td&gt;&lt;td&gt;&lt;img src=&quot;https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2025\/07\/20250731_152227_Thu-1.png&quot; alt=&quot;&quot;&gt;&lt;\/td&gt;&lt;\/tr&gt;&lt;\/tbody&gt;&lt;\/table&gt;&lt;\/figure&gt;\n\n\n\n&lt;p class=&quot;wp-block-paragraph&quot;&gt;Normally, a program or process has exclusive control of a transceiver so you cannot have several processes access the data stream.  So what I did is create a small utility which broadcasts the data stream of UDP (&lt;a href=&quot;https:\/\/en.wikipedia.org\/wiki\/User_Datagram_Protocol&quot;&gt;User Datagram Protocol&lt;\/a&gt;) multicast&#8230; very similar to what online broadcasters of multimedia do.  This diagram sums up the benefit of leveraging a single stream and making it available to multiple simultaneous users:&lt;\/p&gt;\n\n\n\n&lt;p class=&quot;wp-block-paragraph&quot;&gt;&lt;\/p&gt;\n\n\n\n&lt;figure class=&quot;wp-block-image size-full wp-duotone-unset-1&quot;&gt;&lt;img src=&quot;https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2025\/07\/image.png&quot; alt=&quot;&quot; class=&quot;wp-image-217&quot;\/&gt;&lt;\/figure&gt;\n\n\n\n&lt;p class=&quot;wp-block-paragraph&quot;&gt;In essence, the tools in iq Multicast act as a &#8220;digital splitter&#8221; allow an unlimited number of processes to subscribe to the stream.&lt;br&gt;The project is at:&lt;\/p&gt;\n\n\n\n&lt;p class=&quot;wp-block-paragraph&quot;&gt;&lt;a href=&quot;https:\/\/github.com\/jlpoolen\/iq_multicast&quot;&gt;https:\/\/github.com\/jlpoolen\/iq_multicast&lt;\/a&gt;&lt;\/p&gt;\n\n\n\n&lt;p class=&quot;wp-block-paragraph&quot;&gt;&lt;\/p&gt;\n<\/div><div class=\"gfmr-markdown-rendered\">\n<p class=\"wp-block-paragraph\">I released a tool,<strong> iq_multicast<\/strong>, that broadcasts a USB Software Defined Radio (&#8220;SDR&#8221;) IQ stream.  The tools are written in the C programming language.   SDRs range from the $50 (kit on Amazon) RTL-SDR to several hundred dollar versions, e.g. HackRF One ($300) and AirSpy2 ($180).<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td>RTL-SDR $50<\/td><td>AirSpy2 $180<\/td><\/tr><tr><td><img decoding=\"async\" src=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2025\/07\/20250731_152053_Thu.png\" alt=\"\"><\/td><td><img decoding=\"async\" src=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2025\/07\/20250731_152227_Thu-1.png\" alt=\"\"><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Normally, a program or process has exclusive control of a transceiver so you cannot have several processes access the data stream.  So what I did is create a small utility which broadcasts the data stream of UDP (<a href=\"https:\/\/en.wikipedia.org\/wiki\/User_Datagram_Protocol\">User Datagram Protocol<\/a>) multicast&#8230; very similar to what online broadcasters of multimedia do.  This diagram sums up the benefit of leveraging a single stream and making it available to multiple simultaneous users:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<figure class=\"wp-block-image size-full wp-duotone-unset-1\"><img loading=\"lazy\" decoding=\"async\" width=\"1008\" height=\"521\" src=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2025\/07\/image.png\" alt=\"\" class=\"wp-image-217\" srcset=\"https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2025\/07\/image.png 1008w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2025\/07\/image-300x155.png 300w, https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2025\/07\/image-768x397.png 768w\" sizes=\"auto, (max-width: 1008px) 100vw, 1008px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In essence, the tools in iq Multicast act as a &#8220;digital splitter&#8221; allow an unlimited number of processes to subscribe to the stream.<br>The project is at:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/jlpoolen\/iq_multicast\">https:\/\/github.com\/jlpoolen\/iq_multicast<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n<\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>&lt;p class=&quot;wp-block-paragraph&quot;&gt;I released a tool,&lt;strong&gt; iq_multicast&lt;\/strong&gt;, that broadcasts a USB Software Defined Radio (&#8220;SDR&#8221;) IQ stream. The tools are written in the C programming language. SDRs range from the $50 (kit on Amazon) RTL-SDR to several hundred dollar versions, e.g. HackRF One ($300) and AirSpy2 ($180).&lt;\/p&gt; &lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table class=&quot;has-fixed-layout&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;RTL-SDR $50&lt;\/td&gt;&lt;td&gt;AirSpy2 $180&lt;\/td&gt;&lt;\/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img src=&quot;https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2025\/07\/20250731_152053_Thu.png&quot; alt=&quot;&quot;&gt;&lt;\/td&gt;&lt;td&gt;&lt;img src=&quot;https:\/\/salemdata.net\/johnpress\/wp-content\/uploads\/2025\/07\/20250731_152227_Thu-1.png&quot; alt=&quot;&quot;&gt;&lt;\/td&gt;&lt;\/tr&gt;&lt;\/tbody&gt;&lt;\/table&gt;&lt;\/figure&gt; [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":217,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_gfmr_meta_descriptions":[],"_gfmr_multilingual_taxonomy_terms":[],"footnotes":""},"categories":[1],"tags":[],"class_list":["post-213","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=\/wp\/v2\/posts\/213","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=213"}],"version-history":[{"count":1,"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=\/wp\/v2\/posts\/213\/revisions"}],"predecessor-version":[{"id":218,"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=\/wp\/v2\/posts\/213\/revisions\/218"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=\/wp\/v2\/media\/217"}],"wp:attachment":[{"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=213"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=213"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/salemdata.net\/johnpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=213"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}