{"id":8799,"date":"2023-10-11T14:35:08","date_gmt":"2023-10-11T18:35:08","guid":{"rendered":"https:\/\/jeremyclark.ca\/wp\/?p=8799"},"modified":"2025-12-10T08:19:14","modified_gmt":"2025-12-10T13:19:14","slug":"plutosdr-for-am-modulation-on-gnu-radio","status":"publish","type":"post","link":"https:\/\/jeremyclark.ca\/wp\/telecom\/plutosdr-for-am-modulation-on-gnu-radio\/","title":{"rendered":"PlutoSDR for AM Modulation on GNU Radio"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"724\" height=\"419\" src=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/plutosdr_am_tx_rx.jpg\" alt=\"\" class=\"wp-image-8899\" srcset=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/plutosdr_am_tx_rx.jpg 724w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/plutosdr_am_tx_rx-300x174.jpg 300w\" sizes=\"auto, (max-width: 724px) 100vw, 724px\" \/><figcaption class=\"wp-element-caption\">Fig.1 PlutoSDR for AM Modulation <\/figcaption><\/figure>\n<\/div>\n\n\n<p>In a previous post I looked at using the PlutoSDR as a WSPR beacon (<a href=\"https:\/\/jeremyclark.ca\/wp\/telecom\/plutosdr-for-wspr-beacon-on-gnu-radio\/\" data-type=\"link\" data-id=\"https:\/\/jeremyclark.ca\/wp\/telecom\/plutosdr-for-wspr-beacon-on-gnu-radio\/\">Ref.1<\/a>). The PlutoSDR can be used to demonstrate standard AM Modulation as shown in Figure 1. Transmission is via a shielded sma cable plus 40dB pad to 3 test receivers: A Signal Hound spectrum analyzer, RTL-SDR and PlutoSDR receiver (<a href=\"https:\/\/wiki.analog.com\/university\/tools\/pluto\/devs\/specs\" data-type=\"link\" data-id=\"https:\/\/wiki.analog.com\/university\/tools\/pluto\/devs\/specs\">Ref.2<\/a>). The frequency used is 433.92MHz which is in the PlutoSDR range and is also an ISM band. Remember transmission without the cable requires an appropriate license depending on your country. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">AM Modulation Basics<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"404\" src=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/am_mod_1k_10k-1024x404.jpg\" alt=\"\" class=\"wp-image-8890\" srcset=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/am_mod_1k_10k-1024x404.jpg 1024w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/am_mod_1k_10k-300x118.jpg 300w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/am_mod_1k_10k-768x303.jpg 768w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/am_mod_1k_10k.jpg 1370w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Fig.2 Basic AM Modulator Fi=1KHz, Fc=10KHz<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"531\" src=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/am_mod_m50-1024x531.jpg\" alt=\"\" class=\"wp-image-8891\" srcset=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/am_mod_m50-1024x531.jpg 1024w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/am_mod_m50-300x156.jpg 300w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/am_mod_m50-768x398.jpg 768w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/am_mod_m50-1536x797.jpg 1536w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/am_mod_m50-1568x813.jpg 1568w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/am_mod_m50.jpg 1874w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Fig.3 AM Modulation m=50% Fc=10KHz, USB=11KHz, LSB=9KHz<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"538\" src=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/am_mod_m100-1024x538.jpg\" alt=\"\" class=\"wp-image-8892\" srcset=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/am_mod_m100-1024x538.jpg 1024w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/am_mod_m100-300x158.jpg 300w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/am_mod_m100-768x403.jpg 768w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/am_mod_m100-1536x807.jpg 1536w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/am_mod_m100-1568x824.jpg 1568w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/am_mod_m100.jpg 1875w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Fig.4 AM Modulation m=100% Fc=10KHz, USB=11KHz, LSB=9KHz<\/figcaption><\/figure>\n\n\n\n<p>Figure 2 shows a basic AM modulator as previously covered (<a href=\"https:\/\/jeremyclark.ca\/wp\/telecom\/am-modulation-on-gnu-radio\/\" data-type=\"link\" data-id=\"https:\/\/jeremyclark.ca\/wp\/telecom\/am-modulation-on-gnu-radio\/\">Ref.3<\/a>). You can clearly see the 1KHz information wave superimposed on the 10KHz carrier wave. Two sidebands are generated at Fc +\/- 1KHz = 11KHz and 9KHz. For a modulation index of 50% sidebands are 12dB down from the carrier and at 100% they are 6dB down. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">PlutoSDR Tx &#8211; SpecAnalyzer Rx<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"384\" src=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_am_tx-1024x384.jpg\" alt=\"\" class=\"wp-image-8894\" srcset=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_am_tx-1024x384.jpg 1024w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_am_tx-300x112.jpg 300w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_am_tx-768x288.jpg 768w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_am_tx.jpg 1531w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Fig.5 PlutoSDR AM Tx with 40dB pad<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"541\" src=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_40db_10K_m501-1024x541.jpg\" alt=\"\" class=\"wp-image-8895\" srcset=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_40db_10K_m501-1024x541.jpg 1024w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_40db_10K_m501-300x158.jpg 300w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_40db_10K_m501-768x406.jpg 768w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_40db_10K_m501.jpg 1070w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Fig.6 SigHound Spectrum m=50% 40dB pad<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"544\" src=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_40db_10k_sigh1-1024x544.jpg\" alt=\"\" class=\"wp-image-8896\" srcset=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_40db_10k_sigh1-1024x544.jpg 1024w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_40db_10k_sigh1-300x159.jpg 300w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_40db_10k_sigh1-768x408.jpg 768w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_40db_10k_sigh1.jpg 1062w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Fig.7 SigHound Spectrum m=100% 40dB pad<\/figcaption><\/figure>\n\n\n\n<p>Figure 5 shows the GNU Radio schematic for the PlutoSDR AM Tx. Note that it is the same as in Figure 2 except that the second signal source and multiplier are replaced by the Soapy Pluto Sink (Fi=10KHz). The varying amplitude must be complex to feed this block, so a float\/complex converter is added and the complex component set to zero. I used the Spectrum analyzer to zero the PlutoSDR on the correct frequency by adding a f_shift of 6KHz in my case (depends on your unit, temperature drift etc). Figure 6 shows sidebands at 12dB down for m=50% and Figure 7 shows sidebands at 6dB down for m=100%.  <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">PlutoSDR Tx &#8211; RTL-SDR Rx<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"543\" src=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_rtlsdr_40db-1024x543.jpg\" alt=\"\" class=\"wp-image-8918\" srcset=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_rtlsdr_40db-1024x543.jpg 1024w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_rtlsdr_40db-300x159.jpg 300w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_rtlsdr_40db-768x407.jpg 768w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_rtlsdr_40db-1536x815.jpg 1536w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_rtlsdr_40db-1568x832.jpg 1568w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_rtlsdr_40db.jpg 1919w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Fig.8 PlutoSDR AM Tx &#8211; RTL-SDR Rx 40dB pad<\/figcaption><\/figure>\n\n\n\n<p>Figure 8 shows reception using the RTL-SDR. Both transmitter and receiver gains were backed off to avoid intermod\/overload. Note the carrier at Fc and USB\/LSB 100KHz away at -12db for m=50% (Fi=100KHz).    <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">PlutoSDR Tx &#8211; PlutoSDR Rx<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"437\" src=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/plutosdr_gnu_am_mod_schema-1024x437.jpg\" alt=\"\" class=\"wp-image-8912\" srcset=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/plutosdr_gnu_am_mod_schema-1024x437.jpg 1024w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/plutosdr_gnu_am_mod_schema-300x128.jpg 300w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/plutosdr_gnu_am_mod_schema-768x328.jpg 768w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/plutosdr_gnu_am_mod_schema-1536x655.jpg 1536w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/plutosdr_gnu_am_mod_schema.jpg 1547w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Fig.9 PlutoSDR AM Tx &#8211; Rx Loopback with 40dB pad<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"556\" src=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_40db_b2b_m50-1-1024x556.jpg\" alt=\"\" class=\"wp-image-8914\" srcset=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_40db_b2b_m50-1-1024x556.jpg 1024w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_40db_b2b_m50-1-300x163.jpg 300w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_40db_b2b_m50-1-768x417.jpg 768w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_40db_b2b_m50-1-1536x834.jpg 1536w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_40db_b2b_m50-1-1568x851.jpg 1568w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2023\/10\/pluto_40db_b2b_m50-1.jpg 1875w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Fig.10 PlutoSDR AM Tx-Rx Loopback with 40dB pad m=50%<\/figcaption><\/figure>\n\n\n\n<p>Figure 9 shows the GNU Radio schematic for PlutoSDR AM loopback operation. This is tricky even with the pad because the Tx gain &amp; Rx gain settings may cause intermod and distortion. The receiver frequency is set at 433.720MHz 200KHz away from the transmitter so that zero frequency distortion I\/Q imbalance is avoided. Figure 10 shows the transmit and receive spectrum for m=50%.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"PlutoSDR for AM Modulation on GNU Radio\" width=\"750\" height=\"422\" src=\"https:\/\/www.youtube.com\/embed\/c5aKZ1wrZNs?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><figcaption class=\"wp-element-caption\">Fig.11 PlutoSDR AM Modulation on GNU Radio<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/clarktelecommunications.thinkific.com\/courses\/gnuradio_basics\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"302\" src=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2025\/11\/gnurc_course-1024x302.jpg\" alt=\"\" class=\"wp-image-12325\" srcset=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2025\/11\/gnurc_course-1024x302.jpg 1024w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2025\/11\/gnurc_course-300x89.jpg 300w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2025\/11\/gnurc_course-768x227.jpg 768w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2025\/11\/gnurc_course-1536x454.jpg 1536w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2025\/11\/gnurc_course-1568x463.jpg 1568w, https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2025\/11\/gnurc_course.jpg 1740w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"wp-element-caption\">GNU Radio Companion Basics Course<\/figcaption><\/figure>\n\n\n\n<p><br>Please send your comments, questions and suggestions to:<br><a href=\"https:\/\/jeremyclark.ca\/wp\/contact\">contact:<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.youtube.com\/user\/clarktelecom\"><img loading=\"lazy\" decoding=\"async\" width=\"93\" height=\"98\" src=\"https:\/\/jeremyclark.ca\/wp\/wp-content\/uploads\/2020\/01\/youtube.jpg\" alt=\"YouTube Channel\" class=\"wp-image-687\"\/><\/a><figcaption class=\"wp-element-caption\">YouTube Channel<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">References<\/h2>\n\n\n\n<p>#1. &#8211; &#8220;PlutoSDR for WSPR Beacon on GNURadio&#8221;<br><a href=\"https:\/\/jeremyclark.ca\/wp\/telecom\/plutosdr-for-wspr-beacon-on-gnu-radio\/\">https:\/\/jeremyclark.ca\/wp\/telecom\/plutosdr-for-wspr-beacon-on-gnu-radio\/<\/a><br><br>#2. &#8211; &#8220;PlutoSDR Specifications&#8221;<br><a href=\"https:\/\/wiki.analog.com\/university\/tools\/pluto\/devs\/specs\">https:\/\/wiki.analog.com\/university\/tools\/pluto\/devs\/specs<\/a><br><\/p>\n\n\n\n<p>#3. &#8211; &#8220;AM Modulation on GNU Radio&#8221;<br><a href=\"https:\/\/jeremyclark.ca\/wp\/telecom\/am-modulation-on-gnu-radio\/\">https:\/\/jeremyclark.ca\/wp\/telecom\/am-modulation-on-gnu-radio\/<\/a><br><br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction In a previous post I looked at using the PlutoSDR as a WSPR beacon (Ref.1). The PlutoSDR can be used to demonstrate standard AM Modulation as shown in Figure 1. Transmission is via a shielded sma cable plus 40dB pad to 3 test receivers: A Signal Hound spectrum analyzer, RTL-SDR and PlutoSDR receiver (Ref.2).&hellip; <a class=\"more-link\" href=\"https:\/\/jeremyclark.ca\/wp\/telecom\/plutosdr-for-am-modulation-on-gnu-radio\/\">Continue reading <span class=\"screen-reader-text\">PlutoSDR for AM Modulation on GNU Radio<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":8903,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,4],"tags":[],"class_list":["post-8799","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-elec","category-telecom","entry"],"_links":{"self":[{"href":"https:\/\/jeremyclark.ca\/wp\/wp-json\/wp\/v2\/posts\/8799","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jeremyclark.ca\/wp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jeremyclark.ca\/wp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jeremyclark.ca\/wp\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jeremyclark.ca\/wp\/wp-json\/wp\/v2\/comments?post=8799"}],"version-history":[{"count":30,"href":"https:\/\/jeremyclark.ca\/wp\/wp-json\/wp\/v2\/posts\/8799\/revisions"}],"predecessor-version":[{"id":12474,"href":"https:\/\/jeremyclark.ca\/wp\/wp-json\/wp\/v2\/posts\/8799\/revisions\/12474"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jeremyclark.ca\/wp\/wp-json\/wp\/v2\/media\/8903"}],"wp:attachment":[{"href":"https:\/\/jeremyclark.ca\/wp\/wp-json\/wp\/v2\/media?parent=8799"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jeremyclark.ca\/wp\/wp-json\/wp\/v2\/categories?post=8799"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jeremyclark.ca\/wp\/wp-json\/wp\/v2\/tags?post=8799"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}