【C++】自研基 2 Cooley–Tukey

“自研基 2 Cooley–Tukey:倒位序 + 逐級蝶形,入口 fft(int N, complex f[])

拆成三件事


它在講什么

  1. “基 2 Cooley–Tukey”
    指的是最常見的 FFT 算法:長度 N 必須是 2 的整數次冪,把離散傅里葉變換分解成一層一層的“2 點蝶形”運算,復雜度從 O(N2)O(N^2)O(N2) 降到 O(Nlog?2N)O(N\log_2N)O(Nlog2?N)。頭文件里也寫著“點數必須為 8, 16, 32, …”【】;接口層不滿足時會自動補零到最近的 2 的冪
if (originDataQueue.size() < round(pow(2, 5)))
  1. “倒位序”(bit-reversal permutation)
    在做蝶形之前,要把輸入序列按“索引的二進制位反轉”的順序重排,這樣內層蝶形才能就地計算、順序訪問。 fft() 里先算 M=log?2NM=\log_2 NM=log2?N【】,然后執行倒位序重排i,j,k 這段就是) 。

  2. “逐級蝶形”(stage-by-stage butterflies)
    一共 M 層。第 m 層把數據分成長度 2m2^m2m 的小組,每組做一堆 2 點蝶形;每個蝶形都要乘一個“旋轉因子” WNr=e?j2πr/NW_N^r=e^{-j2\pi r/N}WNr?=e?j2πr/N。代碼里:

    • 分層與分組:la = 2^mlb = la/2【】;

    • 計算旋轉因子:Wn_i(N, r, &wn, 1)(flag=1 表示正變換取 -sin) ;

    • 2 點蝶形核心:

      t = f[lc] * wn
      f[lc] = f[n] - t
      f[n]  = f[n] + t
      

      這三行就在循環里 。整段“逐級蝶形”的外層/內層循環見 。


“入口函數 fft(int N, complex f[])

  • 函數簽名fft(int N, complex f[]);傳入長度 N 和一段復數數組 f
  • 就地運算輸入和輸出都在同一個數組 f(in-place),不另外開輸出緩沖;這一點在頭文件注釋里寫了。
  • 正/逆變換:正變換用 fft(...);逆變換 ifft(...) 的實現方式是“共軛→fft→再共軛→每點除以 N” 。

這段代碼的變量怎么對應

  • M = log2(N):總共層數
  • 倒位序重排:i,j,k 三個指針完成置換
  • 每層參數:la=2^m(這一層每組長度)、lb=la/2(每組蝶形的“半距離”)
  • 旋轉因子:Wn_i(N,r,...) 生成 e?j2πr/Ne^{-j2\pi r/N}e?j2πr/Ne+j2πr/Ne^{+j2\pi r/N}e+j2πr/N(逆變換)
  • 蝶形對下標:n 是上節點,lc = n + lb 是下節點

和整條鏈路的關系

  • C# 側把時域數據打包成 JSON 串,調用 calcOfflineFFT_testing 送到 C++;
  • C++ 側去直流補零到 2 的冪,再調 fft(N, fftData)
  • FFT 結果出來后你在接口層做了單邊譜歸一化(直流和奈奎斯特不乘 2,其余乘 2/N)并構建頻軸 df = Fs/N

需要注意的兩點

  • fft() 本身不做幅值歸一化;如果要得到幅值(如 Vrms/Arms 或幅度譜),現在是在外層完成的,這是對的。
  • N 必須是 2 的冪;已經在接口層做了檢查并自動補零,避免算法報錯或性能退化。

擴展舉例
可以把這段算法畫成一張小示意圖或用 N=8 的例子演示“倒位序”如何從索引 0..7 變成 0,4,2,6,1,5,3,7,再走一層層蝶形

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/93206.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/93206.shtml
英文地址,請注明出處:http://en.pswp.cn/web/93206.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

小白挑戰一周上架元服務——ArkUI04

文章目錄前言一、ArkUI是何方神圣&#xff1f;二、聲明式UI三、組件1.基礎組件2.布局容器組件3.導航組件4.自定義組件5.組件生命周期四、狀態管理1.State裝飾器: 狀態變量2.Prop裝飾器&#xff1a;父子單向同步3.Link裝飾器&#xff1a;父子雙向同步4.Provide/Consume裝飾器&am…

劇本殺小程序系統開發:構建劇本殺社交新生態

在社交需求日益多樣化的今天&#xff0c;劇本殺憑借其獨特的社交屬性&#xff0c;成為了人們熱衷的社交娛樂方式之一。而劇本殺小程序系統開發&#xff0c;則進一步拓展了劇本殺的社交邊界&#xff0c;構建起一個全新的劇本殺社交新生態&#xff0c;讓玩家在推理與角色扮演中&a…

AI提高投放效率的核心策略

內容概要人工智能技術正深刻改變著廣告投放領域&#xff0c;其核心價值在于顯著提升投放效率。通過融合智能算法優化、實時數據分析與自動化投放流程&#xff0c;AI系統能夠以前所未有的速度和精度處理海量信息&#xff0c;驅動更精準的營銷決策。這不僅大幅縮短了傳統人工操作…

OpenBMC 中命令模式的深度解析:從原理到實現

引言 在 OpenBMC 的設計中&#xff0c;命令模式&#xff08;Command Pattern&#xff09;被廣泛應用于各種場景&#xff0c;特別是 IPMI 命令處理、異步操作封裝和用戶請求管理等。本文將深入分析 OpenBMC 中命令模式的實現原理、架構設計以及完整的執行流程&#xff0c;并通過…

從0開始跟小甲魚C語言視頻使用linux一步步學習C語言(持續更新)8.15

第十七天 第五十七&#xff0c;五十八&#xff0c;五十九和六十集 第五十六集 刪除鏈表結點 沒什么好說的關鍵部分代碼如圖 鏈表的插入操作 依舊沒有啥可以說的代碼部分大家看視頻就能看懂&#xff0c;大家應該是沒有什么問題的吧&#xff1f; 第五十七集 共用體形式結構與結構…

云服務器網站無法訪問的系統化故障排查指南及多維度解決方案

當云服務器上的網站突然無法訪問時&#xff0c;這種突發狀況往往讓人措手不及。別擔心&#xff0c;我們可以通過系統化的排查流程快速定位問題根源。以下是經過實戰驗證的故障排除指南&#xff0c;幫您分步解決網站訪問異常問題。一、基礎狀態確認 服務器的生命體征就像人體的脈…

strings命令和findstr命令驗證iso文件中ntkrnlmp.exe系統版本

strings命令和findstr命令驗證iso文件中ntkrnlmp.exe系統版本D:\chsads3647\i386>expand.exe Microsoft (R) File Expansion Utility Version 5.2.3647.0 版本所有 (c) Microsoft Corporation. 保留所有權利。未指定文件。D:\chsads3647\i386>strings.exe ntkrnlmp.exe …

C語言:指針(5)

1. sizeof與strlen的對比1.1 sizeofsizeof屬于是操作符&#xff0c;用于計算變量所占的空間大小&#xff0c;單位為字節。如果操作數是類型的話&#xff0c;計算的是使用類型創建的變量所占內存空間的大小。sizeof只計算數據在內存中所占的空間大小&#xff0c;而不在乎內存中存…

rent8 安裝部署教程之 Windows

1. Apache 安裝與配置 1.1. 獲取并解壓 Apache 在 Apache Lounge 網址下載編譯版的 Apache。下載完成后&#xff0c;將壓縮包解壓到 d:\web\Apache24 作為 Apache 的安裝目錄。 1.2. 配置 Apache 打開配置文件 conf\httpd.conf&#xff0c;找到第 37 行配置。 ? Define SRVROO…

邊緣智能實戰手冊:攻克IoT應用三大挑戰的AI戰術

前言&#xff1a;在當前的AIoT&#xff08;人工智能物聯網&#xff09;賽道上&#xff0c;將AI能力下沉至邊緣設備已不再是“要不要做”的選擇題&#xff0c;而是“如何做好”的必答題。然而&#xff0c;在實際項目中&#xff0c;工程師們常常會遇到性能、功耗和隱私這“三座大…

【React】use-immer vs 原生 Hook:誰更勝一籌?

1.概述 use-immer 不屬于官方 Hook&#xff0c;是社區維護的第三方庫&#xff01;use-immer 通過封裝 Immer 的不可變更新機制&#xff0c;為 React 開發者提供了一種更直觀、高效的狀態管理方式。它尤其適合處理復雜嵌套狀態或需要頻繁更新的場景&#xff0c;同時保持了與 Re…

【案例】Vue3 實現高性能級橫向循環滾動生產線效果:基于 requestAnimationFrame 的流暢動畫方案

動畫效果在工業監控系統、生產看板等場景中&#xff0c;經常需要模擬生產線的動態運行效果。本文將基于 Vue3 和 requestAnimationFrame 實現一個高性能的橫向循環滾動效果&#xff0c;完美模擬生產線傳輸帶的視覺體驗。我們將從代碼實現到原理分析&#xff0c;全面講解如何打造…

萬字長文解碼如何玩轉Prompt(附實踐應用)

在AI技術迅猛發展的今天&#xff0c;如何與大型語言模型高效“對話”已成為釋放其潛力的關鍵。本文深入探討了提示詞工程&#xff08;Prompt Engineering&#xff09;這一新興領域&#xff0c;系統解析了從基礎概念到高級技巧的完整知識體系&#xff0c;并結合“淘寶XX業務數科…

easyExcel嵌套子集合導出Excel

我想要的Excel效果說明: 1.創建兩個自定義注解:ExcelMerge(表示主對象內的單個屬性,后續會根據子集合的大小合并下面的單元格),ExcelNestedList(表示嵌套的子集合) 2.NestedDataConverter.java 會把查詢到的數據轉換為一行一行的,相當于主表 left join 子表 ON 主.id子.主id的形…

基于 C# WinForm 字體編輯器開發記錄:從基礎到進階

目錄 基礎版本實現 進階版本改進 字體設置窗體增強 主窗體改進 功能對比 項目在本文章的綁定資源中免費的&#xff0c;0積分就可以下載哦~ 在 Windows Forms 應用開發中&#xff0c;字體編輯功能是許多文本處理軟件的基礎功能。本文將分享一個簡易字體編輯器的開發過程&a…

Linux基本使用和Java程序部署(含 JDK 與 MySQL)

文章目錄Linux 背景知識Linux 基本使用Linux 常用的特殊符號和操作符Linux 常用命令文本處理與分析系統管理與操作用戶與權限管理文件/目錄操作與內容處理工具Linux系統防火墻Shell 腳本與實踐搭建 Java 部署環境apt&#xff08;Debian/Ubuntu 系的包管理利器&#xff09;介紹安…

抗輻照CANFD通信芯片在高安全領域國產化替代的研究

摘要&#xff1a;隨著現代科技的飛速發展&#xff0c;高安全領域如航空航天、衛星通信等對電子設備的可靠性與抗輻照性能提出了極高的要求。CANFD通信芯片作為數據傳輸的關鍵組件&#xff0c;其性能優劣直接關系到整個系統的穩定性與安全性。本文聚焦于抗輻照CANFD通信芯片在高…

Mybatis 源碼解讀-SqlSession 會話源碼和Executor SQL操作執行器源碼

作者源碼閱讀筆記主要采用金山云文檔記錄的&#xff0c;所有的交互圖和代碼閱讀筆記都是記錄在云文檔里面&#xff0c;本平臺的文檔編輯實在不方便&#xff0c;會導致我梳理的交互圖和文檔失去原來的格式&#xff0c;所以整理在文檔里面&#xff0c;供大家閱讀交流. 【金山文檔…

Java集合類綜合練習題

代碼 import java.util.*; class ScoreRecord {private String studentId;private String name;private String subject;private int score;public ScoreRecord(String studentId, String name, String subject, int score) {this.studentId studentId;this.name name;this.s…

秒懂邊緣云|1分鐘了解邊緣安全加速 ESA

普通開發者如何搭建安全快速的在線業務才能性價比最高 &#xff1f;阿里云現已為開發者推出免費版邊緣安全加速 ESA&#xff0c;1 個產品就能把 CDN 緩存 API 加速 DNS WAF DDoS 防護全部搞定&#xff0c;還支持邊緣函數快速部署網站和 AI 應用&#xff0c;性價比拉滿。 1…