<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Dsp on Lloyd Rochester's Geek Blog</title><link>https://lloydroc.github.io/categories/dsp/</link><description>Recent content in Dsp on Lloyd Rochester's Geek Blog</description><generator>Hugo</generator><language>en</language><copyright>Copyright © 2025, Lloyd Rochester.</copyright><lastBuildDate>Sun, 12 Feb 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://lloydroc.github.io/categories/dsp/index.xml" rel="self" type="application/rss+xml"/><item><title>Learn the FFT</title><link>https://lloydroc.github.io/post/dsp/fast-fourier-transform/</link><pubDate>Sun, 12 Feb 2023 00:00:00 +0000</pubDate><guid>https://lloydroc.github.io/post/dsp/fast-fourier-transform/</guid><description>&lt;h1 id="hahahugoshortcode46s0hbhb">Learn the FFT&lt;/h1>
&lt;p>In this post I&amp;rsquo;d like to attempt to explain how the Fast Fourier Transform algorithm works. This post is inspired by many attempts others have made that don&amp;rsquo;t really do a good job explaining the FFT. Hopefully, I can do a better job. For explanation we&amp;rsquo;ll use the Cooley–Tukey algorithm which is the most common.&lt;/p>
&lt;figure>&lt;img src="https://lloydroc.github.io/assets/svg/fft-butterfly.svg">&lt;figcaption>
 &lt;h4>FFT Butterfly Diagram&lt;/h4>
 &lt;/figcaption>
&lt;/figure>

&lt;p>Above is the so-called Butterfly Diagram which we will arrive at. Refer to the &lt;a href="https://lloydroc.github.io/post/c/example-fft/">Example FFT Computation in C&lt;/a> to see a program that will compute the FFT.&lt;/p></description></item><item><title>BPSK Receiver Theory</title><link>https://lloydroc.github.io/post/dsp/psk-receiver-theory/</link><pubDate>Wed, 17 Feb 2021 00:00:00 +0000</pubDate><guid>https://lloydroc.github.io/post/dsp/psk-receiver-theory/</guid><description>&lt;p>Let&amp;rsquo;s look at some BPSK Receiver Theory. This is the 3rd post in the PSK Series. We&amp;rsquo;ll cover the theory before we go into the implementation.&lt;/p>
&lt;h1 id="psk-series">PSK Series&lt;/h1>
&lt;p>Here is a summary of where we are in the PSK Series.&lt;/p>
&lt;ol>
&lt;li>&lt;a href="https://lloydroc.github.io/post/dsp/psk-transmit-theory/">BPSK Transmit Theory&lt;/a> - This post shows graphs and has audio files of what this tool does.&lt;/li>
&lt;li>&lt;a href="https://lloydroc.github.io/post/dsp/psk-transmitter-implementation/">BPSK Implementation&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://lloydroc.github.io/post/dsp/psk-receiver-theory/">BPSK Receiver Theory&lt;/a> - This Post&lt;/li>
&lt;li>BPSK Receiver Implementation - Coming Soon&lt;/li>
&lt;li>QPSK - Coming Soon&lt;/li>
&lt;/ol>
&lt;h1 id="what-are-we-going-to-receive">What are we going to receive?&lt;/h1>
&lt;p>See my previous post on &lt;a href="https://lloydroc.github.io/post/dsp/psk-transmit-theory/">BPSK Transmitter Theory&lt;/a> for what the waveform transmitted. For this post we&amp;rsquo;ll receive and decode this waveform. Effectively, we&amp;rsquo;re sending symbols that are Root Raised Cosine waveforms multiplied with sinusoids. Below is the encoded text &lt;code>t&lt;/code> represented by our alphabet as \( 10100 \). Note, the amplitude of \( ~1000 \), all the &amp;ldquo;peaks&amp;rdquo; both positive and negative, and the duration between the peaks. We&amp;rsquo;ll delve into all these details shortly.&lt;/p></description></item><item><title>BPSK Transmitter Implementation</title><link>https://lloydroc.github.io/post/dsp/psk-transmitter-implementation/</link><pubDate>Sun, 24 Jan 2021 00:00:00 +0000</pubDate><guid>https://lloydroc.github.io/post/dsp/psk-transmitter-implementation/</guid><description>&lt;h1 id="hahahugoshortcode49s0hbhb">BPSK Transmitter Implementation&lt;/h1>
&lt;p>In the previous post we discussed &lt;a href="https://lloydroc.github.io/post/dsp/psk-transmit-theory/">BPSK Transmit Theory&lt;/a>. This post will discuss the implementation of it. This implementation will be in the C programming language and it will also be a command line tool.&lt;/p>
&lt;h1 id="psk-series">PSK Series&lt;/h1>
&lt;p>I&amp;rsquo;m doing a series on PSK here is where we are:&lt;/p>
&lt;ol>
&lt;li>&lt;a href="https://lloydroc.github.io/post/dsp/psk-transmit-theory/">BPSK Transmit Theory&lt;/a> - This post shows graphs and has audio files of what this tool does.&lt;/li>
&lt;li>&lt;a href="https://lloydroc.github.io/post/dsp/psk-transmitter-implementation/">BPSK Implementation&lt;/a> - This Post.&lt;/li>
&lt;li>BPSK Receiver Theory - Coming Soon&lt;/li>
&lt;li>BPSK Receiver Theory - Coming Soon&lt;/li>
&lt;li>QPSK - Coming Soon&lt;/li>
&lt;/ol>
&lt;h1 id="using-the-command-line-tool">Using the Command Line Tool&lt;/h1>
&lt;p>I like to start out with how the tool is used as it gives insight about the implementation. It&amp;rsquo;s quite simple, provide text input as a program argument and the tool will output a &lt;code>.wav&lt;/code> file with the content. The example below converts the text &lt;code>hello world&lt;/code> to the &lt;code>psk31.wav&lt;/code> audio file.&lt;/p></description></item><item><title>BPSK Transmitter Theory</title><link>https://lloydroc.github.io/post/dsp/psk-transmit-theory/</link><pubDate>Thu, 14 Jan 2021 00:00:00 +0000</pubDate><guid>https://lloydroc.github.io/post/dsp/psk-transmit-theory/</guid><description>&lt;h1 id="hahahugoshortcode48s0hbhb">BPSK Transmitter Theory&lt;/h1>
&lt;p>In this post we&amp;rsquo;ll get into the theory of Binary Phase Shift Key - BPSK. We&amp;rsquo;ll then get into the implementation of the transmitter, followed by the same for the receiver. The transmitter will have text as input, for output we will produce an audio .wav file and a CSV file for analysis. I created a bunch of graphs which really illustrate some of the theory.&lt;/p>
&lt;h1 id="transmit-process">Transmit Process&lt;/h1>
&lt;p>Let&amp;rsquo;s start with the overall transmit process.&lt;/p></description></item><item><title>Convolution Examples</title><link>https://lloydroc.github.io/post/dsp/convolution-examples/</link><pubDate>Mon, 11 Jan 2021 00:00:00 +0000</pubDate><guid>https://lloydroc.github.io/post/dsp/convolution-examples/</guid><description>&lt;h1 id="hahahugoshortcode45s0hbhb">Convolution Examples&lt;/h1>
&lt;p>Understanding &lt;a href="https://lloydroc.github.io/post/c/convolution/">convolution&lt;/a> is not complete without some examples to visual the results. These examples are meant to aid in one&amp;rsquo;s ability to visualize the result of a convolution. It&amp;rsquo;s most important to flip one function horizontally and slide it through the other. As this function slides through we multiply and sum to obtain the result of the convolution.&lt;/p>
&lt;p>Convolution is used &lt;em>mainly&lt;/em> in two ways:&lt;/p>
&lt;ol>
&lt;li>To mathematically determine how correlated two functions are&lt;/li>
&lt;li>To shape a function by convolving it with another function. Examples would be filtering, smoothing, etc &amp;hellip;&lt;/li>
&lt;/ol>
&lt;p>Note: There are some typos in the frequency labels for some of the sinusoids I need to fix. You can trust the graphs.&lt;/p></description></item></channel></rss>