CINXE.COM
Fast Fourier transform - Wikipedia
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available" lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>Fast Fourier transform - Wikipedia</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available";var cookie=document.cookie.match(/(?:^|; )enwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy", "wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"38f42062-09d0-451f-a5b2-426e85d76450","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Fast_Fourier_transform","wgTitle":"Fast Fourier transform","wgCurRevisionId":1259841024,"wgRevisionId":1259841024,"wgArticleId":11512,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["CS1 Latin-language sources (la)","CS1 German-language sources (de)","CS1 maint: location missing publisher","CS1: long volume value","Articles with short description","Short description is different from Wikidata","Use American English from March 2019","All Wikipedia articles written in American English","Articles needing additional references from November 2024","All articles needing additional references","Webarchive template wayback links","FFT algorithms", "Digital signal processing","Discrete transforms"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"Fast_Fourier_transform","wgRelevantArticleId":11512,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":false,"wgFlaggedRevsParams":{"tags":{"status":{"levels":1}}},"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":70000,"wgRelatedArticlesCompat":[],"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true, "wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q623950","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.cite.styles":"ready","ext.math.styles":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.cite.ux-enhancements","mediawiki.page.media","site","mediawiki.page.ready","mediawiki.toc", "skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.gadget.ReferenceTooltips","ext.gadget.switcher","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","ext.cx.eventlogging.campaigns","ext.cx.uls.quick.actions","wikibase.client.vector-2022","ext.checkUser.clientHints","ext.quicksurveys.init","ext.growthExperiments.SuggestedEditSession","wikibase.sidebar.tracking"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=en&modules=ext.cite.styles%7Cext.math.styles%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediaBadges%7Cext.wikimediamessages.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/7/78/DIT-FFT-butterfly.svg/1200px-DIT-FFT-butterfly.svg.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="1184"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/7/78/DIT-FFT-butterfly.svg/800px-DIT-FFT-butterfly.svg.png"> <meta property="og:image:width" content="800"> <meta property="og:image:height" content="789"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/thumb/7/78/DIT-FFT-butterfly.svg/640px-DIT-FFT-butterfly.svg.png"> <meta property="og:image:width" content="640"> <meta property="og:image:height" content="632"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Fast Fourier transform - Wikipedia"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//en.m.wikipedia.org/wiki/Fast_Fourier_transform"> <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/w/index.php?title=Fast_Fourier_transform&action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikipedia (en)"> <link rel="EditURI" type="application/rsd+xml" href="//en.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://en.wikipedia.org/wiki/Fast_Fourier_transform"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en"> <link rel="alternate" type="application/atom+xml" title="Wikipedia Atom feed" href="/w/index.php?title=Special:RecentChanges&feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject mw-editable page-Fast_Fourier_transform rootpage-Fast_Fourier_transform skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Jump to content</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Main menu" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Main menu</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Main menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigation </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z"><span>Main page</span></a></li><li id="n-contents" class="mw-list-item"><a href="/wiki/Wikipedia:Contents" title="Guides to browsing Wikipedia"><span>Contents</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Portal:Current_events" title="Articles related to current events"><span>Current events</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Special:Random" title="Visit a randomly selected article [x]" accesskey="x"><span>Random article</span></a></li><li id="n-aboutsite" class="mw-list-item"><a href="/wiki/Wikipedia:About" title="Learn about Wikipedia and how it works"><span>About Wikipedia</span></a></li><li id="n-contactpage" class="mw-list-item"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us" title="How to contact Wikipedia"><span>Contact us</span></a></li> </ul> </div> </div> <div id="p-interaction" class="vector-menu mw-portlet mw-portlet-interaction" > <div class="vector-menu-heading"> Contribute </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-help" class="mw-list-item"><a href="/wiki/Help:Contents" title="Guidance on how to use and edit Wikipedia"><span>Help</span></a></li><li id="n-introduction" class="mw-list-item"><a href="/wiki/Help:Introduction" title="Learn how to edit Wikipedia"><span>Learn to edit</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikipedia:Community_portal" title="The hub for editors"><span>Community portal</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:RecentChanges" title="A list of recent changes to Wikipedia [r]" accesskey="r"><span>Recent changes</span></a></li><li id="n-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_upload_wizard" title="Add images or other media for use on Wikipedia"><span>Upload file</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Main_Page" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikipedia.png" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wikipedia" src="/static/images/mobile/copyright/wikipedia-wordmark-en.svg" style="width: 7.5em; height: 1.125em;"> <img class="mw-logo-tagline" alt="The Free Encyclopedia" src="/static/images/mobile/copyright/wikipedia-tagline-en.svg" width="117" height="13" style="width: 7.3125em; height: 0.8125em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Special:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Search Wikipedia [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Search Wikipedia" aria-label="Search Wikipedia" autocapitalize="sentences" title="Search Wikipedia [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Personal tools"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page's font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Appearance" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Appearance</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en" class=""><span>Donate</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:CreateAccount&returnto=Fast+Fourier+transform" title="You are encouraged to create an account and log in; however, it is not mandatory" class=""><span>Create account</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:UserLogin&returnto=Fast+Fourier+transform" title="You're encouraged to log in; however, it's not mandatory. [o]" accesskey="o" class=""><span>Log in</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="Log in and more options" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Personal tools" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Personal tools</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="User menu" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en"><span>Donate</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:CreateAccount&returnto=Fast+Fourier+transform" title="You are encouraged to create an account and log in; however, it is not mandatory"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Create account</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:UserLogin&returnto=Fast+Fourier+transform" title="You're encouraged to log in; however, it's not mandatory. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Log in</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Pages for logged out editors <a href="/wiki/Help:Introduction" aria-label="Learn more about editing"><span>learn more</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Special:MyContributions" title="A list of edits made from this IP address [y]" accesskey="y"><span>Contributions</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Special:MyTalk" title="Discussion about edits from this IP address [n]" accesskey="n"><span>Talk</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Contents" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Contents</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">hide</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">(Top)</div> </a> </li> <li id="toc-History" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#History"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>History</span> </div> </a> <ul id="toc-History-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Definition" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Definition"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Definition</span> </div> </a> <ul id="toc-Definition-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Algorithms" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Algorithms"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Algorithms</span> </div> </a> <button aria-controls="toc-Algorithms-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Algorithms subsection</span> </button> <ul id="toc-Algorithms-sublist" class="vector-toc-list"> <li id="toc-Cooley–Tukey_algorithm" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Cooley–Tukey_algorithm"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.1</span> <span>Cooley–Tukey algorithm</span> </div> </a> <ul id="toc-Cooley–Tukey_algorithm-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Other_FFT_algorithms" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Other_FFT_algorithms"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.2</span> <span>Other FFT algorithms</span> </div> </a> <ul id="toc-Other_FFT_algorithms-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-FFT_algorithms_specialized_for_real_or_symmetric_data" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#FFT_algorithms_specialized_for_real_or_symmetric_data"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>FFT algorithms specialized for real or symmetric data</span> </div> </a> <ul id="toc-FFT_algorithms_specialized_for_real_or_symmetric_data-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Computational_issues" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Computational_issues"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>Computational issues</span> </div> </a> <button aria-controls="toc-Computational_issues-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Computational issues subsection</span> </button> <ul id="toc-Computational_issues-sublist" class="vector-toc-list"> <li id="toc-Bounds_on_complexity_and_operation_counts" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Bounds_on_complexity_and_operation_counts"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.1</span> <span>Bounds on complexity and operation counts</span> </div> </a> <ul id="toc-Bounds_on_complexity_and_operation_counts-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Approximations" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Approximations"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.2</span> <span>Approximations</span> </div> </a> <ul id="toc-Approximations-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Accuracy" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Accuracy"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.3</span> <span>Accuracy</span> </div> </a> <ul id="toc-Accuracy-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Multidimensional_FFTs" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Multidimensional_FFTs"> <div class="vector-toc-text"> <span class="vector-toc-numb">6</span> <span>Multidimensional FFTs</span> </div> </a> <ul id="toc-Multidimensional_FFTs-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Other_generalizations" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Other_generalizations"> <div class="vector-toc-text"> <span class="vector-toc-numb">7</span> <span>Other generalizations</span> </div> </a> <ul id="toc-Other_generalizations-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Applications" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Applications"> <div class="vector-toc-text"> <span class="vector-toc-numb">8</span> <span>Applications</span> </div> </a> <ul id="toc-Applications-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Limitation" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Limitation"> <div class="vector-toc-text"> <span class="vector-toc-numb">9</span> <span>Limitation</span> </div> </a> <ul id="toc-Limitation-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Research_areas" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Research_areas"> <div class="vector-toc-text"> <span class="vector-toc-numb">10</span> <span>Research areas</span> </div> </a> <ul id="toc-Research_areas-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Language_reference" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Language_reference"> <div class="vector-toc-text"> <span class="vector-toc-numb">11</span> <span>Language reference</span> </div> </a> <ul id="toc-Language_reference-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-See_also" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#See_also"> <div class="vector-toc-text"> <span class="vector-toc-numb">12</span> <span>See also</span> </div> </a> <ul id="toc-See_also-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-References" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#References"> <div class="vector-toc-text"> <span class="vector-toc-numb">13</span> <span>References</span> </div> </a> <ul id="toc-References-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Further_reading" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Further_reading"> <div class="vector-toc-text"> <span class="vector-toc-numb">14</span> <span>Further reading</span> </div> </a> <ul id="toc-Further_reading-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-External_links" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#External_links"> <div class="vector-toc-text"> <span class="vector-toc-numb">15</span> <span>External links</span> </div> </a> <ul id="toc-External_links-sublist" class="vector-toc-list"> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Contents" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Fast Fourier transform</span></h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="Go to an article in another language. Available in 29 languages" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-29" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> <span class="vector-dropdown-label-text">29 languages</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-ar mw-list-item"><a href="https://ar.wikipedia.org/wiki/%D8%AA%D8%AD%D9%88%D9%8A%D9%84_%D9%81%D9%88%D8%B1%D9%8A%D9%8A%D9%87_%D8%A7%D9%84%D8%B3%D8%B1%D9%8A%D8%B9" title="تحويل فورييه السريع – Arabic" lang="ar" hreflang="ar" data-title="تحويل فورييه السريع" data-language-autonym="العربية" data-language-local-name="Arabic" class="interlanguage-link-target"><span>العربية</span></a></li><li class="interlanguage-link interwiki-az mw-list-item"><a href="https://az.wikipedia.org/wiki/S%C3%BCr%C9%99tli_Furye_%C3%A7evirm%C9%99si" title="Sürətli Furye çevirməsi – Azerbaijani" lang="az" hreflang="az" data-title="Sürətli Furye çevirməsi" data-language-autonym="Azərbaycanca" data-language-local-name="Azerbaijani" class="interlanguage-link-target"><span>Azərbaycanca</span></a></li><li class="interlanguage-link interwiki-ca mw-list-item"><a href="https://ca.wikipedia.org/wiki/Transformada_r%C3%A0pida_de_Fourier" title="Transformada ràpida de Fourier – Catalan" lang="ca" hreflang="ca" data-title="Transformada ràpida de Fourier" data-language-autonym="Català" data-language-local-name="Catalan" class="interlanguage-link-target"><span>Català</span></a></li><li class="interlanguage-link interwiki-cs mw-list-item"><a href="https://cs.wikipedia.org/wiki/Rychl%C3%A1_Fourierova_transformace" title="Rychlá Fourierova transformace – Czech" lang="cs" hreflang="cs" data-title="Rychlá Fourierova transformace" data-language-autonym="Čeština" data-language-local-name="Czech" class="interlanguage-link-target"><span>Čeština</span></a></li><li class="interlanguage-link interwiki-da mw-list-item"><a href="https://da.wikipedia.org/wiki/Fast_Fourier_Transform" title="Fast Fourier Transform – Danish" lang="da" hreflang="da" data-title="Fast Fourier Transform" data-language-autonym="Dansk" data-language-local-name="Danish" class="interlanguage-link-target"><span>Dansk</span></a></li><li class="interlanguage-link interwiki-de mw-list-item"><a href="https://de.wikipedia.org/wiki/Schnelle_Fourier-Transformation" title="Schnelle Fourier-Transformation – German" lang="de" hreflang="de" data-title="Schnelle Fourier-Transformation" data-language-autonym="Deutsch" data-language-local-name="German" class="interlanguage-link-target"><span>Deutsch</span></a></li><li class="interlanguage-link interwiki-et mw-list-item"><a href="https://et.wikipedia.org/wiki/Fourier%27_kiirteisendus" title="Fourier' kiirteisendus – Estonian" lang="et" hreflang="et" data-title="Fourier' kiirteisendus" data-language-autonym="Eesti" data-language-local-name="Estonian" class="interlanguage-link-target"><span>Eesti</span></a></li><li class="interlanguage-link interwiki-es mw-list-item"><a href="https://es.wikipedia.org/wiki/Transformada_r%C3%A1pida_de_Fourier" title="Transformada rápida de Fourier – Spanish" lang="es" hreflang="es" data-title="Transformada rápida de Fourier" data-language-autonym="Español" data-language-local-name="Spanish" class="interlanguage-link-target"><span>Español</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikipedia.org/wiki/%D8%AA%D8%A8%D8%AF%DB%8C%D9%84_%D9%81%D9%88%D8%B1%DB%8C%D9%87_%D8%B3%D8%B1%DB%8C%D8%B9" title="تبدیل فوریه سریع – Persian" lang="fa" hreflang="fa" data-title="تبدیل فوریه سریع" data-language-autonym="فارسی" data-language-local-name="Persian" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-fr mw-list-item"><a href="https://fr.wikipedia.org/wiki/Transformation_de_Fourier_rapide" title="Transformation de Fourier rapide – French" lang="fr" hreflang="fr" data-title="Transformation de Fourier rapide" data-language-autonym="Français" data-language-local-name="French" class="interlanguage-link-target"><span>Français</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wikipedia.org/wiki/%EA%B3%A0%EC%86%8D_%ED%91%B8%EB%A6%AC%EC%97%90_%EB%B3%80%ED%99%98" title="고속 푸리에 변환 – Korean" lang="ko" hreflang="ko" data-title="고속 푸리에 변환" data-language-autonym="한국어" data-language-local-name="Korean" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-hi mw-list-item"><a href="https://hi.wikipedia.org/wiki/%E0%A4%A4%E0%A5%8D%E0%A4%B5%E0%A4%B0%E0%A4%BF%E0%A4%A4_%E0%A4%AB%E0%A5%81%E0%A4%B0%E0%A4%BF%E0%A4%85%E0%A4%B0_%E0%A4%B0%E0%A5%82%E0%A4%AA%E0%A4%BE%E0%A4%A8%E0%A5%8D%E0%A4%A4%E0%A4%B0" title="त्वरित फुरिअर रूपान्तर – Hindi" lang="hi" hreflang="hi" data-title="त्वरित फुरिअर रूपान्तर" data-language-autonym="हिन्दी" data-language-local-name="Hindi" class="interlanguage-link-target"><span>हिन्दी</span></a></li><li class="interlanguage-link interwiki-id mw-list-item"><a href="https://id.wikipedia.org/wiki/Transformasi_Fourier_cepat" title="Transformasi Fourier cepat – Indonesian" lang="id" hreflang="id" data-title="Transformasi Fourier cepat" data-language-autonym="Bahasa Indonesia" data-language-local-name="Indonesian" class="interlanguage-link-target"><span>Bahasa Indonesia</span></a></li><li class="interlanguage-link interwiki-it mw-list-item"><a href="https://it.wikipedia.org/wiki/Trasformata_di_Fourier_veloce" title="Trasformata di Fourier veloce – Italian" lang="it" hreflang="it" data-title="Trasformata di Fourier veloce" data-language-autonym="Italiano" data-language-local-name="Italian" class="interlanguage-link-target"><span>Italiano</span></a></li><li class="interlanguage-link interwiki-he mw-list-item"><a href="https://he.wikipedia.org/wiki/%D7%94%D7%AA%D7%9E%D7%A8%D7%AA_%D7%A4%D7%95%D7%A8%D7%99%D7%99%D7%94_%D7%9E%D7%94%D7%99%D7%A8%D7%94" title="התמרת פורייה מהירה – Hebrew" lang="he" hreflang="he" data-title="התמרת פורייה מהירה" data-language-autonym="עברית" data-language-local-name="Hebrew" class="interlanguage-link-target"><span>עברית</span></a></li><li class="interlanguage-link interwiki-nl mw-list-item"><a href="https://nl.wikipedia.org/wiki/Fast_Fourier_transform" title="Fast Fourier transform – Dutch" lang="nl" hreflang="nl" data-title="Fast Fourier transform" data-language-autonym="Nederlands" data-language-local-name="Dutch" class="interlanguage-link-target"><span>Nederlands</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikipedia.org/wiki/%E9%AB%98%E9%80%9F%E3%83%95%E3%83%BC%E3%83%AA%E3%82%A8%E5%A4%89%E6%8F%9B" title="高速フーリエ変換 – Japanese" lang="ja" hreflang="ja" data-title="高速フーリエ変換" data-language-autonym="日本語" data-language-local-name="Japanese" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-pl mw-list-item"><a href="https://pl.wikipedia.org/wiki/Szybka_transformacja_Fouriera" title="Szybka transformacja Fouriera – Polish" lang="pl" hreflang="pl" data-title="Szybka transformacja Fouriera" data-language-autonym="Polski" data-language-local-name="Polish" class="interlanguage-link-target"><span>Polski</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikipedia.org/wiki/Transformada_r%C3%A1pida_de_Fourier" title="Transformada rápida de Fourier – Portuguese" lang="pt" hreflang="pt" data-title="Transformada rápida de Fourier" data-language-autonym="Português" data-language-local-name="Portuguese" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikipedia.org/wiki/%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%BE%D0%B5_%D0%BF%D1%80%D0%B5%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%A4%D1%83%D1%80%D1%8C%D0%B5" title="Быстрое преобразование Фурье – Russian" lang="ru" hreflang="ru" data-title="Быстрое преобразование Фурье" data-language-autonym="Русский" data-language-local-name="Russian" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-sr mw-list-item"><a href="https://sr.wikipedia.org/wiki/%D0%91%D1%80%D0%B7%D0%B0_%D0%A4%D1%83%D1%80%D0%B8%D1%98%D0%B5%D0%BE%D0%B2%D0%B0_%D1%82%D1%80%D0%B0%D0%BD%D1%81%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%98%D0%B0" title="Брза Фуријеова трансформација – Serbian" lang="sr" hreflang="sr" data-title="Брза Фуријеова трансформација" data-language-autonym="Српски / srpski" data-language-local-name="Serbian" class="interlanguage-link-target"><span>Српски / srpski</span></a></li><li class="interlanguage-link interwiki-sh mw-list-item"><a href="https://sh.wikipedia.org/wiki/Brza_furijeova_transformacija" title="Brza furijeova transformacija – Serbo-Croatian" lang="sh" hreflang="sh" data-title="Brza furijeova transformacija" data-language-autonym="Srpskohrvatski / српскохрватски" data-language-local-name="Serbo-Croatian" class="interlanguage-link-target"><span>Srpskohrvatski / српскохрватски</span></a></li><li class="interlanguage-link interwiki-sv mw-list-item"><a href="https://sv.wikipedia.org/wiki/Snabb_fouriertransform" title="Snabb fouriertransform – Swedish" lang="sv" hreflang="sv" data-title="Snabb fouriertransform" data-language-autonym="Svenska" data-language-local-name="Swedish" class="interlanguage-link-target"><span>Svenska</span></a></li><li class="interlanguage-link interwiki-ta mw-list-item"><a href="https://ta.wikipedia.org/wiki/%E0%AE%B5%E0%AE%BF%E0%AE%B0%E0%AF%88%E0%AE%B5%E0%AF%81_%E0%AE%83%E0%AE%AA%E0%AF%82%E0%AE%B0%E0%AE%BF%E0%AE%AF%E0%AF%87_%E0%AE%89%E0%AE%B0%E0%AF%81%E0%AE%AE%E0%AE%BE%E0%AE%B1%E0%AF%8D%E0%AE%B1%E0%AE%AE%E0%AF%8D" title="விரைவு ஃபூரியே உருமாற்றம் – Tamil" lang="ta" hreflang="ta" data-title="விரைவு ஃபூரியே உருமாற்றம்" data-language-autonym="தமிழ்" data-language-local-name="Tamil" class="interlanguage-link-target"><span>தமிழ்</span></a></li><li class="interlanguage-link interwiki-tr mw-list-item"><a href="https://tr.wikipedia.org/wiki/H%C4%B1zl%C4%B1_Fourier_d%C3%B6n%C3%BC%C5%9F%C3%BCm%C3%BC" title="Hızlı Fourier dönüşümü – Turkish" lang="tr" hreflang="tr" data-title="Hızlı Fourier dönüşümü" data-language-autonym="Türkçe" data-language-local-name="Turkish" class="interlanguage-link-target"><span>Türkçe</span></a></li><li class="interlanguage-link interwiki-uk mw-list-item"><a href="https://uk.wikipedia.org/wiki/%D0%A8%D0%B2%D0%B8%D0%B4%D0%BA%D0%B5_%D0%BF%D0%B5%D1%80%D0%B5%D1%82%D0%B2%D0%BE%D1%80%D0%B5%D0%BD%D0%BD%D1%8F_%D0%A4%D1%83%D1%80%27%D1%94" title="Швидке перетворення Фур'є – Ukrainian" lang="uk" hreflang="uk" data-title="Швидке перетворення Фур'є" data-language-autonym="Українська" data-language-local-name="Ukrainian" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wikipedia.org/wiki/Bi%E1%BA%BFn_%C4%91%E1%BB%95i_Fourier_nhanh" title="Biến đổi Fourier nhanh – Vietnamese" lang="vi" hreflang="vi" data-title="Biến đổi Fourier nhanh" data-language-autonym="Tiếng Việt" data-language-local-name="Vietnamese" class="interlanguage-link-target"><span>Tiếng Việt</span></a></li><li class="interlanguage-link interwiki-zh-yue mw-list-item"><a href="https://zh-yue.wikipedia.org/wiki/%E5%BF%AB%E9%80%9F%E5%82%85%E7%AB%8B%E8%91%89%E8%AE%8A%E6%8F%9B" title="快速傅立葉變換 – Cantonese" lang="yue" hreflang="yue" data-title="快速傅立葉變換" data-language-autonym="粵語" data-language-local-name="Cantonese" class="interlanguage-link-target"><span>粵語</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/%E5%BF%AB%E9%80%9F%E5%82%85%E9%87%8C%E5%8F%B6%E5%8F%98%E6%8D%A2" title="快速傅里叶变换 – Chinese" lang="zh" hreflang="zh" data-title="快速傅里叶变换" data-language-autonym="中文" data-language-local-name="Chinese" class="interlanguage-link-target"><span>中文</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q623950#sitelinks-wikipedia" title="Edit interlanguage links" class="wbc-editpage">Edit links</a></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Namespaces"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Fast_Fourier_transform" title="View the content page [c]" accesskey="c"><span>Article</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Talk:Fast_Fourier_transform" rel="discussion" title="Discuss improvements to the content page [t]" accesskey="t"><span>Talk</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Change language variant" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Views"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Fast_Fourier_transform"><span>Read</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Fast_Fourier_transform&action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Fast_Fourier_transform&action=history" title="Past revisions of this page [h]" accesskey="h"><span>View history</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Tools" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Tools</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Tools</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">hide</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > <div class="vector-menu-heading"> Actions </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/Fast_Fourier_transform"><span>Read</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Fast_Fourier_transform&action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Fast_Fourier_transform&action=history"><span>View history</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> General </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Special:WhatLinksHere/Fast_Fourier_transform" title="List of all English Wikipedia pages containing links to this page [j]" accesskey="j"><span>What links here</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Special:RecentChangesLinked/Fast_Fourier_transform" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k"><span>Related changes</span></a></li><li id="t-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_Upload_Wizard" title="Upload files [u]" accesskey="u"><span>Upload file</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q"><span>Special pages</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Fast_Fourier_transform&oldid=1259841024" title="Permanent link to this revision of this page"><span>Permanent link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Fast_Fourier_transform&action=info" title="More information about this page"><span>Page information</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Special:CiteThisPage&page=Fast_Fourier_transform&id=1259841024&wpFormIdentifier=titleform" title="Information on how to cite this page"><span>Cite this page</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:UrlShortener&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FFast_Fourier_transform"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FFast_Fourier_transform"><span>Download QR code</span></a></li> </ul> </div> </div> <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > <div class="vector-menu-heading"> Print/export </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Special:DownloadAsPdf&page=Fast_Fourier_transform&action=show-download-screen" title="Download this page as a PDF file"><span>Download as PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=Fast_Fourier_transform&printable=yes" title="Printable version of this page [p]" accesskey="p"><span>Printable version</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> In other projects </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="wb-otherproject-link wb-otherproject-commons mw-list-item"><a href="https://commons.wikimedia.org/wiki/Category:FFT" hreflang="en"><span>Wikimedia Commons</span></a></li><li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q623950" title="Structured data on this page hosted by Wikidata [g]" accesskey="g"><span>Wikidata item</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Appearance</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">hide</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> <div id="siteSub" class="noprint">From Wikipedia, the free encyclopedia</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><div class="shortdescription nomobile noexcerpt noprint searchaux" style="display:none">O(N log N) discrete Fourier transform algorithm</div> <style data-mw-deduplicate="TemplateStyles:r1236090951">.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}</style><div role="note" class="hatnote navigation-not-searchable">"FFT" redirects here. For other uses, see <a href="/wiki/FFT_(disambiguation)" class="mw-disambig" title="FFT (disambiguation)">FFT (disambiguation)</a>.</div> <p class="mw-empty-elt"> </p> <figure class="mw-default-size" typeof="mw:File/Thumb"><a href="/wiki/File:DIT-FFT-butterfly.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/7/78/DIT-FFT-butterfly.svg/220px-DIT-FFT-butterfly.svg.png" decoding="async" width="220" height="217" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/7/78/DIT-FFT-butterfly.svg/330px-DIT-FFT-butterfly.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/7/78/DIT-FFT-butterfly.svg/440px-DIT-FFT-butterfly.svg.png 2x" data-file-width="302" data-file-height="298" /></a><figcaption>An example FFT algorithm structure, using a decomposition into half-size FFTs</figcaption></figure> <figure class="mw-default-size" typeof="mw:File/Thumb"><a href="/wiki/File:FFT_of_Cosine_Summation_Function.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/3/30/FFT_of_Cosine_Summation_Function.svg/220px-FFT_of_Cosine_Summation_Function.svg.png" decoding="async" width="220" height="183" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/3/30/FFT_of_Cosine_Summation_Function.svg/330px-FFT_of_Cosine_Summation_Function.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/3/30/FFT_of_Cosine_Summation_Function.svg/440px-FFT_of_Cosine_Summation_Function.svg.png 2x" data-file-width="970" data-file-height="805" /></a><figcaption>A discrete Fourier analysis of a sum of cosine waves at 10, 20, 30, 40, and 50 Hz</figcaption></figure> <p>A <b>fast Fourier transform</b> (<b>FFT</b>) is an <a href="/wiki/Algorithm" title="Algorithm">algorithm</a> that computes the <a href="/wiki/Discrete_Fourier_Transform" class="mw-redirect" title="Discrete Fourier Transform">Discrete Fourier Transform</a> (DFT) of a sequence, or its inverse (IDFT). <a href="/wiki/Fourier_analysis" title="Fourier analysis">Fourier analysis</a> converts a signal from its original domain (often time or space) to a representation in the <a href="/wiki/Frequency_domain" title="Frequency domain">frequency domain</a> and vice versa. The DFT is obtained by decomposing a <a href="/wiki/Sequence" title="Sequence">sequence</a> of values into components of different frequencies.<sup id="cite_ref-Heideman_Johnson_Burrus_1984_1-0" class="reference"><a href="#cite_note-Heideman_Johnson_Burrus_1984-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> This operation is useful in many fields, but computing it directly from the definition is often too slow to be practical. An FFT rapidly computes such transformations by <a href="/wiki/Matrix_decomposition" title="Matrix decomposition">factorizing</a> the <a href="/wiki/DFT_matrix" title="DFT matrix">DFT matrix</a> into a product of <a href="/wiki/Sparse_matrix" title="Sparse matrix">sparse</a> (mostly zero) factors.<sup id="cite_ref-Loan_1992_2-0" class="reference"><a href="#cite_note-Loan_1992-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> As a result, it manages to reduce the <a href="/wiki/Computational_complexity_theory" title="Computational complexity theory">complexity</a> of computing the DFT from <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle O(n^{2})}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <msup> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msup> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle O(n^{2})}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/5982eaab0c0dfc3f9f0bd9380db63a9e0f6da999" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:6.032ex; height:3.009ex;" alt="{\textstyle O(n^{2})}"></span>, which arises if one simply applies the definition of DFT, to <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle O(n\log n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>n</mi> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle O(n\log n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/e300e6b542c2c33ac12df0f02c5047db8ee8e1ca" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:10.118ex; height:2.843ex;" alt="{\textstyle O(n\log n)}"></span>, where <span class="texhtml mvar" style="font-style:italic;">n</span> is the data size. The difference in speed can be enormous, especially for long data sets where <span class="texhtml mvar" style="font-style:italic;">n</span> may be in the thousands or millions. In the presence of <a href="/wiki/Round-off_error" title="Round-off error">round-off error</a>, many FFT algorithms are much more accurate than evaluating the DFT definition directly or indirectly. There are many different FFT algorithms based on a wide range of published theories, from simple <a href="/wiki/Complex_number" title="Complex number">complex-number arithmetic</a> to <a href="/wiki/Group_theory" title="Group theory">group theory</a> and <a href="/wiki/Number_theory" title="Number theory">number theory</a>. </p> <figure class="mw-default-size" typeof="mw:File/Thumb"><a href="/wiki/File:Simple_time_domain_vs_frequency_domain.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Simple_time_domain_vs_frequency_domain.svg/220px-Simple_time_domain_vs_frequency_domain.svg.png" decoding="async" width="220" height="171" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/0/07/Simple_time_domain_vs_frequency_domain.svg/330px-Simple_time_domain_vs_frequency_domain.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/0/07/Simple_time_domain_vs_frequency_domain.svg/440px-Simple_time_domain_vs_frequency_domain.svg.png 2x" data-file-width="512" data-file-height="398" /></a><figcaption>Time-based representation (above) and frequency-based representation (below) of the same signal, where the lower representation can be obtained from the upper one by Fourier transformation</figcaption></figure> <p>Fast Fourier transforms are widely used for <a href="/wiki/Discrete_Fourier_transform#Applications" title="Discrete Fourier transform">applications</a> in engineering, music, science, and mathematics. The basic ideas were popularized in 1965, but some algorithms had been derived as early as 1805.<sup id="cite_ref-Heideman_Johnson_Burrus_1984_1-1" class="reference"><a href="#cite_note-Heideman_Johnson_Burrus_1984-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> In 1994, <a href="/wiki/Gilbert_Strang" title="Gilbert Strang">Gilbert Strang</a> described the FFT as "the most important <a href="/wiki/Numerical_algorithm" class="mw-redirect" title="Numerical algorithm">numerical algorithm</a> of our lifetime",<sup id="cite_ref-Strang_1994_3-0" class="reference"><a href="#cite_note-Strang_1994-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-Kent_2002_4-0" class="reference"><a href="#cite_note-Kent_2002-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> and it was included in Top 10 Algorithms of 20th Century by the <a href="/wiki/IEEE" class="mw-redirect" title="IEEE">IEEE</a> magazine <i>Computing in Science & Engineering</i>.<sup id="cite_ref-Dongarra_Sullivan_2000_5-0" class="reference"><a href="#cite_note-Dongarra_Sullivan_2000-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> </p><p>The best-known FFT algorithms depend upon the <a href="/wiki/Factorization" title="Factorization">factorization</a> of <span class="texhtml mvar" style="font-style:italic;">n</span>, but there are FFTs with <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(n\log n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>n</mi> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle O(n\log n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/9d2320768fb54880ca4356e61f60eb02a3f9d9f1" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:10.118ex; height:2.843ex;" alt="{\displaystyle O(n\log n)}"></span> complexity for all, even <a href="/wiki/Prime" class="mw-redirect" title="Prime">prime</a>, <span class="texhtml mvar" style="font-style:italic;">n</span>. Many FFT algorithms depend only on the fact that <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle e^{-2\pi i/n}}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <msup> <mi>e</mi> <mrow class="MJX-TeXAtom-ORD"> <mo>−<!-- − --></mo> <mn>2</mn> <mi>π<!-- π --></mi> <mi>i</mi> <mrow class="MJX-TeXAtom-ORD"> <mo>/</mo> </mrow> <mi>n</mi> </mrow> </msup> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle e^{-2\pi i/n}}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/b5027eff70a854e278cb3716e7a921d2d2176657" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:6.734ex; height:2.676ex;" alt="{\textstyle e^{-2\pi i/n}}"></span> is an <span class="texhtml mvar" style="font-style:italic;">n</span>'th <a href="/wiki/Primitive_root_of_unity" class="mw-redirect" title="Primitive root of unity">primitive root of unity</a>, and thus can be applied to analogous transforms over any <a href="/wiki/Finite_field" title="Finite field">finite field</a>, such as <a href="/wiki/Number-theoretic_transform" class="mw-redirect" title="Number-theoretic transform">number-theoretic transforms</a>. Since the inverse DFT is the same as the DFT, but with the opposite sign in the exponent and a <span class="texhtml">1/<i>n</i></span> factor, any FFT algorithm can easily be adapted for it. </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="History">History</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Fast_Fourier_transform&action=edit&section=1" title="Edit section: History"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The development of fast algorithms for DFT can be traced to <a href="/wiki/Carl_Friedrich_Gauss" title="Carl Friedrich Gauss">Carl Friedrich Gauss</a>'s unpublished 1805 work on the orbits of asteroids <a href="/wiki/2_Pallas" title="2 Pallas">Pallas</a> and <a href="/wiki/3_Juno" title="3 Juno">Juno</a>. Gauss wanted to interpolate the orbits from sample observations;<sup id="cite_ref-Gauss_1866_6-0" class="reference"><a href="#cite_note-Gauss_1866-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-Heideman_Johnson_Burrus_1985_7-0" class="reference"><a href="#cite_note-Heideman_Johnson_Burrus_1985-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> his method was very similar to the one that would be published in 1965 by <a href="/wiki/James_Cooley" title="James Cooley">James Cooley</a> and <a href="/wiki/John_Tukey" title="John Tukey">John Tukey</a>, who are generally credited for the invention of the modern generic FFT algorithm. While Gauss's work predated even <a href="/wiki/Joseph_Fourier" title="Joseph Fourier">Joseph Fourier</a>'s 1822 results, he did not analyze the method's <a href="/wiki/Computational_complexity" title="Computational complexity">complexity</a>, and eventually used other methods to achieve the same end. </p><p>Between 1805 and 1965, some versions of FFT were published by other authors. <a href="/wiki/Frank_Yates" title="Frank Yates">Frank Yates</a> in 1932 published his version called <i>interaction algorithm</i>, which provided <a href="/wiki/Fast_Walsh%E2%80%93Hadamard_transform" title="Fast Walsh–Hadamard transform">efficient computation of Hadamard and Walsh transforms</a>.<sup id="cite_ref-Yates_1937_8-0" class="reference"><a href="#cite_note-Yates_1937-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> Yates' algorithm is still used in the field of statistical design and analysis of experiments. In 1942, <a href="/wiki/G._C._Danielson" title="G. C. Danielson">G. C. Danielson</a> and <a href="/wiki/Cornelius_Lanczos" title="Cornelius Lanczos">Cornelius Lanczos</a> published their version to compute DFT for <a href="/wiki/X-ray_crystallography" title="X-ray crystallography">x-ray crystallography</a>, a field where calculation of Fourier transforms presented a formidable bottleneck.<sup id="cite_ref-Danielson_Lanczos_1942_9-0" class="reference"><a href="#cite_note-Danielson_Lanczos_1942-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-Lanczos_1956_10-0" class="reference"><a href="#cite_note-Lanczos_1956-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup> While many methods in the past had focused on reducing the constant factor for <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle O(n^{2})}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <msup> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msup> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle O(n^{2})}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/5982eaab0c0dfc3f9f0bd9380db63a9e0f6da999" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:6.032ex; height:3.009ex;" alt="{\textstyle O(n^{2})}"></span> computation by taking advantage of "symmetries", Danielson and Lanczos realized that one could use the "periodicity" and apply a "doubling trick" to "double [<span class="texhtml mvar" style="font-style:italic;">n</span>] with only slightly more than double the labor", though like Gauss they did not do the analysis to discover that this led to <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle O(n\log n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>n</mi> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle O(n\log n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/e300e6b542c2c33ac12df0f02c5047db8ee8e1ca" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:10.118ex; height:2.843ex;" alt="{\textstyle O(n\log n)}"></span> scaling.<sup id="cite_ref-Cooley_Lewis_Welch_1967_11-0" class="reference"><a href="#cite_note-Cooley_Lewis_Welch_1967-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup> </p><p>James Cooley and John Tukey independently rediscovered these earlier algorithms<sup id="cite_ref-Heideman_Johnson_Burrus_1985_7-1" class="reference"><a href="#cite_note-Heideman_Johnson_Burrus_1985-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> and published a <a href="/wiki/Cooley%E2%80%93Tukey_FFT_algorithm" title="Cooley–Tukey FFT algorithm">more general FFT</a> in 1965 that is applicable when <span class="texhtml mvar" style="font-style:italic;">n</span> is composite and not necessarily a power of 2, as well as analyzing the <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle O(n\log n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>n</mi> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle O(n\log n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/e300e6b542c2c33ac12df0f02c5047db8ee8e1ca" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:10.118ex; height:2.843ex;" alt="{\textstyle O(n\log n)}"></span> scaling.<sup id="cite_ref-Cooley_Tukey_1965_12-0" class="reference"><a href="#cite_note-Cooley_Tukey_1965-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> Tukey came up with the idea during a meeting of <a href="/wiki/President_Kennedy" class="mw-redirect" title="President Kennedy">President Kennedy</a>'s Science Advisory Committee where a discussion topic involved detecting nuclear tests by the Soviet Union by setting up sensors to surround the country from outside. To analyze the output of these sensors, an FFT algorithm would be needed. In discussion with Tukey, <a href="/wiki/Richard_Garwin" title="Richard Garwin">Richard Garwin</a> recognized the general applicability of the algorithm not just to national security problems, but also to a wide range of problems including one of immediate interest to him, determining the periodicities of the spin orientations in a 3-D crystal of Helium-3.<sup id="cite_ref-Cooley_1987_13-0" class="reference"><a href="#cite_note-Cooley_1987-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup> Garwin gave Tukey's idea to Cooley (both worked at <a href="/wiki/Thomas_J._Watson_Research_Center" title="Thomas J. Watson Research Center">IBM's Watson labs</a>) for implementation.<sup id="cite_ref-Garwin_1969_14-0" class="reference"><a href="#cite_note-Garwin_1969-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup> Cooley and Tukey published the paper in a relatively short time of six months.<sup id="cite_ref-Rockmore_2000_15-0" class="reference"><a href="#cite_note-Rockmore_2000-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup> As Tukey did not work at IBM, the patentability of the idea was doubted and the algorithm went into the public domain, which, through the computing revolution of the next decade, made FFT one of the indispensable algorithms in <a href="/wiki/Digital_signal_processing" title="Digital signal processing">digital signal processing</a>. </p> <div class="mw-heading mw-heading2"><h2 id="Definition">Definition</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Fast_Fourier_transform&action=edit&section=2" title="Edit section: Definition"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Let <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle x_{0},\ldots ,x_{n-1}}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <msub> <mi>x</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>0</mn> </mrow> </msub> <mo>,</mo> <mo>…<!-- … --></mo> <mo>,</mo> <msub> <mi>x</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>n</mi> <mo>−<!-- − --></mo> <mn>1</mn> </mrow> </msub> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle x_{0},\ldots ,x_{n-1}}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/302123d673447cda428e85b0feb6a1f04dd49422" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:12.211ex; height:2.009ex;" alt="{\displaystyle x_{0},\ldots ,x_{n-1}}"></span> be <a href="/wiki/Complex_number" title="Complex number">complex numbers</a>. The <a href="/wiki/Discrete_Fourier_transform" title="Discrete Fourier transform">DFT</a> is defined by the formula </p> <dl><dd><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle X_{k}=\sum _{m=0}^{n-1}x_{m}e^{-i2\pi km/n}\qquad k=0,\ldots ,n-1,}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <msub> <mi>X</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>k</mi> </mrow> </msub> <mo>=</mo> <munderover> <mo>∑<!-- ∑ --></mo> <mrow class="MJX-TeXAtom-ORD"> <mi>m</mi> <mo>=</mo> <mn>0</mn> </mrow> <mrow class="MJX-TeXAtom-ORD"> <mi>n</mi> <mo>−<!-- − --></mo> <mn>1</mn> </mrow> </munderover> <msub> <mi>x</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>m</mi> </mrow> </msub> <msup> <mi>e</mi> <mrow class="MJX-TeXAtom-ORD"> <mo>−<!-- − --></mo> <mi>i</mi> <mn>2</mn> <mi>π<!-- π --></mi> <mi>k</mi> <mi>m</mi> <mrow class="MJX-TeXAtom-ORD"> <mo>/</mo> </mrow> <mi>n</mi> </mrow> </msup> <mspace width="2em" /> <mi>k</mi> <mo>=</mo> <mn>0</mn> <mo>,</mo> <mo>…<!-- … --></mo> <mo>,</mo> <mi>n</mi> <mo>−<!-- − --></mo> <mn>1</mn> <mo>,</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle X_{k}=\sum _{m=0}^{n-1}x_{m}e^{-i2\pi km/n}\qquad k=0,\ldots ,n-1,}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/24ca61d1bccfa67c77ac9cc1620ae1ef18ebf8b7" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -3.005ex; width:43.42ex; height:7.343ex;" alt="{\displaystyle X_{k}=\sum _{m=0}^{n-1}x_{m}e^{-i2\pi km/n}\qquad k=0,\ldots ,n-1,}"></span></dd></dl> <p>where <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle e^{i2\pi /n}}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <msup> <mi>e</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>i</mi> <mn>2</mn> <mi>π<!-- π --></mi> <mrow class="MJX-TeXAtom-ORD"> <mo>/</mo> </mrow> <mi>n</mi> </mrow> </msup> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle e^{i2\pi /n}}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/b040216bd18f38e9b0fa8f5cb878d452efe2fe2f" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:5.455ex; height:2.843ex;" alt="{\displaystyle e^{i2\pi /n}}"></span> is a <a href="/wiki/Primitive_root_of_unity" class="mw-redirect" title="Primitive root of unity">primitive</a> <span class="texhtml mvar" style="font-style:italic;">n</span>'th root of 1. </p><p>Evaluating this definition directly requires <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle O(n^{2})}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <msup> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msup> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle O(n^{2})}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/5982eaab0c0dfc3f9f0bd9380db63a9e0f6da999" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:6.032ex; height:3.009ex;" alt="{\textstyle O(n^{2})}"></span> operations: there are <span class="texhtml mvar" style="font-style:italic;">n</span> outputs <span class="texhtml mvar" style="font-style:italic;">X<sub>k</sub></span> , and each output requires a sum of <span class="texhtml mvar" style="font-style:italic;">n</span> terms. An FFT is any method to compute the same results in <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle O(n\log n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>n</mi> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle O(n\log n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/e300e6b542c2c33ac12df0f02c5047db8ee8e1ca" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:10.118ex; height:2.843ex;" alt="{\textstyle O(n\log n)}"></span> operations. All known FFT algorithms require <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle O(n\log n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>n</mi> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle O(n\log n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/e300e6b542c2c33ac12df0f02c5047db8ee8e1ca" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:10.118ex; height:2.843ex;" alt="{\textstyle O(n\log n)}"></span> operations, although there is no known proof that lower complexity is impossible.<sup id="cite_ref-Frigo_Johnson_2007_16-0" class="reference"><a href="#cite_note-Frigo_Johnson_2007-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup> </p><p>To illustrate the savings of an FFT, consider the count of complex multiplications and additions for <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle n=4096}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>n</mi> <mo>=</mo> <mn>4096</mn> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle n=4096}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/dece13bcb5a570c0b5dd38d109237382bf9cb4c7" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:9.143ex; height:2.176ex;" alt="{\textstyle n=4096}"></span> data points. Evaluating the DFT's sums directly involves <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle n^{2}}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <msup> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msup> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle n^{2}}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/757b9acaa36490ec2cb6aa911a648e6e040c1728" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:2.449ex; height:2.509ex;" alt="{\textstyle n^{2}}"></span> complex multiplications and <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle n(n-1)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>n</mi> <mo stretchy="false">(</mo> <mi>n</mi> <mo>−<!-- − --></mo> <mn>1</mn> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle n(n-1)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/4b1fe90ca09fd15b60188b5322974c62994f2ffc" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:8.602ex; height:2.843ex;" alt="{\textstyle n(n-1)}"></span> complex additions, of which <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle O(n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle O(n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/e73234cd485b947e68d1d78823313db65ef226d7" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:4.977ex; height:2.843ex;" alt="{\textstyle O(n)}"></span> operations can be saved by eliminating trivial operations such as multiplications by 1, leaving about 30 million operations. In contrast, the radix-2 <a href="#Cooley–Tukey_algorithm">Cooley–Tukey algorithm</a>, for <span class="texhtml mvar" style="font-style:italic;">n</span> a power of 2, can compute the same result with only <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle (n/2)\log _{2}(n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mo stretchy="false">(</mo> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mo>/</mo> </mrow> <mn>2</mn> <mo stretchy="false">)</mo> <msub> <mi>log</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msub> <mo>⁡<!-- --></mo> <mo stretchy="false">(</mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle (n/2)\log _{2}(n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/1ad2dd0aaeee4e3c61707d45e259d175e8cf87c8" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:13.146ex; height:2.843ex;" alt="{\textstyle (n/2)\log _{2}(n)}"></span> complex multiplications (again, ignoring simplifications of multiplications by 1 and similar) and <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle n\log _{2}(n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>n</mi> <msub> <mi>log</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msub> <mo>⁡<!-- --></mo> <mo stretchy="false">(</mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle n\log _{2}(n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/140bf00e16523f104a7893aa19c269daf1c36a59" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:9.012ex; height:2.843ex;" alt="{\textstyle n\log _{2}(n)}"></span> complex additions, in total about 30,000 operations — a thousand times less than with direct evaluation. In practice, actual performance on modern computers is usually dominated by factors other than the speed of arithmetic operations and the analysis is a complicated subject (for example, see Frigo & <a href="/wiki/Steven_G._Johnson" title="Steven G. Johnson">Johnson</a>, 2005),<sup id="cite_ref-Frigo_Johnson_2005_17-0" class="reference"><a href="#cite_note-Frigo_Johnson_2005-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup> but the overall improvement from <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle O(n^{2})}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <msup> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msup> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle O(n^{2})}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/5982eaab0c0dfc3f9f0bd9380db63a9e0f6da999" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:6.032ex; height:3.009ex;" alt="{\textstyle O(n^{2})}"></span> to <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle O(n\log n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>n</mi> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle O(n\log n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/e300e6b542c2c33ac12df0f02c5047db8ee8e1ca" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:10.118ex; height:2.843ex;" alt="{\textstyle O(n\log n)}"></span> remains. </p> <div class="mw-heading mw-heading2"><h2 id="Algorithms">Algorithms</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Fast_Fourier_transform&action=edit&section=3" title="Edit section: Algorithms"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-heading mw-heading3"><h3 id="Cooley–Tukey_algorithm"><span id="Cooley.E2.80.93Tukey_algorithm"></span>Cooley–Tukey algorithm</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Fast_Fourier_transform&action=edit&section=4" title="Edit section: Cooley–Tukey algorithm"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">Main article: <a href="/wiki/Cooley%E2%80%93Tukey_FFT_algorithm" title="Cooley–Tukey FFT algorithm">Cooley–Tukey FFT algorithm</a></div> <p>By far the most commonly used FFT is the Cooley–Tukey algorithm. This is a <a href="/wiki/Divide-and-conquer_algorithm" title="Divide-and-conquer algorithm">divide-and-conquer algorithm</a> that <a href="/wiki/Recursively" class="mw-redirect" title="Recursively">recursively</a> breaks down a DFT of any <a href="/wiki/Composite_number" title="Composite number">composite</a> size <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle n=n_{1}n_{2}}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>n</mi> <mo>=</mo> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>1</mn> </mrow> </msub> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msub> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle n=n_{1}n_{2}}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/6983407927845438c2a8bcb157ba345a2287427a" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:9.391ex; height:2.009ex;" alt="{\textstyle n=n_{1}n_{2}}"></span> into <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle n_{1}}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>1</mn> </mrow> </msub> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle n_{1}}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/a2d017b228f8cb0c4899e34138c7913e6076f5e6" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:2.449ex; height:2.009ex;" alt="{\textstyle n_{1}}"></span> smaller DFTs of size <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle n_{2}}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msub> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle n_{2}}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/dec73268149a91d52ce4a69998441d7a7cd7194c" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:2.449ex; height:2.009ex;" alt="{\textstyle n_{2}}"></span>, along with <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle O(n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/34109fe397fdcff370079185bfdb65826cb5565a" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:4.977ex; height:2.843ex;" alt="{\displaystyle O(n)}"></span> multiplications by complex <a href="/wiki/Roots_of_unity" class="mw-redirect" title="Roots of unity">roots of unity</a> traditionally called <a href="/wiki/Twiddle_factor" title="Twiddle factor">twiddle factors</a> (after Gentleman and Sande, 1966).<sup id="cite_ref-Gentleman_Sande_1966_18-0" class="reference"><a href="#cite_note-Gentleman_Sande_1966-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup> </p><p>This method (and the general idea of an FFT) was popularized by a publication of Cooley and Tukey in 1965,<sup id="cite_ref-Cooley_Tukey_1965_12-1" class="reference"><a href="#cite_note-Cooley_Tukey_1965-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> but it was later discovered<sup id="cite_ref-Heideman_Johnson_Burrus_1984_1-2" class="reference"><a href="#cite_note-Heideman_Johnson_Burrus_1984-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> that those two authors had together independently re-invented an algorithm known to <a href="/wiki/Carl_Friedrich_Gauss" title="Carl Friedrich Gauss">Carl Friedrich Gauss</a> around 1805<sup id="cite_ref-Gauss_1805_19-0" class="reference"><a href="#cite_note-Gauss_1805-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup> (and subsequently rediscovered several times in limited forms). </p><p>The best known use of the Cooley–Tukey algorithm is to divide the transform into two pieces of size <span class="texhtml">n/2</span> at each step, and is therefore limited to power-of-two sizes, but any factorization can be used in general (as was known to both Gauss and Cooley/Tukey<sup id="cite_ref-Heideman_Johnson_Burrus_1984_1-3" class="reference"><a href="#cite_note-Heideman_Johnson_Burrus_1984-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>). These are called the <i>radix-2</i> and <i>mixed-radix</i> cases, respectively (and other variants such as the <a href="/wiki/Split-radix_FFT" class="mw-redirect" title="Split-radix FFT">split-radix FFT</a> have their own names as well). Although the basic idea is recursive, most traditional implementations rearrange the algorithm to avoid explicit recursion. Also, because the Cooley–Tukey algorithm breaks the DFT into smaller DFTs, it can be combined arbitrarily with any other algorithm for the DFT, such as those described below. </p> <div class="mw-heading mw-heading3"><h3 id="Other_FFT_algorithms">Other FFT algorithms</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Fast_Fourier_transform&action=edit&section=5" title="Edit section: Other FFT algorithms"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236090951"><div role="note" class="hatnote navigation-not-searchable">Main articles: <a href="/wiki/Prime-factor_FFT_algorithm" title="Prime-factor FFT algorithm">Prime-factor FFT algorithm</a>, <a href="/wiki/Bruun%27s_FFT_algorithm" title="Bruun's FFT algorithm">Bruun's FFT algorithm</a>, <a href="/wiki/Rader%27s_FFT_algorithm" title="Rader's FFT algorithm">Rader's FFT algorithm</a>, <a href="/wiki/Chirp_Z-transform" title="Chirp Z-transform">Chirp Z-transform</a>, and <a href="/wiki/Hexagonal_fast_Fourier_transform" title="Hexagonal fast Fourier transform">hexagonal fast Fourier transform</a></div> <p>There are FFT algorithms other than Cooley–Tukey. </p><p>For <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle n=n_{1}n_{2}}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>n</mi> <mo>=</mo> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>1</mn> </mrow> </msub> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msub> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle n=n_{1}n_{2}}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/6983407927845438c2a8bcb157ba345a2287427a" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:9.391ex; height:2.009ex;" alt="{\textstyle n=n_{1}n_{2}}"></span> with <a href="/wiki/Coprime" class="mw-redirect" title="Coprime">coprime</a> <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle n_{1}}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>1</mn> </mrow> </msub> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle n_{1}}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/a2d017b228f8cb0c4899e34138c7913e6076f5e6" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:2.449ex; height:2.009ex;" alt="{\textstyle n_{1}}"></span> and <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle n_{2}}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msub> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle n_{2}}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/dec73268149a91d52ce4a69998441d7a7cd7194c" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:2.449ex; height:2.009ex;" alt="{\textstyle n_{2}}"></span>, one can use the <a href="/wiki/Prime-factor_FFT_algorithm" title="Prime-factor FFT algorithm">prime-factor</a> (Good–Thomas) algorithm (PFA), based on the <a href="/wiki/Chinese_remainder_theorem" title="Chinese remainder theorem">Chinese remainder theorem</a>, to factorize the DFT similarly to Cooley–Tukey but without the twiddle factors. The Rader–Brenner algorithm (1976)<sup id="cite_ref-Brenner_Rader_1976_20-0" class="reference"><a href="#cite_note-Brenner_Rader_1976-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup> is a Cooley–Tukey-like factorization but with purely imaginary twiddle factors, reducing multiplications at the cost of increased additions and reduced <a href="/wiki/Numerical_stability" title="Numerical stability">numerical stability</a>; it was later superseded by the <a href="/wiki/Split-radix" class="mw-redirect" title="Split-radix">split-radix</a> variant of Cooley–Tukey (which achieves the same multiplication count but with fewer additions and without sacrificing accuracy). Algorithms that recursively factorize the DFT into smaller operations other than DFTs include the Bruun and <a href="/w/index.php?title=Quick_Fourier_transform_algorithm&action=edit&redlink=1" class="new" title="Quick Fourier transform algorithm (page does not exist)">QFT</a> algorithms. (The Rader–Brenner<sup id="cite_ref-Brenner_Rader_1976_20-1" class="reference"><a href="#cite_note-Brenner_Rader_1976-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup> and QFT algorithms were proposed for power-of-two sizes, but it is possible that they could be adapted to general composite <span class="texhtml mvar" style="font-style:italic;">n</span>. Bruun's algorithm applies to arbitrary even composite sizes.) <a href="/wiki/Bruun%27s_FFT_algorithm" title="Bruun's FFT algorithm">Bruun's algorithm</a>, in particular, is based on interpreting the FFT as a recursive factorization of the <a href="/wiki/Polynomial" title="Polynomial">polynomial</a> <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z^{n}-1}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <msup> <mi>z</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>n</mi> </mrow> </msup> <mo>−<!-- − --></mo> <mn>1</mn> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle z^{n}-1}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/7bcd2905d214d29b80752bbaab30ccff8a9224bb" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.505ex; width:6.312ex; height:2.509ex;" alt="{\displaystyle z^{n}-1}"></span>, here into real-coefficient polynomials of the form <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z^{m}-1}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <msup> <mi>z</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>m</mi> </mrow> </msup> <mo>−<!-- − --></mo> <mn>1</mn> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle z^{m}-1}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/744e9cd9fef6fb31c1342c8f8689e8e07ba987ea" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.505ex; width:6.768ex; height:2.509ex;" alt="{\displaystyle z^{m}-1}"></span> and <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z^{2m}+az^{m}+1}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <msup> <mi>z</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> <mi>m</mi> </mrow> </msup> <mo>+</mo> <mi>a</mi> <msup> <mi>z</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>m</mi> </mrow> </msup> <mo>+</mo> <mn>1</mn> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle z^{2m}+az^{m}+1}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/f182ac7b3b3bf22408fdd9c01602ee7e95cfb62a" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.505ex; width:14.426ex; height:2.843ex;" alt="{\displaystyle z^{2m}+az^{m}+1}"></span>. </p><p>Another polynomial viewpoint is exploited by the Winograd FFT algorithm,<sup id="cite_ref-Winograd_1978_21-0" class="reference"><a href="#cite_note-Winograd_1978-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-Winograd_1979_22-0" class="reference"><a href="#cite_note-Winograd_1979-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup> which factorizes <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle z^{n}-1}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <msup> <mi>z</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>n</mi> </mrow> </msup> <mo>−<!-- − --></mo> <mn>1</mn> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle z^{n}-1}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/7bcd2905d214d29b80752bbaab30ccff8a9224bb" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.505ex; width:6.312ex; height:2.509ex;" alt="{\displaystyle z^{n}-1}"></span> into <a href="/wiki/Cyclotomic_polynomial" title="Cyclotomic polynomial">cyclotomic polynomials</a>—these often have coefficients of 1, 0, or −1, and therefore require few (if any) multiplications, so Winograd can be used to obtain minimal-multiplication FFTs and is often used to find efficient algorithms for small factors. Indeed, Winograd showed that the DFT can be computed with only <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle O(n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/34109fe397fdcff370079185bfdb65826cb5565a" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:4.977ex; height:2.843ex;" alt="{\displaystyle O(n)}"></span> irrational multiplications, leading to a proven achievable lower bound on the number of multiplications for power-of-two sizes; this comes at the cost of many more additions, a tradeoff no longer favorable on modern <a href="/wiki/Central_processing_unit" title="Central processing unit">processors</a> with <a href="/wiki/Floating-point_unit" title="Floating-point unit">hardware multipliers</a>. In particular, Winograd also makes use of the PFA as well as an algorithm by Rader for FFTs of <i>prime</i> sizes. </p><p><a href="/wiki/Rader%27s_FFT_algorithm" title="Rader's FFT algorithm">Rader's algorithm</a>, exploiting the existence of a <a href="/wiki/Generating_set_of_a_group" title="Generating set of a group">generator</a> for the multiplicative <a href="/wiki/Group_(mathematics)" title="Group (mathematics)">group</a> modulo prime <span class="texhtml mvar" style="font-style:italic;">n</span>, expresses a DFT of prime size <span class="texhtml mvar" style="font-style:italic;">n</span> as a cyclic <a href="/wiki/Convolution" title="Convolution">convolution</a> of (composite) size <span class="texhtml"><i>n</i> – 1</span>, which can then be computed by a pair of ordinary FFTs via the <a href="/wiki/Convolution_theorem" title="Convolution theorem">convolution theorem</a> (although Winograd uses other convolution methods). Another prime-size FFT is due to L. I. Bluestein, and is sometimes called the <a href="/wiki/Chirp-z_algorithm" class="mw-redirect" title="Chirp-z algorithm">chirp-z algorithm</a>; it also re-expresses a DFT as a convolution, but this time of the <i>same</i> size (which can be zero-padded to a <a href="/wiki/Power_of_two" title="Power of two">power of two</a> and evaluated by radix-2 Cooley–Tukey FFTs, for example), via the identity </p> <dl><dd><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle nk=-{\frac {(k-n)^{2}}{2}}+{\frac {n^{2}}{2}}+{\frac {k^{2}}{2}}.}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>n</mi> <mi>k</mi> <mo>=</mo> <mo>−<!-- − --></mo> <mrow class="MJX-TeXAtom-ORD"> <mfrac> <mrow> <mo stretchy="false">(</mo> <mi>k</mi> <mo>−<!-- − --></mo> <mi>n</mi> <msup> <mo stretchy="false">)</mo> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msup> </mrow> <mn>2</mn> </mfrac> </mrow> <mo>+</mo> <mrow class="MJX-TeXAtom-ORD"> <mfrac> <msup> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msup> <mn>2</mn> </mfrac> </mrow> <mo>+</mo> <mrow class="MJX-TeXAtom-ORD"> <mfrac> <msup> <mi>k</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msup> <mn>2</mn> </mfrac> </mrow> <mo>.</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle nk=-{\frac {(k-n)^{2}}{2}}+{\frac {n^{2}}{2}}+{\frac {k^{2}}{2}}.}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/c83c1e810e60c69381849b80ec2e44b65da291b7" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.838ex; width:29.373ex; height:5.843ex;" alt="{\displaystyle nk=-{\frac {(k-n)^{2}}{2}}+{\frac {n^{2}}{2}}+{\frac {k^{2}}{2}}.}"></span></dd></dl> <p><a href="/wiki/Hexagonal_fast_Fourier_transform" title="Hexagonal fast Fourier transform">Hexagonal fast Fourier transform</a> (HFFT) aims at computing an efficient FFT for the hexagonally-sampled data by using a new addressing scheme for hexagonal grids, called Array Set Addressing (ASA). </p> <div class="mw-heading mw-heading2"><h2 id="FFT_algorithms_specialized_for_real_or_symmetric_data">FFT algorithms specialized for real or symmetric data</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Fast_Fourier_transform&action=edit&section=6" title="Edit section: FFT algorithms specialized for real or symmetric data"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>In many applications, the input data for the DFT are purely real, in which case the outputs satisfy the symmetry </p> <dl><dd><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle X_{n-k}=X_{k}^{*}}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <msub> <mi>X</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>n</mi> <mo>−<!-- − --></mo> <mi>k</mi> </mrow> </msub> <mo>=</mo> <msubsup> <mi>X</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>k</mi> </mrow> <mrow class="MJX-TeXAtom-ORD"> <mo>∗<!-- ∗ --></mo> </mrow> </msubsup> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle X_{n-k}=X_{k}^{*}}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/e355d18394a28dde2c0acf45f867e2f88036bc47" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:11.427ex; height:2.843ex;" alt="{\displaystyle X_{n-k}=X_{k}^{*}}"></span></dd></dl> <p>and efficient FFT algorithms have been designed for this situation (see e.g. Sorensen, 1987).<sup id="cite_ref-Sorensen_Jones_Heideman_Burrus_1987_1_23-0" class="reference"><a href="#cite_note-Sorensen_Jones_Heideman_Burrus_1987_1-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-Sorensen_Jones_Heideman_Burrus_1987_2_24-0" class="reference"><a href="#cite_note-Sorensen_Jones_Heideman_Burrus_1987_2-24"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup> One approach consists of taking an ordinary algorithm (e.g. Cooley–Tukey) and removing the redundant parts of the computation, saving roughly a factor of two in time and memory. Alternatively, it is possible to express an <i>even</i>-length real-input DFT as a complex DFT of half the length (whose real and imaginary parts are the even/odd elements of the original real data), followed by <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle O(n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/34109fe397fdcff370079185bfdb65826cb5565a" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:4.977ex; height:2.843ex;" alt="{\displaystyle O(n)}"></span> post-processing operations. </p><p>It was once believed that real-input DFTs could be more efficiently computed by means of the <a href="/wiki/Discrete_Hartley_transform" title="Discrete Hartley transform">discrete Hartley transform</a> (DHT), but it was subsequently argued that a specialized real-input DFT algorithm (FFT) can typically be found that requires fewer operations than the corresponding DHT algorithm (FHT) for the same number of inputs.<sup id="cite_ref-Sorensen_Jones_Heideman_Burrus_1987_1_23-1" class="reference"><a href="#cite_note-Sorensen_Jones_Heideman_Burrus_1987_1-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup> Bruun's algorithm (above) is another method that was initially proposed to take advantage of real inputs, but it has not proved popular. </p><p>There are further FFT specializations for the cases of real data that have <a href="/wiki/Even_and_odd_functions" title="Even and odd functions">even/odd</a> symmetry, in which case one can gain another factor of roughly two in time and memory and the DFT becomes the <a href="/wiki/Discrete_cosine_transform" title="Discrete cosine transform">discrete cosine</a>/<a href="/wiki/Discrete_sine_transform" title="Discrete sine transform">sine transform(s)</a> (<a href="/wiki/Discrete_cosine_transform" title="Discrete cosine transform">DCT</a>/<a href="/wiki/Discrete_sine_transform" title="Discrete sine transform">DST</a>). Instead of directly modifying an FFT algorithm for these cases, DCTs/DSTs can also be computed via FFTs of real data combined with <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle O(n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/34109fe397fdcff370079185bfdb65826cb5565a" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:4.977ex; height:2.843ex;" alt="{\displaystyle O(n)}"></span> pre- and post-processing. </p> <div class="mw-heading mw-heading2"><h2 id="Computational_issues">Computational issues</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Fast_Fourier_transform&action=edit&section=7" title="Edit section: Computational issues"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-heading mw-heading3"><h3 id="Bounds_on_complexity_and_operation_counts">Bounds on complexity and operation counts</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Fast_Fourier_transform&action=edit&section=8" title="Edit section: Bounds on complexity and operation counts"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1233989161">.mw-parser-output .unsolved{margin:0.5em 0 1em 1em;border:#ccc solid;padding:0.35em 0.35em 0.35em 2.2em;background-color:var(--background-color-interactive-subtle);background-image:url("https://upload.wikimedia.org/wikipedia/commons/2/26/Question%2C_Web_Fundamentals.svg");background-position:top 50%left 0.35em;background-size:1.5em;background-repeat:no-repeat}@media(min-width:720px){.mw-parser-output .unsolved{clear:right;float:right;max-width:25%}}.mw-parser-output .unsolved-label{font-weight:bold}.mw-parser-output .unsolved-body{margin:0.35em;font-style:italic}.mw-parser-output .unsolved-more{font-size:smaller}</style> <div role="note" aria-labelledby="unsolved-label-computer_science" class="unsolved"> <div><span class="unsolved-label" id="unsolved-label-computer_science">Unsolved problem in computer science</span>:</div> <div class="unsolved-body">What is the lower bound on the complexity of fast Fourier transform algorithms? Can they be faster than <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(N\log N)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>N</mi> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>N</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle O(N\log N)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/162285d42c319d5803cff2e5416a1f86d6baf394" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:11.456ex; height:2.843ex;" alt="{\displaystyle O(N\log N)}"></span>?</div> <div class="unsolved-more"><a href="/wiki/List_of_unsolved_problems_in_computer_science" title="List of unsolved problems in computer science">(more unsolved problems in computer science)</a></div> </div> <p>A fundamental question of longstanding theoretical interest is to prove lower bounds on the <a href="/wiki/Computational_complexity_theory" title="Computational complexity theory">complexity</a> and exact operation counts of fast Fourier transforms, and many open problems remain. It is not rigorously proved whether DFTs truly require <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle \Omega (n\log n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi mathvariant="normal">Ω<!-- Ω --></mi> <mo stretchy="false">(</mo> <mi>n</mi> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle \Omega (n\log n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/994f0b4bf595bd629b6640288be0b5a4da05545a" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:10.023ex; height:2.843ex;" alt="{\textstyle \Omega (n\log n)}"></span> (i.e., order <i><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle n\log n}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>n</mi> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle n\log n}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/560dfdce0353a330e03e4b3e0b7ca6e484bb40fb" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:6.535ex; height:2.509ex;" alt="{\displaystyle n\log n}"></span></i> or greater) operations, even for the simple case of <a href="/wiki/Power_of_two" title="Power of two">power of two</a> sizes, although no algorithms with lower complexity are known. In particular, the count of arithmetic operations is usually the focus of such questions, although actual performance on modern-day computers is determined by many other factors such as <a href="/wiki/Cache_(computing)" title="Cache (computing)">cache</a> or <a href="/wiki/CPU_pipeline" class="mw-redirect" title="CPU pipeline">CPU pipeline</a> optimization. </p><p>Following work by <a href="/wiki/Shmuel_Winograd" title="Shmuel Winograd">Shmuel Winograd</a> (1978),<sup id="cite_ref-Winograd_1978_21-1" class="reference"><a href="#cite_note-Winograd_1978-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup> a tight <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \Theta (n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi mathvariant="normal">Θ<!-- Θ --></mi> <mo stretchy="false">(</mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle \Theta (n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/a6351206e27071559aa4472579095994f650d76b" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:5.012ex; height:2.843ex;" alt="{\displaystyle \Theta (n)}"></span> lower bound is known for the number of real multiplications required by an FFT. It can be shown that only <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle 4n-2\log _{2}^{2}(n)-2\log _{2}(n)-4}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mn>4</mn> <mi>n</mi> <mo>−<!-- − --></mo> <mn>2</mn> <msubsup> <mi>log</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msubsup> <mo>⁡<!-- --></mo> <mo stretchy="false">(</mo> <mi>n</mi> <mo stretchy="false">)</mo> <mo>−<!-- − --></mo> <mn>2</mn> <msub> <mi>log</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msub> <mo>⁡<!-- --></mo> <mo stretchy="false">(</mo> <mi>n</mi> <mo stretchy="false">)</mo> <mo>−<!-- − --></mo> <mn>4</mn> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle 4n-2\log _{2}^{2}(n)-2\log _{2}(n)-4}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/1607ca15b65ebe9e620cce5905e57668b7e8764c" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:29.8ex; height:3.176ex;" alt="{\textstyle 4n-2\log _{2}^{2}(n)-2\log _{2}(n)-4}"></span> irrational real multiplications are required to compute a DFT of power-of-two length <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle n=2^{m}}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>n</mi> <mo>=</mo> <msup> <mn>2</mn> <mrow class="MJX-TeXAtom-ORD"> <mi>m</mi> </mrow> </msup> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle n=2^{m}}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/ab14407b66fdd78b64c1eeec8dff77a7df81b101" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.338ex; width:7.331ex; height:2.343ex;" alt="{\displaystyle n=2^{m}}"></span>. Moreover, explicit algorithms that achieve this count are known (Heideman & <a href="/wiki/Charles_Sidney_Burrus" class="mw-redirect" title="Charles Sidney Burrus">Burrus</a>, 1986;<sup id="cite_ref-Heideman_Burrus_1986_25-0" class="reference"><a href="#cite_note-Heideman_Burrus_1986-25"><span class="cite-bracket">[</span>25<span class="cite-bracket">]</span></a></sup> Duhamel, 1990<sup id="cite_ref-Duhamel_1990_26-0" class="reference"><a href="#cite_note-Duhamel_1990-26"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup>). However, these algorithms require too many additions to be practical, at least on modern computers with hardware multipliers (Duhamel, 1990;<sup id="cite_ref-Duhamel_1990_26-1" class="reference"><a href="#cite_note-Duhamel_1990-26"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup> Frigo & <a href="/wiki/Steven_G._Johnson" title="Steven G. Johnson">Johnson</a>, 2005).<sup id="cite_ref-Frigo_Johnson_2005_17-1" class="reference"><a href="#cite_note-Frigo_Johnson_2005-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup> </p><p>A tight lower bound is not known on the number of required additions, although lower bounds have been proved under some restrictive assumptions on the algorithms. In 1973, Morgenstern<sup id="cite_ref-Morgenstern_1973_27-0" class="reference"><a href="#cite_note-Morgenstern_1973-27"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup> proved an <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \Omega (n\log n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi mathvariant="normal">Ω<!-- Ω --></mi> <mo stretchy="false">(</mo> <mi>n</mi> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle \Omega (n\log n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/00663e988b37b064dbfe30791c3ad477907cc3a4" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:10.023ex; height:2.843ex;" alt="{\displaystyle \Omega (n\log n)}"></span> lower bound on the addition count for algorithms where the multiplicative constants have bounded magnitudes (which is true for most but not all FFT algorithms). <a href="/wiki/Victor_Pan" title="Victor Pan">Pan</a> (1986)<sup id="cite_ref-Pan_1986_28-0" class="reference"><a href="#cite_note-Pan_1986-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup> proved an <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle \Omega (n\log n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi mathvariant="normal">Ω<!-- Ω --></mi> <mo stretchy="false">(</mo> <mi>n</mi> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle \Omega (n\log n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/00663e988b37b064dbfe30791c3ad477907cc3a4" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:10.023ex; height:2.843ex;" alt="{\displaystyle \Omega (n\log n)}"></span> lower bound assuming a bound on a measure of the FFT algorithm's "asynchronicity", but the generality of this assumption is unclear. For the case of power-of-two <span class="texhtml mvar" style="font-style:italic;">n</span>, <a href="/wiki/Christos_Papadimitriou" title="Christos Papadimitriou">Papadimitriou</a> (1979)<sup id="cite_ref-Papadimitriou_1979_29-0" class="reference"><a href="#cite_note-Papadimitriou_1979-29"><span class="cite-bracket">[</span>29<span class="cite-bracket">]</span></a></sup> argued that the number <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle n\log _{2}n}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>n</mi> <msub> <mi>log</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msub> <mo>⁡<!-- --></mo> <mi>n</mi> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle n\log _{2}n}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/e4401b51c9f5605b3390f41acf92e4ac211bf16a" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:7.59ex; height:2.676ex;" alt="{\textstyle n\log _{2}n}"></span> of complex-number additions achieved by Cooley–Tukey algorithms is <i>optimal</i> under certain assumptions on the <a href="/wiki/Graph_(discrete_mathematics)" title="Graph (discrete mathematics)">graph</a> of the algorithm (his assumptions imply, among other things, that no additive identities in the roots of unity are exploited). (This argument would imply that at least <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle 2N\log _{2}N}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mn>2</mn> <mi>N</mi> <msub> <mi>log</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msub> <mo>⁡<!-- --></mo> <mi>N</mi> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle 2N\log _{2}N}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/ffea394945bff050d39134d412b6ab913bf5e89c" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:10.09ex; height:2.676ex;" alt="{\textstyle 2N\log _{2}N}"></span> real additions are required, although this is not a tight bound because extra additions are required as part of complex-number multiplications.) Thus far, no published FFT algorithm has achieved fewer than <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle n\log _{2}n}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>n</mi> <msub> <mi>log</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msub> <mo>⁡<!-- --></mo> <mi>n</mi> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle n\log _{2}n}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/e4401b51c9f5605b3390f41acf92e4ac211bf16a" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:7.59ex; height:2.676ex;" alt="{\textstyle n\log _{2}n}"></span> complex-number additions (or their equivalent) for power-of-two <span class="texhtml mvar" style="font-style:italic;">n</span>. </p><p>A third problem is to minimize the <i>total</i> number of real multiplications and additions, sometimes called the "arithmetic complexity" (although in this context it is the exact count and not the asymptotic complexity that is being considered). Again, no tight lower bound has been proven. Since 1968, however, the lowest published count for power-of-two <span class="texhtml mvar" style="font-style:italic;">n</span> was long achieved by the <a href="/wiki/Split-radix_FFT_algorithm" title="Split-radix FFT algorithm">split-radix FFT algorithm</a>, which requires <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle 4n\log _{2}(n)-6n+8}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mn>4</mn> <mi>n</mi> <msub> <mi>log</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msub> <mo>⁡<!-- --></mo> <mo stretchy="false">(</mo> <mi>n</mi> <mo stretchy="false">)</mo> <mo>−<!-- − --></mo> <mn>6</mn> <mi>n</mi> <mo>+</mo> <mn>8</mn> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle 4n\log _{2}(n)-6n+8}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/bb65b01a9b7ef639f7b2c1fb01a572090a5952cc" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:19.575ex; height:2.843ex;" alt="{\textstyle 4n\log _{2}(n)-6n+8}"></span> real multiplications and additions for <span class="texhtml"><i>n</i> > 1</span>. This was recently reduced to <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle \sim {\frac {34}{9}}n\log _{2}n}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mo>∼<!-- ∼ --></mo> <mrow class="MJX-TeXAtom-ORD"> <mfrac> <mn>34</mn> <mn>9</mn> </mfrac> </mrow> <mi>n</mi> <msub> <mi>log</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msub> <mo>⁡<!-- --></mo> <mi>n</mi> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle \sim {\frac {34}{9}}n\log _{2}n}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/2f277f20abc5f73aff89cd1c4cf49b9c52b282fa" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.338ex; width:12.523ex; height:3.843ex;" alt="{\textstyle \sim {\frac {34}{9}}n\log _{2}n}"></span> (Johnson and Frigo, 2007;<sup id="cite_ref-Frigo_Johnson_2007_16-1" class="reference"><a href="#cite_note-Frigo_Johnson_2007-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup> Lundy and Van Buskirk, 2007<sup id="cite_ref-Lundy_Buskirk_2007_30-0" class="reference"><a href="#cite_note-Lundy_Buskirk_2007-30"><span class="cite-bracket">[</span>30<span class="cite-bracket">]</span></a></sup>). A slightly larger count (but still better than split radix for <span class="texhtml"><i>n</i> ≥ 256</span>) was shown to be provably optimal for <span class="texhtml"><i>n</i> ≤ 512</span> under additional restrictions on the possible algorithms (split-radix-like flowgraphs with unit-modulus multiplicative factors), by reduction to a <a href="/wiki/Satisfiability_modulo_theories" title="Satisfiability modulo theories">satisfiability modulo theories</a> problem solvable by <a href="/wiki/Proof_by_exhaustion" title="Proof by exhaustion">brute force</a> (Haynal & Haynal, 2011).<sup id="cite_ref-Haynal_2011_31-0" class="reference"><a href="#cite_note-Haynal_2011-31"><span class="cite-bracket">[</span>31<span class="cite-bracket">]</span></a></sup> </p><p>Most of the attempts to lower or prove the complexity of FFT algorithms have focused on the ordinary complex-data case, because it is the simplest. However, complex-data FFTs are so closely related to algorithms for related problems such as real-data FFTs, <a href="/wiki/Discrete_cosine_transform" title="Discrete cosine transform">discrete cosine transforms</a>, <a href="/wiki/Discrete_Hartley_transform" title="Discrete Hartley transform">discrete Hartley transforms</a>, and so on, that any improvement in one of these would immediately lead to improvements in the others (Duhamel & Vetterli, 1990).<sup id="cite_ref-Duhamel_Vetterli_1990_32-0" class="reference"><a href="#cite_note-Duhamel_Vetterli_1990-32"><span class="cite-bracket">[</span>32<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Approximations">Approximations</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Fast_Fourier_transform&action=edit&section=9" title="Edit section: Approximations"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>All of the FFT algorithms discussed above compute the DFT exactly (i.e. neglecting <a href="/wiki/Floating-point" class="mw-redirect" title="Floating-point">floating-point</a> errors). A few "FFT" algorithms have been proposed, however, that compute the DFT <i>approximately</i>, with an error that can be made arbitrarily small at the expense of increased computations. Such algorithms trade the approximation error for increased speed or other properties. For example, an approximate FFT algorithm by Edelman et al. (1999)<sup id="cite_ref-Edelman_McCorquodale_Toledo_1999_33-0" class="reference"><a href="#cite_note-Edelman_McCorquodale_Toledo_1999-33"><span class="cite-bracket">[</span>33<span class="cite-bracket">]</span></a></sup> achieves lower communication requirements for <a href="/wiki/Parallel_computing" title="Parallel computing">parallel computing</a> with the help of a <a href="/wiki/Fast_multipole_method" title="Fast multipole method">fast multipole method</a>. A <a href="/wiki/Wavelet" title="Wavelet">wavelet</a>-based approximate FFT by Guo and Burrus (1996)<sup id="cite_ref-Guo_Burrus_1996_34-0" class="reference"><a href="#cite_note-Guo_Burrus_1996-34"><span class="cite-bracket">[</span>34<span class="cite-bracket">]</span></a></sup> takes sparse inputs/outputs (time/frequency localization) into account more efficiently than is possible with an exact FFT. Another algorithm for approximate computation of a subset of the DFT outputs is due to Shentov et al. (1995).<sup id="cite_ref-Shentov_Mitra_Heute_Hossen_1995_35-0" class="reference"><a href="#cite_note-Shentov_Mitra_Heute_Hossen_1995-35"><span class="cite-bracket">[</span>35<span class="cite-bracket">]</span></a></sup> The Edelman algorithm works equally well for sparse and non-sparse data, since it is based on the compressibility (rank deficiency) of the Fourier matrix itself rather than the compressibility (sparsity) of the data. Conversely, if the data are sparse—that is, if only <span class="texhtml mvar" style="font-style:italic;">k</span> out of <span class="texhtml mvar" style="font-style:italic;">n</span> Fourier coefficients are nonzero—then the complexity can be reduced to <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(k\log n\log n/k)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>k</mi> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mo>/</mo> </mrow> <mi>k</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle O(k\log n\log n/k)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/d6d159474a38858e6d52eb37308a51b005b95f26" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:17.449ex; height:2.843ex;" alt="{\displaystyle O(k\log n\log n/k)}"></span>, and this has been demonstrated to lead to practical speedups compared to an ordinary FFT for <span class="texhtml"><i>n</i>/<i>k</i> > 32</span> in a large-<span class="texhtml mvar" style="font-style:italic;">n</span> example (<span class="texhtml"><i>n</i> = 2<sup>22</sup></span>) using a probabilistic approximate algorithm (which estimates the largest <span class="texhtml mvar" style="font-style:italic;">k</span> coefficients to several decimal places).<sup id="cite_ref-Hassanieh_2012_36-0" class="reference"><a href="#cite_note-Hassanieh_2012-36"><span class="cite-bracket">[</span>36<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Accuracy">Accuracy</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Fast_Fourier_transform&action=edit&section=10" title="Edit section: Accuracy"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>FFT algorithms have errors when finite-precision floating-point arithmetic is used, but these errors are typically quite small; most FFT algorithms, e.g. Cooley–Tukey, have excellent numerical properties as a consequence of the <a href="/wiki/Pairwise_summation" title="Pairwise summation">pairwise summation</a> structure of the algorithms. The upper bound on the <a href="/wiki/Relative_error" class="mw-redirect" title="Relative error">relative error</a> for the Cooley–Tukey algorithm is <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle O(\varepsilon \log n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>ε<!-- ε --></mi> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle O(\varepsilon \log n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/8c7aa228794d85e96b0ff29a45ff407b41fa387f" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:9.807ex; height:2.843ex;" alt="{\textstyle O(\varepsilon \log n)}"></span>, compared to <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle O(\varepsilon n^{3/2})}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>ε<!-- ε --></mi> <msup> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>3</mn> <mrow class="MJX-TeXAtom-ORD"> <mo>/</mo> </mrow> <mn>2</mn> </mrow> </msup> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle O(\varepsilon n^{3/2})}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/7ce4cb13924f123ee5412028442647d09d773046" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:8.759ex; height:3.176ex;" alt="{\textstyle O(\varepsilon n^{3/2})}"></span> for the naïve DFT formula,<sup id="cite_ref-Gentleman_Sande_1966_18-1" class="reference"><a href="#cite_note-Gentleman_Sande_1966-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup> where <span class="texhtml">𝜀</span> is the machine floating-point relative precision. In fact, the <a href="/wiki/Root_mean_square" title="Root mean square">root mean square</a> (rms) errors are much better than these upper bounds, being only <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle O(\varepsilon {\sqrt {\log n}})}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>ε<!-- ε --></mi> <mrow class="MJX-TeXAtom-ORD"> <msqrt> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> </msqrt> </mrow> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle O(\varepsilon {\sqrt {\log n}})}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/918eefc6201191a6153469b33d404790f563d7a1" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:11.743ex; height:3.343ex;" alt="{\textstyle O(\varepsilon {\sqrt {\log n}})}"></span> for Cooley–Tukey and <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle O(\varepsilon {\sqrt {n}})}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>ε<!-- ε --></mi> <mrow class="MJX-TeXAtom-ORD"> <msqrt> <mi>n</mi> </msqrt> </mrow> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle O(\varepsilon {\sqrt {n}})}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/ed311715b245cf69f06079779e40530ef6348d4f" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:7.997ex; height:2.843ex;" alt="{\textstyle O(\varepsilon {\sqrt {n}})}"></span> for the naïve DFT (Schatzman, 1996).<sup id="cite_ref-Schatzman_1996_37-0" class="reference"><a href="#cite_note-Schatzman_1996-37"><span class="cite-bracket">[</span>37<span class="cite-bracket">]</span></a></sup> These results, however, are very sensitive to the accuracy of the twiddle factors used in the FFT (i.e. the <a href="/wiki/Trigonometric_function" class="mw-redirect" title="Trigonometric function">trigonometric function</a> values), and it is not unusual for incautious FFT implementations to have much worse accuracy, e.g. if they use inaccurate <a href="/wiki/Generating_trigonometric_tables" class="mw-redirect" title="Generating trigonometric tables">trigonometric recurrence</a> formulas. Some FFTs other than Cooley–Tukey, such as the Rader–Brenner algorithm, are intrinsically less stable. </p><p>In <a href="/wiki/Fixed-point_arithmetic" title="Fixed-point arithmetic">fixed-point arithmetic</a>, the finite-precision errors accumulated by FFT algorithms are worse, with rms errors growing as <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle O({\sqrt {n}})}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mrow class="MJX-TeXAtom-ORD"> <msqrt> <mi>n</mi> </msqrt> </mrow> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle O({\sqrt {n}})}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/c7bf2b5b0ac2343e6495c4287d07e224d29b5a16" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:6.913ex; height:2.843ex;" alt="{\textstyle O({\sqrt {n}})}"></span> for the Cooley–Tukey algorithm (Welch, 1969).<sup id="cite_ref-Welch_1969_38-0" class="reference"><a href="#cite_note-Welch_1969-38"><span class="cite-bracket">[</span>38<span class="cite-bracket">]</span></a></sup> Achieving this accuracy requires careful attention to scaling to minimize loss of precision, and fixed-point FFT algorithms involve rescaling at each intermediate stage of decompositions like Cooley–Tukey. </p><p>To verify the correctness of an FFT implementation, rigorous guarantees can be obtained in <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle O(n\log n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>n</mi> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle O(n\log n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/e300e6b542c2c33ac12df0f02c5047db8ee8e1ca" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:10.118ex; height:2.843ex;" alt="{\textstyle O(n\log n)}"></span> time by a simple procedure checking the linearity, impulse-response, and time-shift properties of the transform on random inputs (Ergün, 1995).<sup id="cite_ref-Ergün_1995_39-0" class="reference"><a href="#cite_note-Ergün_1995-39"><span class="cite-bracket">[</span>39<span class="cite-bracket">]</span></a></sup> </p><p>The values for intermediate frequencies may be obtained by various averaging methods. </p> <div class="mw-heading mw-heading2"><h2 id="Multidimensional_FFTs">Multidimensional FFTs</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Fast_Fourier_transform&action=edit&section=11" title="Edit section: Multidimensional FFTs"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>As defined in the <a href="/wiki/Discrete_Fourier_transform#Multidimensional_DFT" title="Discrete Fourier transform">multidimensional DFT</a> article, the multidimensional DFT </p> <dl><dd><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle X_{\mathbf {k} }=\sum _{\mathbf {n} =0}^{\mathbf {N} -1}e^{-2\pi i\mathbf {k} \cdot (\mathbf {n} /\mathbf {N} )}x_{\mathbf {n} }}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <msub> <mi>X</mi> <mrow class="MJX-TeXAtom-ORD"> <mrow class="MJX-TeXAtom-ORD"> <mi mathvariant="bold">k</mi> </mrow> </mrow> </msub> <mo>=</mo> <munderover> <mo>∑<!-- ∑ --></mo> <mrow class="MJX-TeXAtom-ORD"> <mrow class="MJX-TeXAtom-ORD"> <mi mathvariant="bold">n</mi> </mrow> <mo>=</mo> <mn>0</mn> </mrow> <mrow class="MJX-TeXAtom-ORD"> <mrow class="MJX-TeXAtom-ORD"> <mi mathvariant="bold">N</mi> </mrow> <mo>−<!-- − --></mo> <mn>1</mn> </mrow> </munderover> <msup> <mi>e</mi> <mrow class="MJX-TeXAtom-ORD"> <mo>−<!-- − --></mo> <mn>2</mn> <mi>π<!-- π --></mi> <mi>i</mi> <mrow class="MJX-TeXAtom-ORD"> <mi mathvariant="bold">k</mi> </mrow> <mo>⋅<!-- ⋅ --></mo> <mo stretchy="false">(</mo> <mrow class="MJX-TeXAtom-ORD"> <mi mathvariant="bold">n</mi> </mrow> <mrow class="MJX-TeXAtom-ORD"> <mo>/</mo> </mrow> <mrow class="MJX-TeXAtom-ORD"> <mi mathvariant="bold">N</mi> </mrow> <mo stretchy="false">)</mo> </mrow> </msup> <msub> <mi>x</mi> <mrow class="MJX-TeXAtom-ORD"> <mrow class="MJX-TeXAtom-ORD"> <mi mathvariant="bold">n</mi> </mrow> </mrow> </msub> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle X_{\mathbf {k} }=\sum _{\mathbf {n} =0}^{\mathbf {N} -1}e^{-2\pi i\mathbf {k} \cdot (\mathbf {n} /\mathbf {N} )}x_{\mathbf {n} }}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/daa39008ca86510b59d3e28ba7f6932c3bc1d0b8" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -3.005ex; width:23.843ex; height:7.343ex;" alt="{\displaystyle X_{\mathbf {k} }=\sum _{\mathbf {n} =0}^{\mathbf {N} -1}e^{-2\pi i\mathbf {k} \cdot (\mathbf {n} /\mathbf {N} )}x_{\mathbf {n} }}"></span></dd></dl> <p>transforms an array <span class="texhtml"><i>x</i><sub><b>n</b></sub></span> with a <span class="texhtml mvar" style="font-style:italic;">d</span>-dimensional <a href="/wiki/Coordinate_vector" title="Coordinate vector">vector</a> of indices <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle \mathbf {n} =\left(n_{1},\ldots ,n_{d}\right)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mrow class="MJX-TeXAtom-ORD"> <mi mathvariant="bold">n</mi> </mrow> <mo>=</mo> <mrow> <mo>(</mo> <mrow> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>1</mn> </mrow> </msub> <mo>,</mo> <mo>…<!-- … --></mo> <mo>,</mo> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>d</mi> </mrow> </msub> </mrow> <mo>)</mo> </mrow> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle \mathbf {n} =\left(n_{1},\ldots ,n_{d}\right)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/ca890aa139a4124c7c4d0df15babab834ed82cf3" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:16.507ex; height:2.843ex;" alt="{\textstyle \mathbf {n} =\left(n_{1},\ldots ,n_{d}\right)}"></span> by a set of <span class="texhtml mvar" style="font-style:italic;">d</span> nested summations (over <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle n_{j}=0\ldots N_{j}-1}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>j</mi> </mrow> </msub> <mo>=</mo> <mn>0</mn> <mo>…<!-- … --></mo> <msub> <mi>N</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>j</mi> </mrow> </msub> <mo>−<!-- − --></mo> <mn>1</mn> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle n_{j}=0\ldots N_{j}-1}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/e94d4f5441d633f971776866c393c29b3192bcdc" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.005ex; width:16.842ex; height:2.843ex;" alt="{\textstyle n_{j}=0\ldots N_{j}-1}"></span> for each <span class="texhtml mvar" style="font-style:italic;">j</span>), where the division <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle \mathbf {n} /\mathbf {N} =\left(n_{1}/N_{1},\ldots ,n_{d}/N_{d}\right)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mrow class="MJX-TeXAtom-ORD"> <mi mathvariant="bold">n</mi> </mrow> <mrow class="MJX-TeXAtom-ORD"> <mo>/</mo> </mrow> <mrow class="MJX-TeXAtom-ORD"> <mi mathvariant="bold">N</mi> </mrow> <mo>=</mo> <mrow> <mo>(</mo> <mrow> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>1</mn> </mrow> </msub> <mrow class="MJX-TeXAtom-ORD"> <mo>/</mo> </mrow> <msub> <mi>N</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>1</mn> </mrow> </msub> <mo>,</mo> <mo>…<!-- … --></mo> <mo>,</mo> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>d</mi> </mrow> </msub> <mrow class="MJX-TeXAtom-ORD"> <mo>/</mo> </mrow> <msub> <mi>N</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>d</mi> </mrow> </msub> </mrow> <mo>)</mo> </mrow> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle \mathbf {n} /\mathbf {N} =\left(n_{1}/N_{1},\ldots ,n_{d}/N_{d}\right)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/11a64760a8b85c7f642c54cdc13a2c19d1a5a278" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:27.964ex; height:2.843ex;" alt="{\textstyle \mathbf {n} /\mathbf {N} =\left(n_{1}/N_{1},\ldots ,n_{d}/N_{d}\right)}"></span> is performed element-wise. Equivalently, it is the composition of a sequence of <i>d</i> sets of one-dimensional DFTs, performed along one dimension at a time (in any order). </p><p>This compositional viewpoint immediately provides the simplest and most common multidimensional DFT algorithm, known as the <b>row-column</b> algorithm (after the two-dimensional case, below). That is, one simply performs a sequence of <span class="texhtml mvar" style="font-style:italic;">d</span> one-dimensional FFTs (by any of the above algorithms): first you transform along the <span class="texhtml"><i>n</i><sub>1</sub></span> dimension, then along the <span class="texhtml"><i>n</i><sub>2</sub></span> dimension, and so on (actually, any ordering works). This method is easily shown to have the usual <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle O(n\log n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>n</mi> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle O(n\log n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/e300e6b542c2c33ac12df0f02c5047db8ee8e1ca" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:10.118ex; height:2.843ex;" alt="{\textstyle O(n\log n)}"></span> complexity, where <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle n=n_{1}\cdot n_{2}\cdots n_{d}}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>n</mi> <mo>=</mo> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>1</mn> </mrow> </msub> <mo>⋅<!-- ⋅ --></mo> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msub> <mo>⋯<!-- ⋯ --></mo> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>d</mi> </mrow> </msub> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle n=n_{1}\cdot n_{2}\cdots n_{d}}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/daaaea87e03b74facffef85c9e804f30e65e10bf" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:17.054ex; height:2.009ex;" alt="{\textstyle n=n_{1}\cdot n_{2}\cdots n_{d}}"></span> is the total number of data points transformed. In particular, there are <span class="texhtml"><i>n</i>/<i>n</i><sub>1</sub></span> transforms of size <span class="texhtml"><i>n</i><sub>1</sub></span>, etc., so the complexity of the sequence of FFTs is: </p> <dl><dd><span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle {\begin{aligned}&{\frac {n}{n_{1}}}O(n_{1}\log n_{1})+\cdots +{\frac {n}{n_{d}}}O(n_{d}\log n_{d})\\[6pt]={}&O\left(n\left[\log n_{1}+\cdots +\log n_{d}\right]\right)=O(n\log n).\end{aligned}}}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mrow class="MJX-TeXAtom-ORD"> <mtable columnalign="right left right left right left right left right left right left" rowspacing="0.9em 0.3em" columnspacing="0em 2em 0em 2em 0em 2em 0em 2em 0em 2em 0em" displaystyle="true"> <mtr> <mtd /> <mtd> <mrow class="MJX-TeXAtom-ORD"> <mfrac> <mi>n</mi> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>1</mn> </mrow> </msub> </mfrac> </mrow> <mi>O</mi> <mo stretchy="false">(</mo> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>1</mn> </mrow> </msub> <mi>log</mi> <mo>⁡<!-- --></mo> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>1</mn> </mrow> </msub> <mo stretchy="false">)</mo> <mo>+</mo> <mo>⋯<!-- ⋯ --></mo> <mo>+</mo> <mrow class="MJX-TeXAtom-ORD"> <mfrac> <mi>n</mi> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>d</mi> </mrow> </msub> </mfrac> </mrow> <mi>O</mi> <mo stretchy="false">(</mo> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>d</mi> </mrow> </msub> <mi>log</mi> <mo>⁡<!-- --></mo> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>d</mi> </mrow> </msub> <mo stretchy="false">)</mo> </mtd> </mtr> <mtr> <mtd> <mo>=</mo> <mrow class="MJX-TeXAtom-ORD"> </mrow> </mtd> <mtd> <mi>O</mi> <mrow> <mo>(</mo> <mrow> <mi>n</mi> <mrow> <mo>[</mo> <mrow> <mi>log</mi> <mo>⁡<!-- --></mo> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>1</mn> </mrow> </msub> <mo>+</mo> <mo>⋯<!-- ⋯ --></mo> <mo>+</mo> <mi>log</mi> <mo>⁡<!-- --></mo> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>d</mi> </mrow> </msub> </mrow> <mo>]</mo> </mrow> </mrow> <mo>)</mo> </mrow> <mo>=</mo> <mi>O</mi> <mo stretchy="false">(</mo> <mi>n</mi> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> <mo stretchy="false">)</mo> <mo>.</mo> </mtd> </mtr> </mtable> </mrow> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle {\begin{aligned}&{\frac {n}{n_{1}}}O(n_{1}\log n_{1})+\cdots +{\frac {n}{n_{d}}}O(n_{d}\log n_{d})\\[6pt]={}&O\left(n\left[\log n_{1}+\cdots +\log n_{d}\right]\right)=O(n\log n).\end{aligned}}}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/455de9bbde212f30b1bc869e1c208498bad76e46" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -4.171ex; width:44.171ex; height:9.509ex;" alt="{\displaystyle {\begin{aligned}&{\frac {n}{n_{1}}}O(n_{1}\log n_{1})+\cdots +{\frac {n}{n_{d}}}O(n_{d}\log n_{d})\\[6pt]={}&O\left(n\left[\log n_{1}+\cdots +\log n_{d}\right]\right)=O(n\log n).\end{aligned}}}"></span></dd></dl> <p>In two dimensions, the <i>x</i><sub><b>k</b></sub> can be viewed as an <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle n_{1}\times n_{2}}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>1</mn> </mrow> </msub> <mo>×<!-- × --></mo> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msub> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle n_{1}\times n_{2}}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/82858cf4e363d953f3cc4d584aa9fbc3ade86398" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:7.738ex; height:2.009ex;" alt="{\displaystyle n_{1}\times n_{2}}"></span> <a href="/wiki/Matrix_(mathematics)" title="Matrix (mathematics)">matrix</a>, and this algorithm corresponds to first performing the FFT of all the rows (resp. columns), grouping the resulting transformed rows (resp. columns) together as another <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle n_{1}\times n_{2}}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>1</mn> </mrow> </msub> <mo>×<!-- × --></mo> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msub> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle n_{1}\times n_{2}}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/82858cf4e363d953f3cc4d584aa9fbc3ade86398" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.671ex; width:7.738ex; height:2.009ex;" alt="{\displaystyle n_{1}\times n_{2}}"></span> matrix, and then performing the FFT on each of the columns (resp. rows) of this second matrix, and similarly grouping the results into the final result matrix. </p><p>In more than two dimensions, it is often advantageous for <a href="/wiki/Cache_(computing)" title="Cache (computing)">cache</a> locality to group the dimensions recursively. For example, a three-dimensional FFT might first perform two-dimensional FFTs of each planar "slice" for each fixed <i>n</i><sub>1</sub>, and then perform the one-dimensional FFTs along the <i>n</i><sub>1</sub> direction. More generally, an <a href="/wiki/Asymptotically_optimal" class="mw-redirect" title="Asymptotically optimal">asymptotically optimal</a> <a href="/wiki/Cache-oblivious_algorithm" title="Cache-oblivious algorithm">cache-oblivious algorithm</a> consists of recursively dividing the dimensions into two groups <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle (n_{1},\ldots ,n_{d/2})}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mo stretchy="false">(</mo> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>1</mn> </mrow> </msub> <mo>,</mo> <mo>…<!-- … --></mo> <mo>,</mo> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>d</mi> <mrow class="MJX-TeXAtom-ORD"> <mo>/</mo> </mrow> <mn>2</mn> </mrow> </msub> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle (n_{1},\ldots ,n_{d/2})}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/8b326af447592c176f0ef5c132456a81556e2468" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.171ex; width:13.567ex; height:3.176ex;" alt="{\textstyle (n_{1},\ldots ,n_{d/2})}"></span> and <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle (n_{d/2+1},\ldots ,n_{d})}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mo stretchy="false">(</mo> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>d</mi> <mrow class="MJX-TeXAtom-ORD"> <mo>/</mo> </mrow> <mn>2</mn> <mo>+</mo> <mn>1</mn> </mrow> </msub> <mo>,</mo> <mo>…<!-- … --></mo> <mo>,</mo> <msub> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>d</mi> </mrow> </msub> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle (n_{d/2+1},\ldots ,n_{d})}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/dacf87c7c7c06d47ab6e5c41fbe23d23de01b022" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -1.171ex; width:15.705ex; height:3.176ex;" alt="{\textstyle (n_{d/2+1},\ldots ,n_{d})}"></span> that are transformed recursively (rounding if <span class="texhtml mvar" style="font-style:italic;">d</span> is not even) (see Frigo and Johnson, 2005).<sup id="cite_ref-Frigo_Johnson_2005_17-2" class="reference"><a href="#cite_note-Frigo_Johnson_2005-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup> Still, this remains a straightforward variation of the row-column algorithm that ultimately requires only a one-dimensional FFT algorithm as the base case, and still has <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle O(n\log n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>n</mi> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle O(n\log n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/9d2320768fb54880ca4356e61f60eb02a3f9d9f1" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:10.118ex; height:2.843ex;" alt="{\displaystyle O(n\log n)}"></span> complexity. Yet another variation is to perform matrix <a href="/wiki/Transpose" title="Transpose">transpositions</a> in between transforming subsequent dimensions, so that the transforms operate on contiguous data; this is especially important for <a href="/wiki/Out-of-core" class="mw-redirect" title="Out-of-core">out-of-core</a> and <a href="/wiki/Distributed_memory" title="Distributed memory">distributed memory</a> situations where accessing non-contiguous data is extremely time-consuming. </p><p>There are other multidimensional FFT algorithms that are distinct from the row-column algorithm, although all of them have <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle O(n\log n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <mi>n</mi> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle O(n\log n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/e300e6b542c2c33ac12df0f02c5047db8ee8e1ca" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:10.118ex; height:2.843ex;" alt="{\textstyle O(n\log n)}"></span> complexity. Perhaps the simplest non-row-column FFT is the <a href="/wiki/Vector-radix_FFT_algorithm" title="Vector-radix FFT algorithm">vector-radix FFT algorithm</a>, which is a generalization of the ordinary Cooley–Tukey algorithm where one divides the transform dimensions by a vector <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle \mathbf {r} =\left(r_{1},r_{2},\ldots ,r_{d}\right)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mrow class="MJX-TeXAtom-ORD"> <mi mathvariant="bold">r</mi> </mrow> <mo>=</mo> <mrow> <mo>(</mo> <mrow> <msub> <mi>r</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>1</mn> </mrow> </msub> <mo>,</mo> <msub> <mi>r</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msub> <mo>,</mo> <mo>…<!-- … --></mo> <mo>,</mo> <msub> <mi>r</mi> <mrow class="MJX-TeXAtom-ORD"> <mi>d</mi> </mrow> </msub> </mrow> <mo>)</mo> </mrow> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle \mathbf {r} =\left(r_{1},r_{2},\ldots ,r_{d}\right)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/c00dcf6d1fad2115029d48485902e4384ce65965" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:18.568ex; height:2.843ex;" alt="{\textstyle \mathbf {r} =\left(r_{1},r_{2},\ldots ,r_{d}\right)}"></span> of radices at each step. (This may also have cache benefits.) The simplest case of vector-radix is where all of the radices are equal (e.g. vector-radix-2 divides <i>all</i> of the dimensions by two), but this is not necessary. Vector radix with only a single non-unit radix at a time, i.e. <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle \mathbf {r} =\left(1,\ldots ,1,r,1,\ldots ,1\right)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mrow class="MJX-TeXAtom-ORD"> <mi mathvariant="bold">r</mi> </mrow> <mo>=</mo> <mrow> <mo>(</mo> <mrow> <mn>1</mn> <mo>,</mo> <mo>…<!-- … --></mo> <mo>,</mo> <mn>1</mn> <mo>,</mo> <mi>r</mi> <mo>,</mo> <mn>1</mn> <mo>,</mo> <mo>…<!-- … --></mo> <mo>,</mo> <mn>1</mn> </mrow> <mo>)</mo> </mrow> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle \mathbf {r} =\left(1,\ldots ,1,r,1,\ldots ,1\right)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/bae6de808fd13a1a9ebe50f1b11ea32555d8c807" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:24.133ex; height:2.843ex;" alt="{\textstyle \mathbf {r} =\left(1,\ldots ,1,r,1,\ldots ,1\right)}"></span>, is essentially a row-column algorithm. Other, more complicated, methods include polynomial transform algorithms due to Nussbaumer (1977),<sup id="cite_ref-Nussbaumer_1977_40-0" class="reference"><a href="#cite_note-Nussbaumer_1977-40"><span class="cite-bracket">[</span>40<span class="cite-bracket">]</span></a></sup> which view the transform in terms of convolutions and polynomial products. See Duhamel and Vetterli (1990)<sup id="cite_ref-Duhamel_Vetterli_1990_32-1" class="reference"><a href="#cite_note-Duhamel_Vetterli_1990-32"><span class="cite-bracket">[</span>32<span class="cite-bracket">]</span></a></sup> for more information and references. </p> <div class="mw-heading mw-heading2"><h2 id="Other_generalizations">Other generalizations</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Fast_Fourier_transform&action=edit&section=12" title="Edit section: Other generalizations"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>An <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle O(n^{5/2}\log n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <msup> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>5</mn> <mrow class="MJX-TeXAtom-ORD"> <mo>/</mo> </mrow> <mn>2</mn> </mrow> </msup> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle O(n^{5/2}\log n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/38349f5d6ef2e22eea56be74aa9f9af3c32f882b" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:12.816ex; height:3.176ex;" alt="{\textstyle O(n^{5/2}\log n)}"></span> generalization to <a href="/wiki/Spherical_harmonics" title="Spherical harmonics">spherical harmonics</a> on the sphere <span class="texhtml"><i>S</i><sup>2</sup></span> with <span class="texhtml"><i>n</i><sup>2</sup></span> nodes was described by Mohlenkamp,<sup id="cite_ref-Mohlenkamp_1999_41-0" class="reference"><a href="#cite_note-Mohlenkamp_1999-41"><span class="cite-bracket">[</span>41<span class="cite-bracket">]</span></a></sup> along with an algorithm conjectured (but not proven) to have <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle O(n^{2}\log ^{2}(n))}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <msup> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msup> <msup> <mi>log</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msup> <mo>⁡<!-- --></mo> <mo stretchy="false">(</mo> <mi>n</mi> <mo stretchy="false">)</mo> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle O(n^{2}\log ^{2}(n))}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/7a4bb4842367a5818e9c0d1ea3e4187bcf1d18f1" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:13.649ex; height:3.176ex;" alt="{\textstyle O(n^{2}\log ^{2}(n))}"></span> complexity; Mohlenkamp also provides an implementation in the libftsh library.<sup id="cite_ref-libftsh_42-0" class="reference"><a href="#cite_note-libftsh-42"><span class="cite-bracket">[</span>42<span class="cite-bracket">]</span></a></sup> A spherical-harmonic algorithm with <span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\textstyle O(n^{2}\log n)}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="false" scriptlevel="0"> <mi>O</mi> <mo stretchy="false">(</mo> <msup> <mi>n</mi> <mrow class="MJX-TeXAtom-ORD"> <mn>2</mn> </mrow> </msup> <mi>log</mi> <mo>⁡<!-- --></mo> <mi>n</mi> <mo stretchy="false">)</mo> </mstyle> </mrow> <annotation encoding="application/x-tex">{\textstyle O(n^{2}\log n)}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/3515abfcc8eace588f5dc0a284d0a56e4b393d3c" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.838ex; width:11.172ex; height:3.009ex;" alt="{\textstyle O(n^{2}\log n)}"></span> complexity is described by Rokhlin and Tygert.<sup id="cite_ref-Rokhlin_Tygert_2006_43-0" class="reference"><a href="#cite_note-Rokhlin_Tygert_2006-43"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup> </p><p>The <a href="/wiki/Fast_folding_algorithm" title="Fast folding algorithm">fast folding algorithm</a> is analogous to the FFT, except that it operates on a series of binned waveforms rather than a series of real or complex scalar values. Rotation (which in the FFT is multiplication by a complex phasor) is a circular shift of the component waveform. </p><p>Various groups have also published "FFT" algorithms for non-equispaced data, as reviewed in Potts <i>et al.</i> (2001).<sup id="cite_ref-Potts_Steidl_Tasche_2001_44-0" class="reference"><a href="#cite_note-Potts_Steidl_Tasche_2001-44"><span class="cite-bracket">[</span>44<span class="cite-bracket">]</span></a></sup> Such algorithms do not strictly compute the DFT (which is only defined for equispaced data), but rather some approximation thereof (a <a href="/wiki/Non-uniform_discrete_Fourier_transform" title="Non-uniform discrete Fourier transform">non-uniform discrete Fourier transform</a>, or NDFT, which itself is often computed only approximately). More generally there are various other methods of <a href="/wiki/Spectral_estimation" class="mw-redirect" title="Spectral estimation">spectral estimation</a>. </p> <div class="mw-heading mw-heading2"><h2 id="Applications">Applications</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Fast_Fourier_transform&action=edit&section=13" title="Edit section: Applications"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The FFT is used in digital recording, sampling, <a href="/wiki/Additive_synthesis" title="Additive synthesis">additive synthesis</a> and <a href="/wiki/Pitch_correction" title="Pitch correction">pitch correction</a> software.<sup id="cite_ref-45" class="reference"><a href="#cite_note-45"><span class="cite-bracket">[</span>45<span class="cite-bracket">]</span></a></sup> </p><p>The FFT's importance derives from the fact that it has made working in the frequency domain equally computationally feasible as working in the temporal or spatial domain. Some of the important applications of the FFT include:<sup id="cite_ref-Rockmore_2000_15-1" class="reference"><a href="#cite_note-Rockmore_2000-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-Chu_George_1999_46-0" class="reference"><a href="#cite_note-Chu_George_1999-46"><span class="cite-bracket">[</span>46<span class="cite-bracket">]</span></a></sup> </p> <ul><li>fast large-integer <a href="/wiki/Multiplication_algorithm" title="Multiplication algorithm">multiplication algorithms</a> and polynomial multiplication,</li> <li>efficient matrix–vector multiplication for <a href="/wiki/Toeplitz_matrix" title="Toeplitz matrix">Toeplitz</a>, <a href="/wiki/Circulant" class="mw-redirect" title="Circulant">circulant</a> and other structured matrices,</li> <li>filtering algorithms (see <a href="/wiki/Overlap%E2%80%93add_method" title="Overlap–add method">overlap–add</a> and <a href="/wiki/Overlap%E2%80%93save_method" title="Overlap–save method">overlap–save</a> methods),</li> <li>fast algorithms for <a href="/wiki/Discrete_cosine_transform" title="Discrete cosine transform">discrete cosine</a> or <a href="/wiki/Discrete_sine_transform" title="Discrete sine transform">sine transforms</a> (e.g. <a href="/wiki/Discrete_cosine_transform" title="Discrete cosine transform">fast DCT</a> used for <a href="/wiki/JPEG" title="JPEG">JPEG</a> and <a href="/wiki/MPEG" class="mw-redirect" title="MPEG">MPEG</a>/<a href="/wiki/MP3" title="MP3">MP3</a> encoding and decoding),</li> <li>fast <a href="/wiki/Chebyshev_approximation" class="mw-redirect" title="Chebyshev approximation">Chebyshev approximation</a>,</li> <li>solving <a href="/wiki/Recurrence_relation" title="Recurrence relation">difference equations</a>,</li> <li>computation of <a href="/wiki/Mass_spectrometry" title="Mass spectrometry">isotopic distributions</a>.<sup id="cite_ref-Fernandez-de-Cossio_2012_47-0" class="reference"><a href="#cite_note-Fernandez-de-Cossio_2012-47"><span class="cite-bracket">[</span>47<span class="cite-bracket">]</span></a></sup></li> <li>modulation and demodulation of complex data symbols using orthogonal frequency division multiplexing (OFDM) for 5G, LTE, Wi-Fi, DSL, and other modern communication systems.</li></ul> <p>An original application of the FFT in <a href="/wiki/Finance" title="Finance">finance</a> particularly in the <a href="/wiki/Valuation_of_options" title="Valuation of options">Valuation of options</a> was developed by Marcello Minenna.<sup id="cite_ref-MinennaJBF_48-0" class="reference"><a href="#cite_note-MinennaJBF-48"><span class="cite-bracket">[</span>48<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading2"><h2 id="Limitation">Limitation</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Fast_Fourier_transform&action=edit&section=14" title="Edit section: Limitation"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1251242444">.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}</style><table class="box-Unreferenced_section plainlinks metadata ambox ambox-content ambox-Unreferenced" role="presentation"><tbody><tr><td class="mbox-image"><div class="mbox-image-div"><span typeof="mw:File"><a href="/wiki/File:Question_book-new.svg" class="mw-file-description"><img alt="" src="//upload.wikimedia.org/wikipedia/en/thumb/9/99/Question_book-new.svg/50px-Question_book-new.svg.png" decoding="async" width="50" height="39" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/9/99/Question_book-new.svg/75px-Question_book-new.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/9/99/Question_book-new.svg/100px-Question_book-new.svg.png 2x" data-file-width="512" data-file-height="399" /></a></span></div></td><td class="mbox-text"><div class="mbox-text-span">This section <b>does not <a href="/wiki/Wikipedia:Citing_sources" title="Wikipedia:Citing sources">cite</a> any <a href="/wiki/Wikipedia:Verifiability" title="Wikipedia:Verifiability">sources</a></b>.<span class="hide-when-compact"> Please help <a href="/wiki/Special:EditPage/Fast_Fourier_transform" title="Special:EditPage/Fast Fourier transform">improve this section</a> by <a href="/wiki/Help:Referencing_for_beginners" title="Help:Referencing for beginners">adding citations to reliable sources</a>. Unsourced material may be challenged and <a href="/wiki/Wikipedia:Verifiability#Burden_of_evidence" title="Wikipedia:Verifiability">removed</a>.</span> <span class="date-container"><i>(<span class="date">November 2024</span>)</i></span><span class="hide-when-compact"><i> (<small><a href="/wiki/Help:Maintenance_template_removal" title="Help:Maintenance template removal">Learn how and when to remove this message</a></small>)</i></span></div></td></tr></tbody></table> <p>Despite its strengths, the Fast Fourier Transform (FFT) has limitations, particularly when analyzing signals with <a href="/wiki/Non-stationary" class="mw-redirect" title="Non-stationary">non-stationary</a> frequency content—where the frequency characteristics change over time. The FFT provides a global frequency representation, meaning it analyzes frequency information across the entire signal duration. This global perspective makes it challenging to detect short-lived or transient features within signals, as the FFT assumes that all frequency components are present throughout the entire signal. </p><p>For cases where frequency information varies over time, alternative transforms like the <a href="/wiki/Wavelet_transform" title="Wavelet transform">wavelet transform</a> can be more suitable. The wavelet transform allows for a localized frequency analysis, capturing both frequency and time-based information. This makes it better suited for applications where critical information appears briefly in the signal. These differences highlight that while the FFT is a powerful tool for many applications, it may not be ideal for all types of signal analysis. </p> <div class="mw-heading mw-heading2"><h2 id="Research_areas">Research areas</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Fast_Fourier_transform&action=edit&section=15" title="Edit section: Research areas"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <dl><dt>Big FFTs</dt> <dd>With the explosion of big data in fields such as astronomy, the need for 512K FFTs has arisen for certain interferometry calculations. The data collected by projects such as <a href="/wiki/WMAP" class="mw-redirect" title="WMAP">WMAP</a> and <a href="/wiki/LIGO" title="LIGO">LIGO</a> require FFTs of tens of billions of points. As this size does not fit into main memory, so called out-of-core FFTs are an active area of research.<sup id="cite_ref-Cormen_Nicol_1998_49-0" class="reference"><a href="#cite_note-Cormen_Nicol_1998-49"><span class="cite-bracket">[</span>49<span class="cite-bracket">]</span></a></sup></dd> <dt>Approximate FFTs</dt> <dd>For applications such as MRI, it is necessary to compute DFTs for nonuniformly spaced grid points and/or frequencies. Multipole based approaches can compute approximate quantities with factor of runtime increase.<sup id="cite_ref-Dutt_Rokhlin_1993_50-0" class="reference"><a href="#cite_note-Dutt_Rokhlin_1993-50"><span class="cite-bracket">[</span>50<span class="cite-bracket">]</span></a></sup></dd> <dt><a href="/wiki/Fourier_transform_on_finite_groups" title="Fourier transform on finite groups">Group FFTs</a></dt> <dd>The FFT may also be explained and interpreted using <a href="/wiki/Group_representation_theory" class="mw-redirect" title="Group representation theory">group representation theory</a> allowing for further generalization. A function on any compact group, including non-cyclic, has an expansion in terms of a basis of irreducible matrix elements. It remains active area of research to find efficient algorithm for performing this change of basis. Applications including efficient <a href="/wiki/Spherical_harmonic" class="mw-redirect" title="Spherical harmonic">spherical harmonic</a> expansion, analyzing certain <a href="/wiki/Markov_process" class="mw-redirect" title="Markov process">Markov processes</a>, robotics etc.<sup id="cite_ref-Rockmore_2004_51-0" class="reference"><a href="#cite_note-Rockmore_2004-51"><span class="cite-bracket">[</span>51<span class="cite-bracket">]</span></a></sup></dd> <dt><a href="/wiki/Quantum_Fourier_transform" title="Quantum Fourier transform">Quantum FFTs</a></dt> <dd>Shor's fast algorithm for <a href="/wiki/Integer_factorization" title="Integer factorization">integer factorization</a> on a quantum computer has a subroutine to compute DFT of a binary vector. This is implemented as sequence of 1- or 2-bit quantum gates now known as quantum FFT, which is effectively the Cooley–Tukey FFT realized as a particular factorization of the Fourier matrix. Extension to these ideas is currently being explored.<sup id="cite_ref-52" class="reference"><a href="#cite_note-52"><span class="cite-bracket">[</span>52<span class="cite-bracket">]</span></a></sup></dd></dl> <div class="mw-heading mw-heading2"><h2 id="Language_reference">Language reference</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Fast_Fourier_transform&action=edit&section=16" title="Edit section: Language reference"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <table class="wikitable"><tbody><tr style="vertical-align:top"><th scope="col">Language</th><th scope="col" style="font-family:monospace;">Command–method</th><th scope="col">Prerequisites</th></tr><tr style="vertical-align:top"><td><a href="/wiki/R_(programming_language)" title="R (programming language)">R</a></td><td style="font-family:monospace;">stats::fft(x)</td><td>None</td></tr><tr style="vertical-align:top"><td><a href="/wiki/Scilab" title="Scilab">Scilab</a></td><td style="font-family:monospace;">fft(x)</td><td>None</td></tr><tr style="vertical-align:top"><td><a href="/wiki/MATLAB" title="MATLAB">MATLAB</a>, <a href="/wiki/GNU_Octave" title="GNU Octave">Octave</a></td><td style="font-family:monospace;">fft(x)</td><td>None</td></tr><tr style="vertical-align:top"><td><a href="/wiki/Python_(programming_language)" title="Python (programming language)">Python</a></td><td style="font-family:monospace;">fft.fft(x)</td><td><a href="/wiki/Numpy" class="mw-redirect" title="Numpy">numpy</a> or <a href="/wiki/Scipy" class="mw-redirect" title="Scipy">scipy</a></td></tr><tr style="vertical-align:top"><td><a href="/wiki/Mathematica" class="mw-redirect" title="Mathematica">Mathematica</a></td><td style="font-family:monospace;">Fourier[x]</td><td>None</td></tr><tr style="vertical-align:top"><td><a href="/wiki/Fortran" title="Fortran">Fortran</a></td><td style="font-family:monospace;">fftw_one(plan,in,out)</td><td><a href="/wiki/FFTW" title="FFTW">FFTW</a></td></tr><tr style="vertical-align:top"><td><a href="/wiki/Julia_(programming_language)" title="Julia (programming language)">Julia</a></td><td style="font-family:monospace;">fft(A [,dims])</td><td><a href="/wiki/FFTW" title="FFTW">FFTW</a></td></tr><tr style="vertical-align:top"><td><a href="/wiki/Rust_(programming_language)" title="Rust (programming language)">Rust</a></td><td style="font-family:monospace;">fft.process(&mut x);</td><td><a rel="nofollow" class="external text" href="https://docs.rs/rustfft/latest/rustfft/">rustfft</a></td></tr><tr style="vertical-align:top"><td><a href="/wiki/Haskell" title="Haskell">Haskell</a></td><td style="font-family:monospace;">dft x</td><td><a rel="nofollow" class="external text" href="https://hackage.haskell.org/package/fft">fft</a></td></tr></tbody></table> <div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Fast_Fourier_transform&action=edit&section=17" title="Edit section: See also"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>FFT-related algorithms: </p> <ul><li><a href="/wiki/Bit-reversal_permutation" title="Bit-reversal permutation">Bit-reversal permutation</a></li> <li><a href="/wiki/Goertzel_algorithm" title="Goertzel algorithm">Goertzel algorithm</a> – computes individual terms of discrete Fourier transform</li></ul> <p>FFT implementations: </p> <ul><li><a href="/wiki/ALGLIB" title="ALGLIB">ALGLIB</a> – a dual/GPL-licensed C++ and C# library (also supporting other languages), with real/complex FFT implementation</li> <li><a href="/wiki/FFTPACK" title="FFTPACK">FFTPACK</a> – another Fortran FFT library (public domain)</li> <li>Architecture-specific: <ul><li>Arm Performance Libraries<sup id="cite_ref-Arm_Performance_Libraries_53-0" class="reference"><a href="#cite_note-Arm_Performance_Libraries-53"><span class="cite-bracket">[</span>53<span class="cite-bracket">]</span></a></sup></li> <li>Intel <a href="/wiki/Integrated_Performance_Primitives" title="Integrated Performance Primitives">Integrated Performance Primitives</a></li> <li>Intel <a href="/wiki/Math_Kernel_Library" title="Math Kernel Library">Math Kernel Library</a></li></ul></li> <li>Many more implementations are available,<sup id="cite_ref-54" class="reference"><a href="#cite_note-54"><span class="cite-bracket">[</span>54<span class="cite-bracket">]</span></a></sup> for CPUs and GPUs, such as PocketFFT for C++</li></ul> <p>Other links: </p> <ul><li><a href="/wiki/Odlyzko%E2%80%93Sch%C3%B6nhage_algorithm" title="Odlyzko–Schönhage algorithm">Odlyzko–Schönhage algorithm</a> applies the FFT to finite <a href="/wiki/Dirichlet_series" title="Dirichlet series">Dirichlet series</a></li> <li><a href="/wiki/Sch%C3%B6nhage%E2%80%93Strassen_algorithm" title="Schönhage–Strassen algorithm">Schönhage–Strassen algorithm</a> – asymptotically fast multiplication algorithm for large integers</li> <li><a href="/wiki/Butterfly_diagram" title="Butterfly diagram">Butterfly diagram</a> – a diagram used to describe FFTs</li> <li><a href="/wiki/Spectral_music" title="Spectral music">Spectral music</a> (involves application of DFT analysis to musical composition)</li> <li><a href="/wiki/Spectrum_analyzer" title="Spectrum analyzer">Spectrum analyzer</a> – any of several devices that perform spectrum analysis, often via a DFT</li> <li><a href="/wiki/Time_series" title="Time series">Time series</a></li> <li><a href="/wiki/Fast_Walsh%E2%80%93Hadamard_transform" title="Fast Walsh–Hadamard transform">Fast Walsh–Hadamard transform</a></li> <li><a href="/wiki/Generalized_distributive_law" title="Generalized distributive law">Generalized distributive law</a></li> <li><a href="/wiki/Least-squares_spectral_analysis" title="Least-squares spectral analysis">Least-squares spectral analysis</a></li> <li><a href="/wiki/Multidimensional_transform" title="Multidimensional transform">Multidimensional transform</a></li> <li><a href="/wiki/Multidimensional_discrete_convolution" title="Multidimensional discrete convolution">Multidimensional discrete convolution</a></li> <li><a href="/wiki/Fast_Fourier_Transform_Telescope" class="mw-redirect" title="Fast Fourier Transform Telescope">Fast Fourier Transform Telescope</a></li></ul> <div class="mw-heading mw-heading2"><h2 id="References">References</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Fast_Fourier_transform&action=edit&section=18" title="Edit section: References"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1239543626">.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}</style><div class="reflist"> <div class="mw-references-wrap mw-references-columns"><ol class="references"> <li id="cite_note-Heideman_Johnson_Burrus_1984-1"><span class="mw-cite-backlink">^ <a href="#cite_ref-Heideman_Johnson_Burrus_1984_1-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Heideman_Johnson_Burrus_1984_1-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-Heideman_Johnson_Burrus_1984_1-2"><sup><i><b>c</b></i></sup></a> <a href="#cite_ref-Heideman_Johnson_Burrus_1984_1-3"><sup><i><b>d</b></i></sup></a></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}</style><cite id="CITEREFHeidemanJohnsonBurrus1984" class="citation journal cs1">Heideman, Michael T.; Johnson, Don H.; <a href="/wiki/Charles_Sidney_Burrus" class="mw-redirect" title="Charles Sidney Burrus">Burrus, Charles Sidney</a> (1984). <a rel="nofollow" class="external text" href="http://www.cis.rit.edu/class/simg716/Gauss_History_FFT.pdf">"Gauss and the history of the fast Fourier transform"</a> <span class="cs1-format">(PDF)</span>. <i>IEEE ASSP Magazine</i>. <b>1</b> (4): 14–21. <a href="/wiki/CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.309.181">10.1.1.309.181</a></span>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FMASSP.1984.1162257">10.1109/MASSP.1984.1162257</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:10032502">10032502</a>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20130319053449/http://www.cis.rit.edu/class/simg716/Gauss_History_FFT.pdf">Archived</a> <span class="cs1-format">(PDF)</span> from the original on 2013-03-19.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=IEEE+ASSP+Magazine&rft.atitle=Gauss+and+the+history+of+the+fast+Fourier+transform&rft.volume=1&rft.issue=4&rft.pages=14-21&rft.date=1984&rft_id=https%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fsummary%3Fdoi%3D10.1.1.309.181%23id-name%3DCiteSeerX&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A10032502%23id-name%3DS2CID&rft_id=info%3Adoi%2F10.1109%2FMASSP.1984.1162257&rft.aulast=Heideman&rft.aufirst=Michael+T.&rft.au=Johnson%2C+Don+H.&rft.au=Burrus%2C+Charles+Sidney&rft_id=http%3A%2F%2Fwww.cis.rit.edu%2Fclass%2Fsimg716%2FGauss_History_FFT.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Loan_1992-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-Loan_1992_2-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFVan_Loan1992" class="citation book cs1">Van Loan, Charles (1992). <i>Computational Frameworks for the Fast Fourier Transform</i>. <a href="/wiki/SIAM" class="mw-redirect" title="SIAM">SIAM</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Computational+Frameworks+for+the+Fast+Fourier+Transform&rft.pub=SIAM&rft.date=1992&rft.aulast=Van+Loan&rft.aufirst=Charles&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Strang_1994-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-Strang_1994_3-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFStrang1994" class="citation journal cs1"><a href="/wiki/Gilbert_Strang" title="Gilbert Strang">Strang, Gilbert</a> (May–June 1994). "Wavelets". <i><a href="/wiki/American_Scientist" title="American Scientist">American Scientist</a></i>. <b>82</b> (3): 250–255. <a href="/wiki/JSTOR_(identifier)" class="mw-redirect" title="JSTOR (identifier)">JSTOR</a> <a rel="nofollow" class="external text" href="https://www.jstor.org/stable/29775194">29775194</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=American+Scientist&rft.atitle=Wavelets&rft.volume=82&rft.issue=3&rft.pages=250-255&rft.date=1994-05%2F1994-06&rft_id=https%3A%2F%2Fwww.jstor.org%2Fstable%2F29775194%23id-name%3DJSTOR&rft.aulast=Strang&rft.aufirst=Gilbert&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Kent_2002-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-Kent_2002_4-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFKentRead2002" class="citation book cs1">Kent, Ray D.; Read, Charles (2002). <i>Acoustic Analysis of Speech</i>. Singular/Thomson Learning. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/0-7693-0112-6" title="Special:BookSources/0-7693-0112-6"><bdi>0-7693-0112-6</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Acoustic+Analysis+of+Speech&rft.pub=Singular%2FThomson+Learning&rft.date=2002&rft.isbn=0-7693-0112-6&rft.aulast=Kent&rft.aufirst=Ray+D.&rft.au=Read%2C+Charles&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Dongarra_Sullivan_2000-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-Dongarra_Sullivan_2000_5-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFDongarraSullivan2000" class="citation journal cs1">Dongarra, Jack; Sullivan, Francis (January 2000). "Guest Editors' Introduction to the top 10 algorithms". <i>Computing in Science & Engineering</i>. <b>2</b> (1): 22–23. <a href="/wiki/Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/2000CSE.....2a..22D">2000CSE.....2a..22D</a>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FMCISE.2000.814652">10.1109/MCISE.2000.814652</a>. <a href="/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/1521-9615">1521-9615</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Computing+in+Science+%26+Engineering&rft.atitle=Guest+Editors%27+Introduction+to+the+top+10+algorithms&rft.volume=2&rft.issue=1&rft.pages=22-23&rft.date=2000-01&rft.issn=1521-9615&rft_id=info%3Adoi%2F10.1109%2FMCISE.2000.814652&rft_id=info%3Abibcode%2F2000CSE.....2a..22D&rft.aulast=Dongarra&rft.aufirst=Jack&rft.au=Sullivan%2C+Francis&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Gauss_1866-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-Gauss_1866_6-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFGauss1866" class="citation book cs1 cs1-prop-foreign-lang-source cs1-prop-foreign-lang-source"><a href="/wiki/Carl_Friedrich_Gauss" title="Carl Friedrich Gauss">Gauss, Carl Friedrich</a> (1866). <a rel="nofollow" class="external text" href="https://babel.hathitrust.org/cgi/pt?id=uc1.c2857678;view=1up;seq=279">"Theoria interpolationis methodo nova tractata"</a> [Theory regarding a new method of interpolation]. <i>Nachlass</i> (Unpublished manuscript). Werke (in Latin and German). Vol. 3. Göttingen, Germany: Königlichen Gesellschaft der Wissenschaften zu Göttingen. pp. 265–303.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=Theoria+interpolationis+methodo+nova+tractata&rft.btitle=Nachlass&rft.place=G%C3%B6ttingen%2C+Germany&rft.series=Werke&rft.pages=265-303&rft.pub=K%C3%B6niglichen+Gesellschaft+der+Wissenschaften+zu+G%C3%B6ttingen&rft.date=1866&rft.aulast=Gauss&rft.aufirst=Carl+Friedrich&rft_id=https%3A%2F%2Fbabel.hathitrust.org%2Fcgi%2Fpt%3Fid%3Duc1.c2857678%3Bview%3D1up%3Bseq%3D279&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Heideman_Johnson_Burrus_1985-7"><span class="mw-cite-backlink">^ <a href="#cite_ref-Heideman_Johnson_Burrus_1985_7-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Heideman_Johnson_Burrus_1985_7-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFHeidemanJohnsonBurrus1985" class="citation journal cs1">Heideman, Michael T.; Johnson, Don H.; <a href="/wiki/Charles_Sidney_Burrus" class="mw-redirect" title="Charles Sidney Burrus">Burrus, Charles Sidney</a> (1985-09-01). "Gauss and the history of the fast Fourier transform". <i>Archive for History of Exact Sciences</i>. <b>34</b> (3): 265–277. <a href="/wiki/CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.309.181">10.1.1.309.181</a></span>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2FBF00348431">10.1007/BF00348431</a>. <a href="/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0003-9519">0003-9519</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:122847826">122847826</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Archive+for+History+of+Exact+Sciences&rft.atitle=Gauss+and+the+history+of+the+fast+Fourier+transform&rft.volume=34&rft.issue=3&rft.pages=265-277&rft.date=1985-09-01&rft_id=https%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fsummary%3Fdoi%3D10.1.1.309.181%23id-name%3DCiteSeerX&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A122847826%23id-name%3DS2CID&rft.issn=0003-9519&rft_id=info%3Adoi%2F10.1007%2FBF00348431&rft.aulast=Heideman&rft.aufirst=Michael+T.&rft.au=Johnson%2C+Don+H.&rft.au=Burrus%2C+Charles+Sidney&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Yates_1937-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-Yates_1937_8-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFYates1937" class="citation journal cs1"><a href="/wiki/Frank_Yates" title="Frank Yates">Yates, Frank</a> (1937). "The design and analysis of factorial experiments". <i>Technical Communication No. 35 of the Commonwealth Bureau of Soils</i>. <b>142</b> (3585): 90–92. <a href="/wiki/Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/1938Natur.142...90F">1938Natur.142...90F</a>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1038%2F142090a0">10.1038/142090a0</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:23501205">23501205</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Technical+Communication+No.+35+of+the+Commonwealth+Bureau+of+Soils&rft.atitle=The+design+and+analysis+of+factorial+experiments&rft.volume=142&rft.issue=3585&rft.pages=90-92&rft.date=1937&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A23501205%23id-name%3DS2CID&rft_id=info%3Adoi%2F10.1038%2F142090a0&rft_id=info%3Abibcode%2F1938Natur.142...90F&rft.aulast=Yates&rft.aufirst=Frank&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Danielson_Lanczos_1942-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-Danielson_Lanczos_1942_9-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFDanielsonLanczos1942" class="citation journal cs1"><a href="/wiki/Gordon_C._Danielson" class="mw-redirect" title="Gordon C. Danielson">Danielson, Gordon C.</a>; <a href="/wiki/Cornelius_Lanczos" title="Cornelius Lanczos">Lanczos, Cornelius</a> (1942). "Some improvements in practical Fourier analysis and their application to x-ray scattering from liquids". <i>Journal of the Franklin Institute</i>. <b>233</b> (4): 365–380. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2FS0016-0032%2842%2990767-1">10.1016/S0016-0032(42)90767-1</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Journal+of+the+Franklin+Institute&rft.atitle=Some+improvements+in+practical+Fourier+analysis+and+their+application+to+x-ray+scattering+from+liquids&rft.volume=233&rft.issue=4&rft.pages=365-380&rft.date=1942&rft_id=info%3Adoi%2F10.1016%2FS0016-0032%2842%2990767-1&rft.aulast=Danielson&rft.aufirst=Gordon+C.&rft.au=Lanczos%2C+Cornelius&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Lanczos_1956-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-Lanczos_1956_10-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFLanczos1956" class="citation book cs1"><a href="/wiki/Cornelius_Lanczos" title="Cornelius Lanczos">Lanczos, Cornelius</a> (1956). <span class="id-lock-registration" title="Free registration required"><a rel="nofollow" class="external text" href="https://archive.org/details/appliedanalysis00lanc_0"><i>Applied Analysis</i></a></span>. <a href="/wiki/Prentice%E2%80%93Hall" class="mw-redirect" title="Prentice–Hall">Prentice–Hall</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Applied+Analysis&rft.pub=Prentice%E2%80%93Hall&rft.date=1956&rft.aulast=Lanczos&rft.aufirst=Cornelius&rft_id=https%3A%2F%2Farchive.org%2Fdetails%2Fappliedanalysis00lanc_0&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Cooley_Lewis_Welch_1967-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-Cooley_Lewis_Welch_1967_11-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFCooleyLewisWelch1967" class="citation journal cs1"><a href="/wiki/James_Cooley" title="James Cooley">Cooley, James W.</a>; Lewis, Peter A. W.; Welch, Peter D. (June 1967). "Historical notes on the fast Fourier transform". <i><a href="/wiki/IEEE_Transactions_on_Audio_and_Electroacoustics" class="mw-redirect" title="IEEE Transactions on Audio and Electroacoustics">IEEE Transactions on Audio and Electroacoustics</a></i>. <b>15</b> (2): 76–79. <a href="/wiki/CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.467.7209">10.1.1.467.7209</a></span>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FTAU.1967.1161903">10.1109/TAU.1967.1161903</a>. <a href="/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0018-9278">0018-9278</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=IEEE+Transactions+on+Audio+and+Electroacoustics&rft.atitle=Historical+notes+on+the+fast+Fourier+transform&rft.volume=15&rft.issue=2&rft.pages=76-79&rft.date=1967-06&rft_id=https%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fsummary%3Fdoi%3D10.1.1.467.7209%23id-name%3DCiteSeerX&rft.issn=0018-9278&rft_id=info%3Adoi%2F10.1109%2FTAU.1967.1161903&rft.aulast=Cooley&rft.aufirst=James+W.&rft.au=Lewis%2C+Peter+A.+W.&rft.au=Welch%2C+Peter+D.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Cooley_Tukey_1965-12"><span class="mw-cite-backlink">^ <a href="#cite_ref-Cooley_Tukey_1965_12-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Cooley_Tukey_1965_12-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFCooleyTukey1965" class="citation journal cs1"><a href="/wiki/James_Cooley" title="James Cooley">Cooley, James W.</a>; <a href="/wiki/John_Tukey" title="John Tukey">Tukey, John W.</a> (1965). <a rel="nofollow" class="external text" href="https://www.ams.org/mcom/1965-19-090/S0025-5718-1965-0178586-1/">"An algorithm for the machine calculation of complex Fourier series"</a>. <i><a href="/wiki/Mathematics_of_Computation" title="Mathematics of Computation">Mathematics of Computation</a></i>. <b>19</b> (90): 297–301. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1090%2FS0025-5718-1965-0178586-1">10.1090/S0025-5718-1965-0178586-1</a></span>. <a href="/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0025-5718">0025-5718</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Mathematics+of+Computation&rft.atitle=An+algorithm+for+the+machine+calculation+of+complex+Fourier+series&rft.volume=19&rft.issue=90&rft.pages=297-301&rft.date=1965&rft_id=info%3Adoi%2F10.1090%2FS0025-5718-1965-0178586-1&rft.issn=0025-5718&rft.aulast=Cooley&rft.aufirst=James+W.&rft.au=Tukey%2C+John+W.&rft_id=https%3A%2F%2Fwww.ams.org%2Fmcom%2F1965-19-090%2FS0025-5718-1965-0178586-1%2F&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Cooley_1987-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-Cooley_1987_13-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFCooley1987" class="citation book cs1"><a href="/wiki/James_W._Cooley" class="mw-redirect" title="James W. Cooley">Cooley, James W.</a> (1987). <a rel="nofollow" class="external text" href="https://carma.newcastle.edu.au/jon/Preprints/Talks/CARMA-CE/FFT.pdf">"The Re-Discovery of the Fast Fourier Transform Algorithm"</a> <span class="cs1-format">(PDF)</span>. <i>Microchimica Acta</i>. Vol. III. Vienna, Austria. pp. 33–45. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20160820070623/https://carma.newcastle.edu.au/jon/Preprints/Talks/CARMA-CE/FFT.pdf">Archived</a> <span class="cs1-format">(PDF)</span> from the original on 2016-08-20.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=The+Re-Discovery+of+the+Fast+Fourier+Transform+Algorithm&rft.btitle=Microchimica+Acta&rft.place=Vienna%2C+Austria&rft.pages=33-45&rft.date=1987&rft.aulast=Cooley&rft.aufirst=James+W.&rft_id=https%3A%2F%2Fcarma.newcastle.edu.au%2Fjon%2FPreprints%2FTalks%2FCARMA-CE%2FFFT.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span><span class="cs1-maint citation-comment"><code class="cs1-code">{{<a href="/wiki/Template:Cite_book" title="Template:Cite book">cite book</a>}}</code>: CS1 maint: location missing publisher (<a href="/wiki/Category:CS1_maint:_location_missing_publisher" title="Category:CS1 maint: location missing publisher">link</a>)</span></span> </li> <li id="cite_note-Garwin_1969-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-Garwin_1969_14-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFGarwin1969" class="citation journal cs1 cs1-prop-long-vol">Garwin, Richard (June 1969). <a rel="nofollow" class="external text" href="https://fas.org/rlg/690600-fft.pdf">"The Fast Fourier Transform As an Example of the Difficulty in Gaining Wide Use for a New Technique"</a> <span class="cs1-format">(PDF)</span>. <i><a href="/wiki/IEEE_Transactions_on_Audio_and_Electroacoustics" class="mw-redirect" title="IEEE Transactions on Audio and Electroacoustics">IEEE Transactions on Audio and Electroacoustics</a></i>. AU-17 (2): 68–72. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20060517021147/http://www.fas.org/RLG/690600-fft.pdf">Archived</a> <span class="cs1-format">(PDF)</span> from the original on 2006-05-17.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=IEEE+Transactions+on+Audio+and+Electroacoustics&rft.atitle=The+Fast+Fourier+Transform+As+an+Example+of+the+Difficulty+in+Gaining+Wide+Use+for+a+New+Technique&rft.volume=AU-17&rft.issue=2&rft.pages=68-72&rft.date=1969-06&rft.aulast=Garwin&rft.aufirst=Richard&rft_id=https%3A%2F%2Ffas.org%2Frlg%2F690600-fft.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Rockmore_2000-15"><span class="mw-cite-backlink">^ <a href="#cite_ref-Rockmore_2000_15-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Rockmore_2000_15-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFRockmore2000" class="citation journal cs1">Rockmore, Daniel N. (January 2000). "The FFT: an algorithm the whole family can use". <i>Computing in Science & Engineering</i>. <b>2</b> (1): 60–64. <a href="/wiki/Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/2000CSE.....2a..60R">2000CSE.....2a..60R</a>. <a href="/wiki/CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.17.228">10.1.1.17.228</a></span>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2F5992.814659">10.1109/5992.814659</a>. <a href="/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/1521-9615">1521-9615</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:14978667">14978667</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Computing+in+Science+%26+Engineering&rft.atitle=The+FFT%3A+an+algorithm+the+whole+family+can+use&rft.volume=2&rft.issue=1&rft.pages=60-64&rft.date=2000-01&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A14978667%23id-name%3DS2CID&rft_id=info%3Abibcode%2F2000CSE.....2a..60R&rft_id=https%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fsummary%3Fdoi%3D10.1.1.17.228%23id-name%3DCiteSeerX&rft.issn=1521-9615&rft_id=info%3Adoi%2F10.1109%2F5992.814659&rft.aulast=Rockmore&rft.aufirst=Daniel+N.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Frigo_Johnson_2007-16"><span class="mw-cite-backlink">^ <a href="#cite_ref-Frigo_Johnson_2007_16-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Frigo_Johnson_2007_16-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFFrigoJohnson2007" class="citation journal cs1">Frigo, Matteo; Johnson, Steven G. (January 2007) [2006-12-19]. "A Modified Split-Radix FFT With Fewer Arithmetic Operations". <i><a href="/wiki/IEEE_Transactions_on_Signal_Processing" title="IEEE Transactions on Signal Processing">IEEE Transactions on Signal Processing</a></i>. <b>55</b> (1): 111–119. <a href="/wiki/Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/2007ITSP...55..111J">2007ITSP...55..111J</a>. <a href="/wiki/CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.582.5497">10.1.1.582.5497</a></span>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2Ftsp.2006.882087">10.1109/tsp.2006.882087</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:14772428">14772428</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=IEEE+Transactions+on+Signal+Processing&rft.atitle=A+Modified+Split-Radix+FFT+With+Fewer+Arithmetic+Operations&rft.volume=55&rft.issue=1&rft.pages=111-119&rft.date=2007-01&rft_id=https%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fsummary%3Fdoi%3D10.1.1.582.5497%23id-name%3DCiteSeerX&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A14772428%23id-name%3DS2CID&rft_id=info%3Adoi%2F10.1109%2Ftsp.2006.882087&rft_id=info%3Abibcode%2F2007ITSP...55..111J&rft.aulast=Frigo&rft.aufirst=Matteo&rft.au=Johnson%2C+Steven+G.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Frigo_Johnson_2005-17"><span class="mw-cite-backlink">^ <a href="#cite_ref-Frigo_Johnson_2005_17-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Frigo_Johnson_2005_17-1"><sup><i><b>b</b></i></sup></a> <a href="#cite_ref-Frigo_Johnson_2005_17-2"><sup><i><b>c</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFFrigoJohnson2005" class="citation journal cs1">Frigo, Matteo; Johnson, Steven G. (2005). <a rel="nofollow" class="external text" href="http://fftw.org/fftw-paper-ieee.pdf">"The Design and Implementation of FFTW3"</a> <span class="cs1-format">(PDF)</span>. <i><a href="/wiki/Proceedings_of_the_IEEE" title="Proceedings of the IEEE">Proceedings of the IEEE</a></i>. <b>93</b> (2): 216–231. <a href="/wiki/Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/2005IEEEP..93..216F">2005IEEEP..93..216F</a>. <a href="/wiki/CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.66.3097">10.1.1.66.3097</a></span>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2Fjproc.2004.840301">10.1109/jproc.2004.840301</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:6644892">6644892</a>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20050207233032/http://www.fftw.org/fftw-paper-ieee.pdf">Archived</a> <span class="cs1-format">(PDF)</span> from the original on 2005-02-07.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Proceedings+of+the+IEEE&rft.atitle=The+Design+and+Implementation+of+FFTW3&rft.volume=93&rft.issue=2&rft.pages=216-231&rft.date=2005&rft_id=https%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fsummary%3Fdoi%3D10.1.1.66.3097%23id-name%3DCiteSeerX&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A6644892%23id-name%3DS2CID&rft_id=info%3Adoi%2F10.1109%2Fjproc.2004.840301&rft_id=info%3Abibcode%2F2005IEEEP..93..216F&rft.aulast=Frigo&rft.aufirst=Matteo&rft.au=Johnson%2C+Steven+G.&rft_id=http%3A%2F%2Ffftw.org%2Ffftw-paper-ieee.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Gentleman_Sande_1966-18"><span class="mw-cite-backlink">^ <a href="#cite_ref-Gentleman_Sande_1966_18-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Gentleman_Sande_1966_18-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFGentlemanSande1966" class="citation journal cs1">Gentleman, W. Morven; Sande, G. (1966). <a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F1464291.1464352">"Fast Fourier transforms—for fun and profit"</a>. <i><a href="/wiki/Proceedings_of_the_AFIPS" class="mw-redirect" title="Proceedings of the AFIPS">Proceedings of the AFIPS</a></i>. <b>29</b>: 563–578. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F1464291.1464352">10.1145/1464291.1464352</a></span>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:207170956">207170956</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Proceedings+of+the+AFIPS&rft.atitle=Fast+Fourier+transforms%E2%80%94for+fun+and+profit&rft.volume=29&rft.pages=563-578&rft.date=1966&rft_id=info%3Adoi%2F10.1145%2F1464291.1464352&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A207170956%23id-name%3DS2CID&rft.aulast=Gentleman&rft.aufirst=W.+Morven&rft.au=Sande%2C+G.&rft_id=https%3A%2F%2Fdoi.org%2F10.1145%252F1464291.1464352&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Gauss_1805-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-Gauss_1805_19-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFGauss1866" class="citation book cs1 cs1-prop-foreign-lang-source cs1-prop-foreign-lang-source"><a href="/wiki/Carl_Friedrich_Gauss" title="Carl Friedrich Gauss">Gauss, Carl Friedrich</a> (1866) [1805]. <a rel="nofollow" class="external text" href="https://gdz.sub.uni-goettingen.de/id/PPN235999628"><i>Theoria interpolationis methodo nova tractata</i></a>. Werke (in Latin and German). Vol. 3. Göttingen, Germany: Königliche Gesellschaft der Wissenschaften. pp. 265–327.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Theoria+interpolationis+methodo+nova+tractata&rft.place=G%C3%B6ttingen%2C+Germany&rft.series=Werke&rft.pages=265-327&rft.pub=K%C3%B6nigliche+Gesellschaft+der+Wissenschaften&rft.date=1866&rft.aulast=Gauss&rft.aufirst=Carl+Friedrich&rft_id=https%3A%2F%2Fgdz.sub.uni-goettingen.de%2Fid%2FPPN235999628&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Brenner_Rader_1976-20"><span class="mw-cite-backlink">^ <a href="#cite_ref-Brenner_Rader_1976_20-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Brenner_Rader_1976_20-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFBrennerRader1976" class="citation journal cs1">Brenner, Norman M.; Rader, Charles M. (1976). "A New Principle for Fast Fourier Transformation". <i><a href="/wiki/IEEE_Transactions_on_Acoustics,_Speech,_and_Signal_Processing" class="mw-redirect" title="IEEE Transactions on Acoustics, Speech, and Signal Processing">IEEE Transactions on Acoustics, Speech, and Signal Processing</a></i>. <b>24</b> (3): 264–266. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FTASSP.1976.1162805">10.1109/TASSP.1976.1162805</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=IEEE+Transactions+on+Acoustics%2C+Speech%2C+and+Signal+Processing&rft.atitle=A+New+Principle+for+Fast+Fourier+Transformation&rft.volume=24&rft.issue=3&rft.pages=264-266&rft.date=1976&rft_id=info%3Adoi%2F10.1109%2FTASSP.1976.1162805&rft.aulast=Brenner&rft.aufirst=Norman+M.&rft.au=Rader%2C+Charles+M.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Winograd_1978-21"><span class="mw-cite-backlink">^ <a href="#cite_ref-Winograd_1978_21-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Winograd_1978_21-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFWinograd1978" class="citation journal cs1">Winograd, Shmuel (1978). <a rel="nofollow" class="external text" href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC430186">"On computing the discrete Fourier transform"</a>. <i><a href="/wiki/Mathematics_of_Computation" title="Mathematics of Computation">Mathematics of Computation</a></i>. <b>32</b> (141): 175–199. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1090%2FS0025-5718-1978-0468306-4">10.1090/S0025-5718-1978-0468306-4</a>. <a href="/wiki/JSTOR_(identifier)" class="mw-redirect" title="JSTOR (identifier)">JSTOR</a> <a rel="nofollow" class="external text" href="https://www.jstor.org/stable/2006266">2006266</a>. <a href="/wiki/PMC_(identifier)" class="mw-redirect" title="PMC (identifier)">PMC</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://www.ncbi.nlm.nih.gov/pmc/articles/PMC430186">430186</a></span>. <a href="/wiki/PMID_(identifier)" class="mw-redirect" title="PMID (identifier)">PMID</a> <a rel="nofollow" class="external text" href="https://pubmed.ncbi.nlm.nih.gov/16592303">16592303</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Mathematics+of+Computation&rft.atitle=On+computing+the+discrete+Fourier+transform&rft.volume=32&rft.issue=141&rft.pages=175-199&rft.date=1978&rft_id=https%3A%2F%2Fwww.ncbi.nlm.nih.gov%2Fpmc%2Farticles%2FPMC430186%23id-name%3DPMC&rft_id=info%3Apmid%2F16592303&rft_id=https%3A%2F%2Fwww.jstor.org%2Fstable%2F2006266%23id-name%3DJSTOR&rft_id=info%3Adoi%2F10.1090%2FS0025-5718-1978-0468306-4&rft.aulast=Winograd&rft.aufirst=Shmuel&rft_id=https%3A%2F%2Fwww.ncbi.nlm.nih.gov%2Fpmc%2Farticles%2FPMC430186&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Winograd_1979-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-Winograd_1979_22-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFWinograd1979" class="citation journal cs1">Winograd, Shmuel (1979). "On the multiplicative complexity of the discrete Fourier transform". <i><a href="/wiki/Advances_in_Mathematics" title="Advances in Mathematics">Advances in Mathematics</a></i>. <b>32</b> (2): 83–117. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2F0001-8708%2879%2990037-9">10.1016/0001-8708(79)90037-9</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Advances+in+Mathematics&rft.atitle=On+the+multiplicative+complexity+of+the+discrete+Fourier+transform&rft.volume=32&rft.issue=2&rft.pages=83-117&rft.date=1979&rft_id=info%3Adoi%2F10.1016%2F0001-8708%2879%2990037-9&rft.aulast=Winograd&rft.aufirst=Shmuel&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Sorensen_Jones_Heideman_Burrus_1987_1-23"><span class="mw-cite-backlink">^ <a href="#cite_ref-Sorensen_Jones_Heideman_Burrus_1987_1_23-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Sorensen_Jones_Heideman_Burrus_1987_1_23-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFSorensenJonesHeidemanBurrus1987" class="citation journal cs1">Sorensen, Henrik V.; <a href="/wiki/Douglas_L._Jones" title="Douglas L. Jones">Jones, Douglas L.</a>; Heideman, Michael T.; <a href="/wiki/Charles_Sidney_Burrus" class="mw-redirect" title="Charles Sidney Burrus">Burrus, Charles Sidney</a> (1987). "Real-valued fast Fourier transform algorithms". <i><a href="/wiki/IEEE_Transactions_on_Acoustics,_Speech,_and_Signal_Processing" class="mw-redirect" title="IEEE Transactions on Acoustics, Speech, and Signal Processing">IEEE Transactions on Acoustics, Speech, and Signal Processing</a></i>. <b>35</b> (6): 849–863. <a href="/wiki/CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.205.4523">10.1.1.205.4523</a></span>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FTASSP.1987.1165220">10.1109/TASSP.1987.1165220</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=IEEE+Transactions+on+Acoustics%2C+Speech%2C+and+Signal+Processing&rft.atitle=Real-valued+fast+Fourier+transform+algorithms&rft.volume=35&rft.issue=6&rft.pages=849-863&rft.date=1987&rft_id=https%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fsummary%3Fdoi%3D10.1.1.205.4523%23id-name%3DCiteSeerX&rft_id=info%3Adoi%2F10.1109%2FTASSP.1987.1165220&rft.aulast=Sorensen&rft.aufirst=Henrik+V.&rft.au=Jones%2C+Douglas+L.&rft.au=Heideman%2C+Michael+T.&rft.au=Burrus%2C+Charles+Sidney&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Sorensen_Jones_Heideman_Burrus_1987_2-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-Sorensen_Jones_Heideman_Burrus_1987_2_24-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFSorensenJonesHeidemanBurrus1987" class="citation journal cs1">Sorensen, Henrik V.; <a href="/wiki/Douglas_L._Jones" title="Douglas L. Jones">Jones, Douglas L.</a>; Heideman, Michael T.; <a href="/wiki/Charles_Sidney_Burrus" class="mw-redirect" title="Charles Sidney Burrus">Burrus, Charles Sidney</a> (1987). "Corrections to "Real-valued fast Fourier transform algorithms"<span class="cs1-kern-right"></span>". <i><a href="/wiki/IEEE_Transactions_on_Acoustics,_Speech,_and_Signal_Processing" class="mw-redirect" title="IEEE Transactions on Acoustics, Speech, and Signal Processing">IEEE Transactions on Acoustics, Speech, and Signal Processing</a></i>. <b>35</b> (9): 1353. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FTASSP.1987.1165284">10.1109/TASSP.1987.1165284</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=IEEE+Transactions+on+Acoustics%2C+Speech%2C+and+Signal+Processing&rft.atitle=Corrections+to+%22Real-valued+fast+Fourier+transform+algorithms%22&rft.volume=35&rft.issue=9&rft.pages=1353&rft.date=1987&rft_id=info%3Adoi%2F10.1109%2FTASSP.1987.1165284&rft.aulast=Sorensen&rft.aufirst=Henrik+V.&rft.au=Jones%2C+Douglas+L.&rft.au=Heideman%2C+Michael+T.&rft.au=Burrus%2C+Charles+Sidney&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Heideman_Burrus_1986-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-Heideman_Burrus_1986_25-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFHeidemanBurrus1986" class="citation journal cs1">Heideman, Michael T.; <a href="/wiki/Charles_Sidney_Burrus" class="mw-redirect" title="Charles Sidney Burrus">Burrus, Charles Sidney</a> (1986). "On the number of multiplications necessary to compute a length-2<sup><i>n</i></sup> DFT". <i><a href="/wiki/IEEE_Transactions_on_Acoustics,_Speech,_and_Signal_Processing" class="mw-redirect" title="IEEE Transactions on Acoustics, Speech, and Signal Processing">IEEE Transactions on Acoustics, Speech, and Signal Processing</a></i>. <b>34</b> (1): 91–95. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FTASSP.1986.1164785">10.1109/TASSP.1986.1164785</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=IEEE+Transactions+on+Acoustics%2C+Speech%2C+and+Signal+Processing&rft.atitle=On+the+number+of+multiplications+necessary+to+compute+a+length-2%3Csup%3En%3C%2Fsup%3E+DFT&rft.volume=34&rft.issue=1&rft.pages=91-95&rft.date=1986&rft_id=info%3Adoi%2F10.1109%2FTASSP.1986.1164785&rft.aulast=Heideman&rft.aufirst=Michael+T.&rft.au=Burrus%2C+Charles+Sidney&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Duhamel_1990-26"><span class="mw-cite-backlink">^ <a href="#cite_ref-Duhamel_1990_26-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Duhamel_1990_26-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFDuhamel1990" class="citation journal cs1">Duhamel, Pierre (1990). "Algorithms meeting the lower bounds on the multiplicative complexity of length-2<sup>n</sup> DFTs and their connection with practical algorithms". <i><a href="/wiki/IEEE_Transactions_on_Acoustics,_Speech,_and_Signal_Processing" class="mw-redirect" title="IEEE Transactions on Acoustics, Speech, and Signal Processing">IEEE Transactions on Acoustics, Speech, and Signal Processing</a></i>. <b>38</b> (9): 1504–1511. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2F29.60070">10.1109/29.60070</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=IEEE+Transactions+on+Acoustics%2C+Speech%2C+and+Signal+Processing&rft.atitle=Algorithms+meeting+the+lower+bounds+on+the+multiplicative+complexity+of+length-2%3Csup%3En%3C%2Fsup%3E+DFTs+and+their+connection+with+practical+algorithms&rft.volume=38&rft.issue=9&rft.pages=1504-1511&rft.date=1990&rft_id=info%3Adoi%2F10.1109%2F29.60070&rft.aulast=Duhamel&rft.aufirst=Pierre&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Morgenstern_1973-27"><span class="mw-cite-backlink"><b><a href="#cite_ref-Morgenstern_1973_27-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFMorgenstern1973" class="citation journal cs1">Morgenstern, Jacques (1973). <a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F321752.321761">"Note on a lower bound of the linear complexity of the fast Fourier transform"</a>. <i><a href="/wiki/Journal_of_the_ACM" title="Journal of the ACM">Journal of the ACM</a></i>. <b>20</b> (2): 305–306. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F321752.321761">10.1145/321752.321761</a></span>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:2790142">2790142</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Journal+of+the+ACM&rft.atitle=Note+on+a+lower+bound+of+the+linear+complexity+of+the+fast+Fourier+transform&rft.volume=20&rft.issue=2&rft.pages=305-306&rft.date=1973&rft_id=info%3Adoi%2F10.1145%2F321752.321761&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A2790142%23id-name%3DS2CID&rft.aulast=Morgenstern&rft.aufirst=Jacques&rft_id=https%3A%2F%2Fdoi.org%2F10.1145%252F321752.321761&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Pan_1986-28"><span class="mw-cite-backlink"><b><a href="#cite_ref-Pan_1986_28-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFPan1986" class="citation journal cs1">Pan, Victor Ya. (1986-01-02). <a rel="nofollow" class="external text" href="https://dl.acm.org/citation.cfm?id=8013">"The trade-off between the additive complexity and the asynchronicity of linear and bilinear algorithms"</a>. <i><a href="/wiki/Information_Processing_Letters" title="Information Processing Letters">Information Processing Letters</a></i>. <b>22</b> (1): 11–14. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2F0020-0190%2886%2990035-9">10.1016/0020-0190(86)90035-9</a><span class="reference-accessdate">. Retrieved <span class="nowrap">2017-10-31</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Information+Processing+Letters&rft.atitle=The+trade-off+between+the+additive+complexity+and+the+asynchronicity+of+linear+and+bilinear+algorithms&rft.volume=22&rft.issue=1&rft.pages=11-14&rft.date=1986-01-02&rft_id=info%3Adoi%2F10.1016%2F0020-0190%2886%2990035-9&rft.aulast=Pan&rft.aufirst=Victor+Ya.&rft_id=https%3A%2F%2Fdl.acm.org%2Fcitation.cfm%3Fid%3D8013&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Papadimitriou_1979-29"><span class="mw-cite-backlink"><b><a href="#cite_ref-Papadimitriou_1979_29-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFPapadimitriou1979" class="citation journal cs1">Papadimitriou, Christos H. (1979). <a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F322108.322118">"Optimality of the fast Fourier transform"</a>. <i><a href="/wiki/Journal_of_the_ACM" title="Journal of the ACM">Journal of the ACM</a></i>. <b>26</b>: 95–102. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F322108.322118">10.1145/322108.322118</a></span>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:850634">850634</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Journal+of+the+ACM&rft.atitle=Optimality+of+the+fast+Fourier+transform&rft.volume=26&rft.pages=95-102&rft.date=1979&rft_id=info%3Adoi%2F10.1145%2F322108.322118&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A850634%23id-name%3DS2CID&rft.aulast=Papadimitriou&rft.aufirst=Christos+H.&rft_id=https%3A%2F%2Fdoi.org%2F10.1145%252F322108.322118&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Lundy_Buskirk_2007-30"><span class="mw-cite-backlink"><b><a href="#cite_ref-Lundy_Buskirk_2007_30-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFLundyVan_Buskirk2007" class="citation journal cs1">Lundy, Thomas J.; Van Buskirk, James (2007). "A new matrix approach to real FFTs and convolutions of length 2<sup>k</sup>". <i><a href="/wiki/Computing_(journal)" title="Computing (journal)">Computing</a></i>. <b>80</b> (1): 23–45. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2Fs00607-007-0222-6">10.1007/s00607-007-0222-6</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:27296044">27296044</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Computing&rft.atitle=A+new+matrix+approach+to+real+FFTs+and+convolutions+of+length+2%3Csup%3Ek%3C%2Fsup%3E&rft.volume=80&rft.issue=1&rft.pages=23-45&rft.date=2007&rft_id=info%3Adoi%2F10.1007%2Fs00607-007-0222-6&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A27296044%23id-name%3DS2CID&rft.aulast=Lundy&rft.aufirst=Thomas+J.&rft.au=Van+Buskirk%2C+James&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Haynal_2011-31"><span class="mw-cite-backlink"><b><a href="#cite_ref-Haynal_2011_31-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFHaynalHaynal2011" class="citation journal cs1">Haynal, Steve; Haynal, Heidi (2011). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20120426031804/http://jsat.ewi.tudelft.nl/content/volume7/JSAT7_13_Haynal.pdf">"Generating and Searching Families of FFT Algorithms"</a> <span class="cs1-format">(PDF)</span>. <i>Journal on Satisfiability, Boolean Modeling and Computation</i>. <b>7</b> (4): 145–187. <a href="/wiki/ArXiv_(identifier)" class="mw-redirect" title="ArXiv (identifier)">arXiv</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://arxiv.org/abs/1103.5740">1103.5740</a></span>. <a href="/wiki/Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/2011arXiv1103.5740H">2011arXiv1103.5740H</a>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.3233%2FSAT190084">10.3233/SAT190084</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:173109">173109</a>. Archived from <a rel="nofollow" class="external text" href="http://jsat.ewi.tudelft.nl/content/volume7/JSAT7_13_Haynal.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 2012-04-26.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Journal+on+Satisfiability%2C+Boolean+Modeling+and+Computation&rft.atitle=Generating+and+Searching+Families+of+FFT+Algorithms&rft.volume=7&rft.issue=4&rft.pages=145-187&rft.date=2011&rft_id=info%3Aarxiv%2F1103.5740&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A173109%23id-name%3DS2CID&rft_id=info%3Adoi%2F10.3233%2FSAT190084&rft_id=info%3Abibcode%2F2011arXiv1103.5740H&rft.aulast=Haynal&rft.aufirst=Steve&rft.au=Haynal%2C+Heidi&rft_id=http%3A%2F%2Fjsat.ewi.tudelft.nl%2Fcontent%2Fvolume7%2FJSAT7_13_Haynal.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Duhamel_Vetterli_1990-32"><span class="mw-cite-backlink">^ <a href="#cite_ref-Duhamel_Vetterli_1990_32-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Duhamel_Vetterli_1990_32-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFDuhamelVetterli1990" class="citation journal cs1">Duhamel, Pierre; <a href="/wiki/Martin_Vetterli" title="Martin Vetterli">Vetterli, Martin</a> (1990). <a rel="nofollow" class="external text" href="http://infoscience.epfl.ch/record/59946">"Fast Fourier transforms: a tutorial review and a state of the art"</a>. <i>Signal Processing</i>. <b>19</b> (4): 259–299. <a href="/wiki/Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/1990SigPr..19..259D">1990SigPr..19..259D</a>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2F0165-1684%2890%2990158-U">10.1016/0165-1684(90)90158-U</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Signal+Processing&rft.atitle=Fast+Fourier+transforms%3A+a+tutorial+review+and+a+state+of+the+art&rft.volume=19&rft.issue=4&rft.pages=259-299&rft.date=1990&rft_id=info%3Adoi%2F10.1016%2F0165-1684%2890%2990158-U&rft_id=info%3Abibcode%2F1990SigPr..19..259D&rft.aulast=Duhamel&rft.aufirst=Pierre&rft.au=Vetterli%2C+Martin&rft_id=http%3A%2F%2Finfoscience.epfl.ch%2Frecord%2F59946&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Edelman_McCorquodale_Toledo_1999-33"><span class="mw-cite-backlink"><b><a href="#cite_ref-Edelman_McCorquodale_Toledo_1999_33-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFEdelmanMcCorquodaleToledo1999" class="citation journal cs1">Edelman, Alan; McCorquodale, Peter; Toledo, Sivan (1999). <a rel="nofollow" class="external text" href="http://www.cs.tau.ac.il/~stoledo/Bib/Pubs/pp97-fft.pdf">"The Future Fast Fourier Transform?"</a> <span class="cs1-format">(PDF)</span>. <i><a href="/wiki/SIAM_Journal_on_Scientific_Computing" title="SIAM Journal on Scientific Computing">SIAM Journal on Scientific Computing</a></i>. <b>20</b> (3): 1094–1114. <a href="/wiki/CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.54.9339">10.1.1.54.9339</a></span>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1137%2FS1064827597316266">10.1137/S1064827597316266</a>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20170705153832/http://www.cs.tau.ac.il/~stoledo/Bib/Pubs/pp97-fft.pdf">Archived</a> <span class="cs1-format">(PDF)</span> from the original on 2017-07-05.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=SIAM+Journal+on+Scientific+Computing&rft.atitle=The+Future+Fast+Fourier+Transform%3F&rft.volume=20&rft.issue=3&rft.pages=1094-1114&rft.date=1999&rft_id=https%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fsummary%3Fdoi%3D10.1.1.54.9339%23id-name%3DCiteSeerX&rft_id=info%3Adoi%2F10.1137%2FS1064827597316266&rft.aulast=Edelman&rft.aufirst=Alan&rft.au=McCorquodale%2C+Peter&rft.au=Toledo%2C+Sivan&rft_id=http%3A%2F%2Fwww.cs.tau.ac.il%2F~stoledo%2FBib%2FPubs%2Fpp97-fft.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Guo_Burrus_1996-34"><span class="mw-cite-backlink"><b><a href="#cite_ref-Guo_Burrus_1996_34-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFGuoBurrus1996" class="citation book cs1">Guo, Haitao; <a href="/wiki/Charles_Sidney_Burrus" class="mw-redirect" title="Charles Sidney Burrus">Burrus, Charles Sidney</a> (1996). "Fast approximate Fourier transform via wavelets transform". In Unser, Michael A.; Aldroubi, Akram; Laine, Andrew F. (eds.). <i>Wavelet Applications in Signal and Image Processing IV</i>. <a href="/wiki/Proceedings_of_SPIE" title="Proceedings of SPIE">Proceedings of SPIE</a>. Vol. 2825. pp. 250–259. <a href="/wiki/Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/1996SPIE.2825..250G">1996SPIE.2825..250G</a>. <a href="/wiki/CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.54.3984">10.1.1.54.3984</a></span>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1117%2F12.255236">10.1117/12.255236</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:120514955">120514955</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=Fast+approximate+Fourier+transform+via+wavelets+transform&rft.btitle=Wavelet+Applications+in+Signal+and+Image+Processing+IV&rft.series=Proceedings+of+SPIE&rft.pages=250-259&rft.date=1996&rft_id=https%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fsummary%3Fdoi%3D10.1.1.54.3984%23id-name%3DCiteSeerX&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A120514955%23id-name%3DS2CID&rft_id=info%3Adoi%2F10.1117%2F12.255236&rft_id=info%3Abibcode%2F1996SPIE.2825..250G&rft.aulast=Guo&rft.aufirst=Haitao&rft.au=Burrus%2C+Charles+Sidney&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Shentov_Mitra_Heute_Hossen_1995-35"><span class="mw-cite-backlink"><b><a href="#cite_ref-Shentov_Mitra_Heute_Hossen_1995_35-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFShentovMitraHeuteHossen1995" class="citation journal cs1">Shentov, Ognjan V.; Mitra, Sanjit K.; Heute, Ulrich; Hossen, Abdul N. (1995). "Subband DFT. I. Definition, interpretations and extensions". <i>Signal Processing</i>. <b>41</b> (3): 261–277. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2F0165-1684%2894%2900103-7">10.1016/0165-1684(94)00103-7</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Signal+Processing&rft.atitle=Subband+DFT.+I.+Definition%2C+interpretations+and+extensions&rft.volume=41&rft.issue=3&rft.pages=261-277&rft.date=1995&rft_id=info%3Adoi%2F10.1016%2F0165-1684%2894%2900103-7&rft.aulast=Shentov&rft.aufirst=Ognjan+V.&rft.au=Mitra%2C+Sanjit+K.&rft.au=Heute%2C+Ulrich&rft.au=Hossen%2C+Abdul+N.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Hassanieh_2012-36"><span class="mw-cite-backlink"><b><a href="#cite_ref-Hassanieh_2012_36-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFHassaniehIndykKatabiPrice2012" class="citation journal cs1">Hassanieh, Haitham; <a href="/wiki/Piotr_Indyk" title="Piotr Indyk">Indyk, Piotr</a>; Katabi, Dina; Price, Eric (January 2012). <a rel="nofollow" class="external text" href="https://www.mit.edu/~ecprice/papers/sparse-fft-soda.pdf">"Simple and Practical Algorithm for Sparse Fourier Transform"</a> <span class="cs1-format">(PDF)</span>. <i>ACM-SIAM Symposium on Discrete Algorithms</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20120304163958/http://www.mit.edu/~ecprice/papers/sparse-fft-soda.pdf">Archived</a> <span class="cs1-format">(PDF)</span> from the original on 2012-03-04.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=ACM-SIAM+Symposium+on+Discrete+Algorithms&rft.atitle=Simple+and+Practical+Algorithm+for+Sparse+Fourier+Transform&rft.date=2012-01&rft.aulast=Hassanieh&rft.aufirst=Haitham&rft.au=Indyk%2C+Piotr&rft.au=Katabi%2C+Dina&rft.au=Price%2C+Eric&rft_id=https%3A%2F%2Fwww.mit.edu%2F~ecprice%2Fpapers%2Fsparse-fft-soda.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span> (NB. See also the <a rel="nofollow" class="external text" href="http://groups.csail.mit.edu/netmit/sFFT/">sFFT Web Page</a>.)</span> </li> <li id="cite_note-Schatzman_1996-37"><span class="mw-cite-backlink"><b><a href="#cite_ref-Schatzman_1996_37-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFSchatzman1996" class="citation journal cs1">Schatzman, James C. (1996). <a rel="nofollow" class="external text" href="http://portal.acm.org/citation.cfm?id=240432">"Accuracy of the discrete Fourier transform and the fast Fourier transform"</a>. <i><a href="/wiki/SIAM_Journal_on_Scientific_Computing" title="SIAM Journal on Scientific Computing">SIAM Journal on Scientific Computing</a></i>. <b>17</b> (5): 1150–1166. <a href="/wiki/Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/1996SJSC...17.1150S">1996SJSC...17.1150S</a>. <a href="/wiki/CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.495.9184">10.1.1.495.9184</a></span>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1137%2Fs1064827593247023">10.1137/s1064827593247023</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=SIAM+Journal+on+Scientific+Computing&rft.atitle=Accuracy+of+the+discrete+Fourier+transform+and+the+fast+Fourier+transform&rft.volume=17&rft.issue=5&rft.pages=1150-1166&rft.date=1996&rft_id=https%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fsummary%3Fdoi%3D10.1.1.495.9184%23id-name%3DCiteSeerX&rft_id=info%3Adoi%2F10.1137%2Fs1064827593247023&rft_id=info%3Abibcode%2F1996SJSC...17.1150S&rft.aulast=Schatzman&rft.aufirst=James+C.&rft_id=http%3A%2F%2Fportal.acm.org%2Fcitation.cfm%3Fid%3D240432&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Welch_1969-38"><span class="mw-cite-backlink"><b><a href="#cite_ref-Welch_1969_38-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFWelch1969" class="citation journal cs1">Welch, Peter D. (1969). "A fixed-point fast Fourier transform error analysis". <i><a href="/wiki/IEEE_Transactions_on_Audio_and_Electroacoustics" class="mw-redirect" title="IEEE Transactions on Audio and Electroacoustics">IEEE Transactions on Audio and Electroacoustics</a></i>. <b>17</b> (2): 151–157. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FTAU.1969.1162035">10.1109/TAU.1969.1162035</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=IEEE+Transactions+on+Audio+and+Electroacoustics&rft.atitle=A+fixed-point+fast+Fourier+transform+error+analysis&rft.volume=17&rft.issue=2&rft.pages=151-157&rft.date=1969&rft_id=info%3Adoi%2F10.1109%2FTAU.1969.1162035&rft.aulast=Welch&rft.aufirst=Peter+D.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Ergün_1995-39"><span class="mw-cite-backlink"><b><a href="#cite_ref-Ergün_1995_39-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFErgün1995" class="citation book cs1"><a href="/wiki/Funda_Ergun" title="Funda Ergun">Ergün, Funda</a> (1995). "Testing multivariate linear functions". <i>Proceedings of the twenty-seventh annual ACM symposium on Theory of computing - STOC '95</i>. Kyoto, Japan. pp. 407–416. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F225058.225167">10.1145/225058.225167</a>. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-0897917186" title="Special:BookSources/978-0897917186"><bdi>978-0897917186</bdi></a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:15512806">15512806</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=Testing+multivariate+linear+functions&rft.btitle=Proceedings+of+the+twenty-seventh+annual+ACM+symposium+on+Theory+of+computing+-+STOC+%2795&rft.place=Kyoto%2C+Japan&rft.pages=407-416&rft.date=1995&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A15512806%23id-name%3DS2CID&rft_id=info%3Adoi%2F10.1145%2F225058.225167&rft.isbn=978-0897917186&rft.aulast=Erg%C3%BCn&rft.aufirst=Funda&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span><span class="cs1-maint citation-comment"><code class="cs1-code">{{<a href="/wiki/Template:Cite_book" title="Template:Cite book">cite book</a>}}</code>: CS1 maint: location missing publisher (<a href="/wiki/Category:CS1_maint:_location_missing_publisher" title="Category:CS1 maint: location missing publisher">link</a>)</span></span> </li> <li id="cite_note-Nussbaumer_1977-40"><span class="mw-cite-backlink"><b><a href="#cite_ref-Nussbaumer_1977_40-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFNussbaumer1977" class="citation journal cs1">Nussbaumer, Henri J. (1977). "Digital filtering using polynomial transforms". <i><a href="/wiki/Electronics_Letters" title="Electronics Letters">Electronics Letters</a></i>. <b>13</b> (13): 386–387. <a href="/wiki/Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/1977ElL....13..386N">1977ElL....13..386N</a>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1049%2Fel%3A19770280">10.1049/el:19770280</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Electronics+Letters&rft.atitle=Digital+filtering+using+polynomial+transforms&rft.volume=13&rft.issue=13&rft.pages=386-387&rft.date=1977&rft_id=info%3Adoi%2F10.1049%2Fel%3A19770280&rft_id=info%3Abibcode%2F1977ElL....13..386N&rft.aulast=Nussbaumer&rft.aufirst=Henri+J.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Mohlenkamp_1999-41"><span class="mw-cite-backlink"><b><a href="#cite_ref-Mohlenkamp_1999_41-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFMohlenkamp1999" class="citation journal cs1">Mohlenkamp, Martin J. (1999). <a rel="nofollow" class="external text" href="http://www.ohiouniversityfaculty.com/mohlenka/research/MOHLEN1999P.pdf">"A Fast Transform for Spherical Harmonics"</a> <span class="cs1-format">(PDF)</span>. <i>Journal of Fourier Analysis and Applications</i>. <b>5</b> (2–3): 159–184. <a href="/wiki/Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/1999JFAA....5..159M">1999JFAA....5..159M</a>. <a href="/wiki/CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.135.9830">10.1.1.135.9830</a></span>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2FBF01261607">10.1007/BF01261607</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:119482349">119482349</a>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20170506033135/http://ohiouniversityfaculty.com/mohlenka/research/MOHLEN1999P.pdf">Archived</a> <span class="cs1-format">(PDF)</span> from the original on 2017-05-06<span class="reference-accessdate">. Retrieved <span class="nowrap">2018-01-11</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Journal+of+Fourier+Analysis+and+Applications&rft.atitle=A+Fast+Transform+for+Spherical+Harmonics&rft.volume=5&rft.issue=2%E2%80%933&rft.pages=159-184&rft.date=1999&rft_id=https%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fsummary%3Fdoi%3D10.1.1.135.9830%23id-name%3DCiteSeerX&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A119482349%23id-name%3DS2CID&rft_id=info%3Adoi%2F10.1007%2FBF01261607&rft_id=info%3Abibcode%2F1999JFAA....5..159M&rft.aulast=Mohlenkamp&rft.aufirst=Martin+J.&rft_id=http%3A%2F%2Fwww.ohiouniversityfaculty.com%2Fmohlenka%2Fresearch%2FMOHLEN1999P.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-libftsh-42"><span class="mw-cite-backlink"><b><a href="#cite_ref-libftsh_42-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20100623034953/http://www.math.ohiou.edu/~mjm/research/libftsh.html">"libftsh library"</a>. Archived from <a rel="nofollow" class="external text" href="http://www.math.ohiou.edu/~mjm/research/libftsh.html">the original</a> on 2010-06-23<span class="reference-accessdate">. Retrieved <span class="nowrap">2007-01-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=libftsh+library&rft_id=http%3A%2F%2Fwww.math.ohiou.edu%2F~mjm%2Fresearch%2Flibftsh.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Rokhlin_Tygert_2006-43"><span class="mw-cite-backlink"><b><a href="#cite_ref-Rokhlin_Tygert_2006_43-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFRokhlinTygert2006" class="citation journal cs1">Rokhlin, Vladimir; Tygert, Mark (2006). <a rel="nofollow" class="external text" href="http://tygert.com/sph2.pdf">"Fast Algorithms for Spherical Harmonic Expansions"</a> <span class="cs1-format">(PDF)</span>. <i><a href="/wiki/SIAM_Journal_on_Scientific_Computing" title="SIAM Journal on Scientific Computing">SIAM Journal on Scientific Computing</a></i>. <b>27</b> (6): 1903–1928. <a href="/wiki/Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/2006SJSC...27.1903R">2006SJSC...27.1903R</a>. <a href="/wiki/CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.125.7415">10.1.1.125.7415</a></span>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1137%2F050623073">10.1137/050623073</a>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20141217212000/http://tygert.com/sph2.pdf">Archived</a> <span class="cs1-format">(PDF)</span> from the original on 2014-12-17<span class="reference-accessdate">. Retrieved <span class="nowrap">2014-09-18</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=SIAM+Journal+on+Scientific+Computing&rft.atitle=Fast+Algorithms+for+Spherical+Harmonic+Expansions&rft.volume=27&rft.issue=6&rft.pages=1903-1928&rft.date=2006&rft_id=https%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fsummary%3Fdoi%3D10.1.1.125.7415%23id-name%3DCiteSeerX&rft_id=info%3Adoi%2F10.1137%2F050623073&rft_id=info%3Abibcode%2F2006SJSC...27.1903R&rft.aulast=Rokhlin&rft.aufirst=Vladimir&rft.au=Tygert%2C+Mark&rft_id=http%3A%2F%2Ftygert.com%2Fsph2.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span> <a rel="nofollow" class="external autonumber" href="http://www.cs.yale.edu/publications/techreports/tr1309.pdf">[1]</a></span> </li> <li id="cite_note-Potts_Steidl_Tasche_2001-44"><span class="mw-cite-backlink"><b><a href="#cite_ref-Potts_Steidl_Tasche_2001_44-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFPottsSteidlTasche2001" class="citation book cs1">Potts, Daniel; <a href="/wiki/Gabriele_Steidl" title="Gabriele Steidl">Steidl, Gabriele</a>; Tasche, Manfred (2001). <a rel="nofollow" class="external text" href="http://www.tu-chemnitz.de/~potts/paper/ndft.pdf">"Fast Fourier transforms for nonequispaced data: A tutorial"</a> <span class="cs1-format">(PDF)</span>. In Benedetto, J. J.; Ferreira, P. (eds.). <i>Modern Sampling Theory: Mathematics and Applications</i>. <a href="/wiki/Birkh%C3%A4user" title="Birkhäuser">Birkhäuser</a>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20070926222858/http://www.tu-chemnitz.de/~potts/paper/ndft.pdf">Archived</a> <span class="cs1-format">(PDF)</span> from the original on 2007-09-26.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=Fast+Fourier+transforms+for+nonequispaced+data%3A+A+tutorial&rft.btitle=Modern+Sampling+Theory%3A+Mathematics+and+Applications&rft.pub=Birkh%C3%A4user&rft.date=2001&rft.aulast=Potts&rft.aufirst=Daniel&rft.au=Steidl%2C+Gabriele&rft.au=Tasche%2C+Manfred&rft_id=http%3A%2F%2Fwww.tu-chemnitz.de%2F~potts%2Fpaper%2Fndft.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-45"><span class="mw-cite-backlink"><b><a href="#cite_ref-45">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFBurgess2014" class="citation book cs1">Burgess, Richard James (2014). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=qMKiAwAAQBAJ"><i>The History of Music Production</i></a>. Oxford University Press. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-0199357178" title="Special:BookSources/978-0199357178"><bdi>978-0199357178</bdi></a><span class="reference-accessdate">. Retrieved <span class="nowrap">1 August</span> 2019</span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=The+History+of+Music+Production&rft.pub=Oxford+University+Press&rft.date=2014&rft.isbn=978-0199357178&rft.aulast=Burgess&rft.aufirst=Richard+James&rft_id=https%3A%2F%2Fbooks.google.com%2Fbooks%3Fid%3DqMKiAwAAQBAJ&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Chu_George_1999-46"><span class="mw-cite-backlink"><b><a href="#cite_ref-Chu_George_1999_46-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFChuGeorge1999" class="citation book cs1">Chu, Eleanor; George, Alan (1999-11-11) [1999-11-11]. "Chapter 16". <i>Inside the FFT Black Box: Serial and Parallel Fast Fourier Transform Algorithms</i>. <a href="/wiki/CRC_Press" title="CRC Press">CRC Press</a>. pp. 153–168. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-1-42004996-1" title="Special:BookSources/978-1-42004996-1"><bdi>978-1-42004996-1</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=Chapter+16&rft.btitle=Inside+the+FFT+Black+Box%3A+Serial+and+Parallel+Fast+Fourier+Transform+Algorithms&rft.pages=153-168&rft.pub=CRC+Press&rft.date=1999-11-11&rft.isbn=978-1-42004996-1&rft.aulast=Chu&rft.aufirst=Eleanor&rft.au=George%2C+Alan&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Fernandez-de-Cossio_2012-47"><span class="mw-cite-backlink"><b><a href="#cite_ref-Fernandez-de-Cossio_2012_47-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFFernandez-de-Cossio_DiazFernandez-de-Cossio2012" class="citation journal cs1">Fernandez-de-Cossio Diaz, Jorge; Fernandez-de-Cossio, Jorge (2012-08-08). "Computation of Isotopic Peak Center-Mass Distribution by Fourier Transform". <i>Analytical Chemistry</i>. <b>84</b> (16): 7052–7056. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1021%2Fac301296a">10.1021/ac301296a</a>. <a href="/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0003-2700">0003-2700</a>. <a href="/wiki/PMID_(identifier)" class="mw-redirect" title="PMID (identifier)">PMID</a> <a rel="nofollow" class="external text" href="https://pubmed.ncbi.nlm.nih.gov/22873736">22873736</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Analytical+Chemistry&rft.atitle=Computation+of+Isotopic+Peak+Center-Mass+Distribution+by+Fourier+Transform&rft.volume=84&rft.issue=16&rft.pages=7052-7056&rft.date=2012-08-08&rft.issn=0003-2700&rft_id=info%3Apmid%2F22873736&rft_id=info%3Adoi%2F10.1021%2Fac301296a&rft.aulast=Fernandez-de-Cossio+Diaz&rft.aufirst=Jorge&rft.au=Fernandez-de-Cossio%2C+Jorge&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-MinennaJBF-48"><span class="mw-cite-backlink"><b><a href="#cite_ref-MinennaJBF_48-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFMinenna2008" class="citation journal cs1">Minenna, Marcello (October 2008). "A revisited and stable Fourier transform method for affine jump diffusion models". <i>Journal of Banking and Finance</i>. <b>32</b> (10): 2064–2075. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.jbankfin.2007.05.019">10.1016/j.jbankfin.2007.05.019</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Journal+of+Banking+and+Finance&rft.atitle=A+revisited+and+stable+Fourier+transform+method+for+affine+jump+diffusion+models&rft.volume=32&rft.issue=10&rft.pages=2064-2075&rft.date=2008-10&rft_id=info%3Adoi%2F10.1016%2Fj.jbankfin.2007.05.019&rft.aulast=Minenna&rft.aufirst=Marcello&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Cormen_Nicol_1998-49"><span class="mw-cite-backlink"><b><a href="#cite_ref-Cormen_Nicol_1998_49-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFCormenNicol1998" class="citation journal cs1">Cormen, Thomas H.; Nicol, David M. (1998). "Performing out-of-core FFTs on parallel disk systems". <i>Parallel Computing</i>. <b>24</b> (1): 5–20. <a href="/wiki/CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.44.8212">10.1.1.44.8212</a></span>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2FS0167-8191%2897%2900114-2">10.1016/S0167-8191(97)00114-2</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:14996854">14996854</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Parallel+Computing&rft.atitle=Performing+out-of-core+FFTs+on+parallel+disk+systems&rft.volume=24&rft.issue=1&rft.pages=5-20&rft.date=1998&rft_id=https%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fsummary%3Fdoi%3D10.1.1.44.8212%23id-name%3DCiteSeerX&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A14996854%23id-name%3DS2CID&rft_id=info%3Adoi%2F10.1016%2FS0167-8191%2897%2900114-2&rft.aulast=Cormen&rft.aufirst=Thomas+H.&rft.au=Nicol%2C+David+M.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Dutt_Rokhlin_1993-50"><span class="mw-cite-backlink"><b><a href="#cite_ref-Dutt_Rokhlin_1993_50-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFDuttRokhlin1993" class="citation journal cs1">Dutt, Alok; Rokhlin, Vladimir (1993-11-01). "Fast Fourier Transforms for Nonequispaced Data". <i><a href="/wiki/SIAM_Journal_on_Scientific_Computing" title="SIAM Journal on Scientific Computing">SIAM Journal on Scientific Computing</a></i>. <b>14</b> (6): 1368–1393. <a href="/wiki/Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/1993SJSC...14.1368D">1993SJSC...14.1368D</a>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1137%2F0914081">10.1137/0914081</a>. <a href="/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/1064-8275">1064-8275</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=SIAM+Journal+on+Scientific+Computing&rft.atitle=Fast+Fourier+Transforms+for+Nonequispaced+Data&rft.volume=14&rft.issue=6&rft.pages=1368-1393&rft.date=1993-11-01&rft.issn=1064-8275&rft_id=info%3Adoi%2F10.1137%2F0914081&rft_id=info%3Abibcode%2F1993SJSC...14.1368D&rft.aulast=Dutt&rft.aufirst=Alok&rft.au=Rokhlin%2C+Vladimir&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Rockmore_2004-51"><span class="mw-cite-backlink"><b><a href="#cite_ref-Rockmore_2004_51-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFRockmore2004" class="citation book cs1">Rockmore, Daniel N. (2004). "Recent Progress and Applications in Group FFTs". In Byrnes, Jim (ed.). <i>Computational Noncommutative Algebra and Applications</i>. NATO Science Series II: Mathematics, Physics and Chemistry. Vol. 136. Springer Netherlands. pp. 227–254. <a href="/wiki/CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.324.4700">10.1.1.324.4700</a></span>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2F1-4020-2307-3_9">10.1007/1-4020-2307-3_9</a>. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-1-4020-1982-1" title="Special:BookSources/978-1-4020-1982-1"><bdi>978-1-4020-1982-1</bdi></a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:1412268">1412268</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=Recent+Progress+and+Applications+in+Group+FFTs&rft.btitle=Computational+Noncommutative+Algebra+and+Applications&rft.series=NATO+Science+Series+II%3A+Mathematics%2C+Physics+and+Chemistry&rft.pages=227-254&rft.pub=Springer+Netherlands&rft.date=2004&rft_id=https%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fsummary%3Fdoi%3D10.1.1.324.4700%23id-name%3DCiteSeerX&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A1412268%23id-name%3DS2CID&rft_id=info%3Adoi%2F10.1007%2F1-4020-2307-3_9&rft.isbn=978-1-4020-1982-1&rft.aulast=Rockmore&rft.aufirst=Daniel+N.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-52"><span class="mw-cite-backlink"><b><a href="#cite_ref-52">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFRyoKazumitsuRyoko2020" class="citation journal cs1">Ryo, Asaka; Kazumitsu, Sakai; Ryoko, Yahagi (2020). <a rel="nofollow" class="external text" href="https://link.springer.com/article/10.1007/s11128-020-02776-5">"Quantum circuit for the fast Fourier transform"</a>. <i>Quantum Information Processing</i>. <b>19</b> (277): 277. <a href="/wiki/ArXiv_(identifier)" class="mw-redirect" title="ArXiv (identifier)">arXiv</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://arxiv.org/abs/1911.03055">1911.03055</a></span>. <a href="/wiki/Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/2020QuIP...19..277A">2020QuIP...19..277A</a>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1007%2Fs11128-020-02776-5">10.1007/s11128-020-02776-5</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:207847474">207847474</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=Quantum+Information+Processing&rft.atitle=Quantum+circuit+for+the+fast+Fourier+transform&rft.volume=19&rft.issue=277&rft.pages=277&rft.date=2020&rft_id=info%3Aarxiv%2F1911.03055&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A207847474%23id-name%3DS2CID&rft_id=info%3Adoi%2F10.1007%2Fs11128-020-02776-5&rft_id=info%3Abibcode%2F2020QuIP...19..277A&rft.aulast=Ryo&rft.aufirst=Asaka&rft.au=Kazumitsu%2C+Sakai&rft.au=Ryoko%2C+Yahagi&rft_id=https%3A%2F%2Flink.springer.com%2Farticle%2F10.1007%2Fs11128-020-02776-5&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-Arm_Performance_Libraries-53"><span class="mw-cite-backlink"><b><a href="#cite_ref-Arm_Performance_Libraries_53-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.arm.com/products/development-tools/server-and-hpc/allinea-studio/performance-libraries">"Arm Performance Libraries"</a>. <a href="/wiki/Arm" title="Arm">Arm</a>. 2020<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-12-16</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Arm+Performance+Libraries&rft.pub=Arm&rft.date=2020&rft_id=https%3A%2F%2Fwww.arm.com%2Fproducts%2Fdevelopment-tools%2Fserver-and-hpc%2Fallinea-studio%2Fperformance-libraries&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> <li id="cite_note-54"><span class="mw-cite-backlink"><b><a href="#cite_ref-54">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://community.vcvrack.com/t/complete-list-of-c-c-fft-libraries/9153">"Complete list of C/C++ FFT libraries"</a>. <i>VCV Community</i>. 2020-04-05<span class="reference-accessdate">. Retrieved <span class="nowrap">2021-03-03</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=VCV+Community&rft.atitle=Complete+list+of+C%2FC%2B%2B+FFT+libraries&rft.date=2020-04-05&rft_id=https%3A%2F%2Fcommunity.vcvrack.com%2Ft%2Fcomplete-list-of-c-c-fft-libraries%2F9153&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></span> </li> </ol></div></div> <div class="mw-heading mw-heading2"><h2 id="Further_reading">Further reading</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Fast_Fourier_transform&action=edit&section=19" title="Edit section: Further reading"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFBrigham1974" class="citation book cs1">Brigham, Elbert Oran (1974). <i>The fast Fourier transform</i> (Nachdr. ed.). Englewood Cliffs, N.J: <a href="/wiki/Prentice-Hall" class="mw-redirect" title="Prentice-Hall">Prentice-Hall</a>. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-0-13-307496-3" title="Special:BookSources/978-0-13-307496-3"><bdi>978-0-13-307496-3</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=The+fast+Fourier+transform&rft.place=Englewood+Cliffs%2C+N.J&rft.edition=Nachdr.&rft.pub=Prentice-Hall&rft.date=1974&rft.isbn=978-0-13-307496-3&rft.aulast=Brigham&rft.aufirst=Elbert+Oran&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFCormenLeisersonRivestStein2001" class="citation book cs1"><a href="/wiki/Thomas_H._Cormen" title="Thomas H. Cormen">Cormen, Thomas H.</a>; <a href="/wiki/Charles_E._Leiserson" title="Charles E. Leiserson">Leiserson, Charles E.</a>; <a href="/wiki/Ronald_L._Rivest" class="mw-redirect" title="Ronald L. Rivest">Rivest, Ronald L.</a>; <a href="/wiki/Clifford_Stein" title="Clifford Stein">Stein, Clifford</a> (2001). "Chapter 30: Polynomials and the FFT". <a href="/wiki/Introduction_to_Algorithms" title="Introduction to Algorithms"><i>Introduction to Algorithms</i></a> (2nd. ed.). Cambridge (Mass.): <a href="/wiki/MIT_Press" title="MIT Press">MIT Press</a>. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-0-262-03293-3" title="Special:BookSources/978-0-262-03293-3"><bdi>978-0-262-03293-3</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=Chapter+30%3A+Polynomials+and+the+FFT&rft.btitle=Introduction+to+Algorithms&rft.place=Cambridge+%28Mass.%29&rft.edition=2nd.&rft.pub=MIT+Press&rft.date=2001&rft.isbn=978-0-262-03293-3&rft.aulast=Cormen&rft.aufirst=Thomas+H.&rft.au=Leiserson%2C+Charles+E.&rft.au=Rivest%2C+Ronald+L.&rft.au=Stein%2C+Clifford&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFElliottRao1982" class="citation book cs1">Elliott, Douglas F.; <a href="/wiki/K._R._Rao" title="K. R. Rao">Rao, K. Ramamohan</a> (1982). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=DXrNCgAAQBAJ"><i>Fast transforms: algorithms, analyses, applications</i></a>. New York: <a href="/wiki/Academic_Press" title="Academic Press">Academic Press</a>. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-0-12-237080-9" title="Special:BookSources/978-0-12-237080-9"><bdi>978-0-12-237080-9</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=Fast+transforms%3A+algorithms%2C+analyses%2C+applications&rft.place=New+York&rft.pub=Academic+Press&rft.date=1982&rft.isbn=978-0-12-237080-9&rft.aulast=Elliott&rft.aufirst=Douglas+F.&rft.au=Rao%2C+K.+Ramamohan&rft_id=https%3A%2F%2Fbooks.google.com%2Fbooks%3Fid%3DDXrNCgAAQBAJ&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFGuoSittonBurrus1994" class="citation book cs1">Guo, H.; Sitton, G.A.; <a href="/wiki/Charles_Sidney_Burrus" class="mw-redirect" title="Charles Sidney Burrus">Burrus, C.S.</a> (1994). "The quick discrete Fourier transform". <a rel="nofollow" class="external text" href="https://ieeexplore.ieee.org/document/389994"><i>Proceedings of ICASSP '94. IEEE International Conference on Acoustics, Speech and Signal Processing</i></a>. Vol. iii. <a href="/wiki/IEEE" class="mw-redirect" title="IEEE">IEEE</a>. pp. III/445–III/448. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FICASSP.1994.389994">10.1109/ICASSP.1994.389994</a>. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-0-7803-1775-8" title="Special:BookSources/978-0-7803-1775-8"><bdi>978-0-7803-1775-8</bdi></a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:42639206">42639206</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=The+quick+discrete+Fourier+transform&rft.btitle=Proceedings+of+ICASSP+%2794.+IEEE+International+Conference+on+Acoustics%2C+Speech+and+Signal+Processing&rft.pages=III%2F445-III%2F448&rft.pub=IEEE&rft.date=1994&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A42639206%23id-name%3DS2CID&rft_id=info%3Adoi%2F10.1109%2FICASSP.1994.389994&rft.isbn=978-0-7803-1775-8&rft.aulast=Guo&rft.aufirst=H.&rft.au=Sitton%2C+G.A.&rft.au=Burrus%2C+C.S.&rft_id=https%3A%2F%2Fieeexplore.ieee.org%2Fdocument%2F389994&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFJohnsonFrigo2007" class="citation journal cs1">Johnson, Steven G.; Frigo, Matteo (January 2007). <a rel="nofollow" class="external text" href="http://www.fftw.org/newsplit.pdf">"A Modified Split-Radix FFT With Fewer Arithmetic Operations"</a> <span class="cs1-format">(PDF)</span>. <i>IEEE Transactions on Signal Processing</i>. <b>55</b> (1): 111–119. <a href="/wiki/Bibcode_(identifier)" class="mw-redirect" title="Bibcode (identifier)">Bibcode</a>:<a rel="nofollow" class="external text" href="https://ui.adsabs.harvard.edu/abs/2007ITSP...55..111J">2007ITSP...55..111J</a>. <a href="/wiki/CiteSeerX_(identifier)" class="mw-redirect" title="CiteSeerX (identifier)">CiteSeerX</a> <span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.582.5497">10.1.1.582.5497</a></span>. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FTSP.2006.882087">10.1109/TSP.2006.882087</a>. <a href="/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/1053-587X">1053-587X</a>. <a href="/wiki/S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:14772428">14772428</a>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20050526050219/http://www.fftw.org/newsplit.pdf">Archived</a> <span class="cs1-format">(PDF)</span> from the original on 2005-05-26.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=IEEE+Transactions+on+Signal+Processing&rft.atitle=A+Modified+Split-Radix+FFT+With+Fewer+Arithmetic+Operations&rft.volume=55&rft.issue=1&rft.pages=111-119&rft.date=2007-01&rft_id=https%3A%2F%2Fapi.semanticscholar.org%2FCorpusID%3A14772428%23id-name%3DS2CID&rft_id=info%3Abibcode%2F2007ITSP...55..111J&rft_id=https%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fsummary%3Fdoi%3D10.1.1.582.5497%23id-name%3DCiteSeerX&rft.issn=1053-587X&rft_id=info%3Adoi%2F10.1109%2FTSP.2006.882087&rft.aulast=Johnson&rft.aufirst=Steven+G.&rft.au=Frigo%2C+Matteo&rft_id=http%3A%2F%2Fwww.fftw.org%2Fnewsplit.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFPressTeukolskyVetterlingFlannery2007" class="citation book cs1"><a href="/wiki/William_H._Press" title="William H. Press">Press, William H.</a>; <a href="/wiki/Saul_Teukolsky" title="Saul Teukolsky">Teukolsky, Saul A.</a>; Vetterling, William T.; <a href="/wiki/Brian_P._Flannery" title="Brian P. Flannery">Flannery, Brian P.</a> (2007). "Chapter 12. Fast Fourier Transform". <a rel="nofollow" class="external text" href="https://faculty.kfupm.edu.sa/phys/aanaqvi/Numerical%20Recipes-The%20Art%20of%20Scientific%20Computing%203rd%20Edition%20(Press%20et%20al).pdf"><i>Numerical recipes: the art of scientific computing</i></a> <span class="cs1-format">(PDF)</span>. <a href="/wiki/Numerical_Recipes" title="Numerical Recipes">Numerical Recipes</a> (3. ed.). Cambridge: <a href="/wiki/Cambridge_University_Press" title="Cambridge University Press">Cambridge University Press</a>. pp. 600–639. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-0-521-88068-8" title="Special:BookSources/978-0-521-88068-8"><bdi>978-0-521-88068-8</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=bookitem&rft.atitle=Chapter+12.+Fast+Fourier+Transform&rft.btitle=Numerical+recipes%3A+the+art+of+scientific+computing&rft.place=Cambridge&rft.series=Numerical+Recipes&rft.pages=600-639&rft.edition=3.&rft.pub=Cambridge+University+Press&rft.date=2007&rft.isbn=978-0-521-88068-8&rft.aulast=Press&rft.aufirst=William+H.&rft.au=Teukolsky%2C+Saul+A.&rft.au=Vetterling%2C+William+T.&rft.au=Flannery%2C+Brian+P.&rft_id=https%3A%2F%2Ffaculty.kfupm.edu.sa%2Fphys%2Faanaqvi%2FNumerical%2520Recipes-The%2520Art%2520of%2520Scientific%2520Computing%25203rd%2520Edition%2520%28Press%2520et%2520al%29.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFSingleton1969" class="citation journal cs1">Singleton, R. (June 1969). <a rel="nofollow" class="external text" href="https://ieeexplore.ieee.org/document/1162040">"A short bibliography on the fast Fourier transform"</a>. <i><a href="/wiki/IEEE_Transactions_on_Audio_and_Electroacoustics" class="mw-redirect" title="IEEE Transactions on Audio and Electroacoustics">IEEE Transactions on Audio and Electroacoustics</a></i>. <b>17</b> (2): 166–169. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2FTAU.1969.1162040">10.1109/TAU.1969.1162040</a>. <a href="/wiki/ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0018-9278">0018-9278</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.jtitle=IEEE+Transactions+on+Audio+and+Electroacoustics&rft.atitle=A+short+bibliography+on+the+fast+Fourier+transform&rft.volume=17&rft.issue=2&rft.pages=166-169&rft.date=1969-06&rft_id=info%3Adoi%2F10.1109%2FTAU.1969.1162040&rft.issn=0018-9278&rft.aulast=Singleton&rft.aufirst=R.&rft_id=https%3A%2F%2Fieeexplore.ieee.org%2Fdocument%2F1162040&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span> (NB. Contains extensive bibliography.)</li> <li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFPrestini2004" class="citation book cs1">Prestini, Elena (2004). <a rel="nofollow" class="external text" href="https://books.google.com/books?id=fye--TBu4T0C"><i>The evolution of applied harmonic analysis: models of the real world</i></a>. Applied and numerical harmonic analysis. Boston; Berlin: <a href="/wiki/Springer_Media" class="mw-redirect" title="Springer Media">Springer Media</a>. Section 3.10: Gauss and the asteroids: history of the FFT. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <a href="/wiki/Special:BookSources/978-0-8176-4125-2" title="Special:BookSources/978-0-8176-4125-2"><bdi>978-0-8176-4125-2</bdi></a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.btitle=The+evolution+of+applied+harmonic+analysis%3A+models+of+the+real+world&rft.place=Boston%3B+Berlin&rft.series=Applied+and+numerical+harmonic+analysis&rft.pages=Section+3.10%3A+Gauss+and+the+asteroids%3A+history+of+the+FFT&rft.pub=Springer+Media&rft.date=2004&rft.isbn=978-0-8176-4125-2&rft.aulast=Prestini&rft.aufirst=Elena&rft_id=https%3A%2F%2Fbooks.google.com%2Fbooks%3Fid%3Dfye--TBu4T0C&rfr_id=info%3Asid%2Fen.wikipedia.org%3AFast+Fourier+transform" class="Z3988"></span></li></ul> <div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Fast_Fourier_transform&action=edit&section=20" title="Edit section: External links"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a rel="nofollow" class="external text" href="http://www.cs.pitt.edu/~kirk/cs1501/animations/FFT.html">Fast Fourier Transform for Polynomial Multiplication</a> –  fast Fourier algorithm</li> <li><a rel="nofollow" class="external text" href="http://www.librow.com/articles/article-10">Fast Fourier transform — FFT</a> –  FFT programming in C++ –  the Cooley–Tukey algorithm</li> <li><a rel="nofollow" class="external text" href="https://www.jjj.de/fxt/">Online documentation, links, book, and code</a></li> <li>Sri Welaratna, "<a rel="nofollow" class="external text" href="http://www.dataphysics.com/30_Years_of_FFT_Analyzers_by_Sri_Welaratna.pdf">Thirty years of FFT analyzers</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20140112235745/http://www.dataphysics.com/30_Years_of_FFT_Analyzers_by_Sri_Welaratna.pdf">Archived</a> 2014-01-12 at the <a href="/wiki/Wayback_Machine" title="Wayback Machine">Wayback Machine</a>", <i>Sound and Vibration</i> (January 1997, 30th anniversary issue) –  a historical review of hardware FFT devices</li> <li><a rel="nofollow" class="external text" href="http://www.alglib.net/fasttransforms/fft.php">ALGLIB FFT Code</a> –  a dual/GPL-licensed multilanguage (VBA, C++, Pascal, etc.) numerical analysis and data processing library</li> <li><a rel="nofollow" class="external text" href="http://groups.csail.mit.edu/netmit/sFFT/">SFFT: Sparse Fast Fourier Transform</a> –  MIT's sparse (sub-linear time) FFT algorithm, sFFT, and implementation</li> <li><a rel="nofollow" class="external text" href="https://web.archive.org/web/20130928020959/http://www.borgdesign.ro/fft.zip">VB6 FFT</a> –  a VB6 optimized library implementation with source code</li> <li><a rel="nofollow" class="external text" href="https://www.karlsims.com/fft.html">Interactive FFT Tutorial</a> –  a visual interactive intro to Fourier transforms and FFT methods</li> <li><a rel="nofollow" class="external text" href="https://medium.com/@fischerbach/introduction-to-fourier-analysis-of-time-series-42151703524a">Introduction to Fourier analysis of time series</a> –  tutorial how to use of the Fourier transform in time series analysis</li></ul> <div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}</style><style data-mw-deduplicate="TemplateStyles:r1236075235">.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}</style></div><div role="navigation" class="navbox authority-control" aria-label="Navbox" style="padding:3px"><table class="nowraplinks hlist navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Help:Authority_control" title="Help:Authority control">Authority control databases</a>: National <span class="mw-valign-text-top noprint" typeof="mw:File/Frameless"><a href="https://www.wikidata.org/wiki/Q623950#identifiers" title="Edit this at Wikidata"><img alt="Edit this at Wikidata" src="//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png" decoding="async" width="10" height="10" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/15px-OOjs_UI_icon_edit-ltr-progressive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/20px-OOjs_UI_icon_edit-ltr-progressive.svg.png 2x" data-file-width="20" data-file-height="20" /></a></span></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"><ul><li><span class="uid"><a rel="nofollow" class="external text" href="https://d-nb.info/gnd/4136070-9">Germany</a></span></li></ul></div></td></tr></tbody></table></div> <!-- NewPP limit report Parsed by mw‐api‐ext.codfw.main‐75c5757d46‐nr8h7 Cached time: 20241127102945 Cache expiry: 2592000 Reduced expiry: false Complications: [vary‐revision‐sha1, show‐toc] CPU time usage: 0.810 seconds Real time usage: 1.033 seconds Preprocessor visited node count: 5713/1000000 Post‐expand include size: 165774/2097152 bytes Template argument size: 4018/2097152 bytes Highest expansion depth: 12/100 Expensive parser function count: 11/500 Unstrip recursion depth: 1/20 Unstrip post‐expand size: 243066/5000000 bytes Lua time usage: 0.449/10.000 seconds Lua memory usage: 6387290/52428800 bytes Number of Wikibase entities loaded: 1/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 741.400 1 -total 52.43% 388.712 1 Template:Reflist 35.22% 261.145 41 Template:Cite_journal 10.50% 77.883 18 Template:Cite_book 9.15% 67.851 1 Template:Authority_control 9.02% 66.843 1 Template:Short_description 6.08% 45.051 2 Template:Pagetype 5.63% 41.746 1 Template:Unreferenced_section 5.35% 39.702 1 Template:Unreferenced 5.11% 37.894 1 Template:Ambox --> <!-- Saved in parser cache with key enwiki:pcache:idhash:11512-0!canonical and timestamp 20241127103000 and revision id 1259841024. Rendering was triggered because: edit-page --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Retrieved from "<a dir="ltr" href="https://en.wikipedia.org/w/index.php?title=Fast_Fourier_transform&oldid=1259841024">https://en.wikipedia.org/w/index.php?title=Fast_Fourier_transform&oldid=1259841024</a>"</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Help:Category" title="Help:Category">Categories</a>: <ul><li><a href="/wiki/Category:FFT_algorithms" title="Category:FFT algorithms">FFT algorithms</a></li><li><a href="/wiki/Category:Digital_signal_processing" title="Category:Digital signal processing">Digital signal processing</a></li><li><a href="/wiki/Category:Discrete_transforms" title="Category:Discrete transforms">Discrete transforms</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Hidden categories: <ul><li><a href="/wiki/Category:CS1_Latin-language_sources_(la)" title="Category:CS1 Latin-language sources (la)">CS1 Latin-language sources (la)</a></li><li><a href="/wiki/Category:CS1_German-language_sources_(de)" title="Category:CS1 German-language sources (de)">CS1 German-language sources (de)</a></li><li><a href="/wiki/Category:CS1_maint:_location_missing_publisher" title="Category:CS1 maint: location missing publisher">CS1 maint: location missing publisher</a></li><li><a href="/wiki/Category:CS1:_long_volume_value" title="Category:CS1: long volume value">CS1: long volume value</a></li><li><a href="/wiki/Category:Articles_with_short_description" title="Category:Articles with short description">Articles with short description</a></li><li><a href="/wiki/Category:Short_description_is_different_from_Wikidata" title="Category:Short description is different from Wikidata">Short description is different from Wikidata</a></li><li><a href="/wiki/Category:Use_American_English_from_March_2019" title="Category:Use American English from March 2019">Use American English from March 2019</a></li><li><a href="/wiki/Category:All_Wikipedia_articles_written_in_American_English" title="Category:All Wikipedia articles written in American English">All Wikipedia articles written in American English</a></li><li><a href="/wiki/Category:Articles_needing_additional_references_from_November_2024" title="Category:Articles needing additional references from November 2024">Articles needing additional references from November 2024</a></li><li><a href="/wiki/Category:All_articles_needing_additional_references" title="Category:All articles needing additional references">All articles needing additional references</a></li><li><a href="/wiki/Category:Webarchive_template_wayback_links" title="Category:Webarchive template wayback links">Webarchive template wayback links</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> This page was last edited on 27 November 2024, at 10:29<span class="anonymous-show"> (UTC)</span>.</li> <li id="footer-info-copyright">Text is available under the <a href="/wiki/Wikipedia:Text_of_the_Creative_Commons_Attribution-ShareAlike_4.0_International_License" title="Wikipedia:Text of the Creative Commons Attribution-ShareAlike 4.0 International License">Creative Commons Attribution-ShareAlike 4.0 License</a>; additional terms may apply. By using this site, you agree to the <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use" class="extiw" title="foundation:Special:MyLanguage/Policy:Terms of Use">Terms of Use</a> and <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy" class="extiw" title="foundation:Special:MyLanguage/Policy:Privacy policy">Privacy Policy</a>. Wikipedia® is a registered trademark of the <a rel="nofollow" class="external text" href="https://wikimediafoundation.org/">Wikimedia Foundation, Inc.</a>, a non-profit organization.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy policy</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:About">About Wikipedia</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:General_disclaimer">Disclaimers</a></li> <li id="footer-places-contact"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us">Contact Wikipedia</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Developers</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/en.wikipedia.org">Statistics</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> <li id="footer-places-mobileview"><a href="//en.m.wikipedia.org/w/index.php?title=Fast_Fourier_transform&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-669b4ddb54-8nhs6","wgBackendResponseTime":155,"wgPageParseReport":{"limitreport":{"cputime":"0.810","walltime":"1.033","ppvisitednodes":{"value":5713,"limit":1000000},"postexpandincludesize":{"value":165774,"limit":2097152},"templateargumentsize":{"value":4018,"limit":2097152},"expansiondepth":{"value":12,"limit":100},"expensivefunctioncount":{"value":11,"limit":500},"unstrip-depth":{"value":1,"limit":20},"unstrip-size":{"value":243066,"limit":5000000},"entityaccesscount":{"value":1,"limit":400},"timingprofile":["100.00% 741.400 1 -total"," 52.43% 388.712 1 Template:Reflist"," 35.22% 261.145 41 Template:Cite_journal"," 10.50% 77.883 18 Template:Cite_book"," 9.15% 67.851 1 Template:Authority_control"," 9.02% 66.843 1 Template:Short_description"," 6.08% 45.051 2 Template:Pagetype"," 5.63% 41.746 1 Template:Unreferenced_section"," 5.35% 39.702 1 Template:Unreferenced"," 5.11% 37.894 1 Template:Ambox"]},"scribunto":{"limitreport-timeusage":{"value":"0.449","limit":"10.000"},"limitreport-memusage":{"value":6387290,"limit":52428800}},"cachereport":{"origin":"mw-api-ext.codfw.main-75c5757d46-nr8h7","timestamp":"20241127102945","ttl":2592000,"transientcontent":false}}});});</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"Fast Fourier transform","url":"https:\/\/en.wikipedia.org\/wiki\/Fast_Fourier_transform","sameAs":"http:\/\/www.wikidata.org\/entity\/Q623950","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q623950","author":{"@type":"Organization","name":"Contributors to Wikimedia projects"},"publisher":{"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":{"@type":"ImageObject","url":"https:\/\/www.wikimedia.org\/static\/images\/wmf-hor-googpub.png"}},"datePublished":"2002-02-25T15:51:15Z","dateModified":"2024-11-27T10:29:44Z","image":"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/7\/78\/DIT-FFT-butterfly.svg","headline":"O(N logN) divide and conquer algorithm to calculate the discrete Fourier transforms"}</script> </body> </html>