{"id":148,"date":"2013-12-10T00:01:25","date_gmt":"2013-12-10T00:01:25","guid":{"rendered":"http:\/\/phoenixgamedevelopment.com\/blog\/?p=148"},"modified":"2013-12-10T00:01:25","modified_gmt":"2013-12-10T00:01:25","slug":"p-115-signal-recorder-and-data-analyser-fast-fourier-transform-implementation","status":"publish","type":"post","link":"https:\/\/phoenixgamedevelopment.com\/blog\/p-115-signal-recorder-and-data-analyser-fast-fourier-transform-implementation\/","title":{"rendered":"P-115 Signal Recorder and Data Analyser: Fast Fourier Transform Implementation"},"content":{"rendered":"<p>I have made significant progress on this project. I believe I have correctly implemented an FFT algorithm in my program. I have tested the out put using <a href=\"http:\/\/www.sccon.ca\/sccon\/fft\/fft3.htm\">THIS<\/a> sites data, and it seems to match the expected pattern, even though the exact values are not the same. The graphs being produced also look correct.<\/p>\n<p>This first image is the original signal that I obtained from my Radio receiver. The long low signal is before the radio is switched on. This signal was obtained from background noise on the radio, I did not tune it. This is essentially a control signal, I have yet to test it with an actual radio signal containing data.<\/p>\n<p><a href=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2013\/12\/ScreenHunter_31-Dec.-09-22.31.jpg\"><img loading=\"lazy\" decoding=\"async\" alt=\"ScreenHunter_31 Dec. 09 22.31\" src=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2013\/12\/ScreenHunter_31-Dec.-09-22.31-300x162.jpg\" width=\"300\" height=\"162\" \/><\/a><\/p>\n<p>This next image is a graph of the Real Component of the Complex output from the FFT function.<\/p>\n<p><a href=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2013\/12\/ScreenHunter_32-Dec.-09-22.31.jpg\"><img loading=\"lazy\" decoding=\"async\" alt=\"ScreenHunter_32 Dec. 09 22.31\" src=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2013\/12\/ScreenHunter_32-Dec.-09-22.31-300x162.jpg\" width=\"300\" height=\"162\" \/><\/a><\/p>\n<p>The following is a graph of the Imaginary Component of the Complex output from the FFT function.<\/p>\n<p><a href=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2013\/12\/ScreenHunter_33-Dec.-09-22.31.jpg\"><img loading=\"lazy\" decoding=\"async\" alt=\"ScreenHunter_33 Dec. 09 22.31\" src=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2013\/12\/ScreenHunter_33-Dec.-09-22.31-300x162.jpg\" width=\"300\" height=\"162\" \/><\/a><\/p>\n<p>The final image obtained from actual real-world data is this image showing the magnitude of the Real and Imaginary components together. The magnitude is given by:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/plugins\/wpmathpub\/phpmathpublisher\/img\/math_984.5_3d1c50e7faa5a8850a5c33125b35dd10.png\" style=\"vertical-align:-15.5px; display: inline-block ;\" alt=\"sqrt{(Real Component)^2 + (Imaginary Component)^2 } \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\" title=\"sqrt{(Real Component)^2 + (Imaginary Component)^2 } \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"\/><\/p>\n<p><a href=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2013\/12\/ScreenHunter_35-Dec.-09-22.32.jpg\"><img loading=\"lazy\" decoding=\"async\" alt=\"ScreenHunter_35 Dec. 09 22.32\" src=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2013\/12\/ScreenHunter_35-Dec.-09-22.32-300x162.jpg\" width=\"300\" height=\"162\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>These next three graphs show the Real and Imaginary Components and the Magnitude of a Sine wave which I generated in code, for testing.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2013\/12\/ScreenHunter_16-Dec.-09-21.35.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-145\" alt=\"ScreenHunter_16 Dec. 09 21.35\" src=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2013\/12\/ScreenHunter_16-Dec.-09-21.35-300x162.jpg\" width=\"300\" height=\"162\" srcset=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2013\/12\/ScreenHunter_16-Dec.-09-21.35-300x162.jpg 300w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2013\/12\/ScreenHunter_16-Dec.-09-21.35-1024x554.jpg 1024w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2013\/12\/ScreenHunter_16-Dec.-09-21.35.jpg 1916w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a> <a href=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2013\/12\/ScreenHunter_17-Dec.-09-21.35.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-144\" alt=\"ScreenHunter_17 Dec. 09 21.35\" src=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2013\/12\/ScreenHunter_17-Dec.-09-21.35-300x162.jpg\" width=\"300\" height=\"162\" srcset=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2013\/12\/ScreenHunter_17-Dec.-09-21.35-300x162.jpg 300w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2013\/12\/ScreenHunter_17-Dec.-09-21.35-1024x554.jpg 1024w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2013\/12\/ScreenHunter_17-Dec.-09-21.35.jpg 1916w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a> <a href=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2013\/12\/ScreenHunter_18-Dec.-09-21.35.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-143\" alt=\"ScreenHunter_18 Dec. 09 21.35\" src=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2013\/12\/ScreenHunter_18-Dec.-09-21.35-300x162.jpg\" width=\"300\" height=\"162\" srcset=\"https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2013\/12\/ScreenHunter_18-Dec.-09-21.35-300x162.jpg 300w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2013\/12\/ScreenHunter_18-Dec.-09-21.35-1024x554.jpg 1024w, https:\/\/phoenixgamedevelopment.com\/blog\/wp-content\/uploads\/2013\/12\/ScreenHunter_18-Dec.-09-21.35.jpg 1916w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>The next step is to generate a spectrogram for the FFT output data, as well as some additional graphs, and add some new features and bug fixes to the main program, such as the ability to save graphs as image files.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I have made significant progress on this project. I believe I have correctly implemented an FFT algorithm in my program. I have tested the out put using THIS sites data, and it seems to match the expected pattern, even though the exact values are not the same. The graphs being produced also look correct. This [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,10],"tags":[],"class_list":["post-148","post","type-post","status-publish","format-standard","hentry","category-inventions","category-software-and-games","has-post-title","has-post-date","has-post-category","has-post-tag","has-post-comment","has-post-author",""],"aioseo_notices":[],"builder_content":"","_links":{"self":[{"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/posts\/148"}],"collection":[{"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/comments?post=148"}],"version-history":[{"count":6,"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/posts\/148\/revisions"}],"predecessor-version":[{"id":157,"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/posts\/148\/revisions\/157"}],"wp:attachment":[{"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/media?parent=148"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/categories?post=148"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/phoenixgamedevelopment.com\/blog\/wp-json\/wp\/v2\/tags?post=148"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}