快速傅里葉變換(Fast Fourier Transform,FFT)

快速傅里葉變換(Fast Fourier Transform,FFT)是一種算法,用于快速計算離散傅里葉變換(DFT)及其逆變換。傅里葉變換將時間或空間域的信號轉換為頻率域的信號,便于分析信號的頻率特性。FFT顯著提高了計算效率,將計算復雜度從 O ( n 2 ) O(n^2) O(n2)降低到 O ( n log ? n ) O(n \log n) O(nlogn)

FFT的基本原理

傅里葉變換的基本公式為:
X ( k ) = ∑ n = 0 N ? 1 x ( n ) ? e ? j 2 π N k n X(k) = \sum_{n=0}^{N-1} x(n) \cdot e^{-j \frac{2\pi}{N}kn} X(k)=n=0N?1?x(n)?e?jN2π?kn
其中, x ( n ) x(n) x(n)是時間域信號, X ( k ) X(k) X(k)是頻率域信號, N N N是信號的長度, j j j是虛數單位。

FFT利用分治法,將DFT分解成若干個更小的DFT計算。常用的算法包括Cooley-Tukey算法、分裂基算法等。

Cooley-Tukey算法

Cooley-Tukey算法是最常用的FFT算法,它將DFT分解成兩個長度為 N / 2 N/2 N/2的DFT,遞歸計算,直到達到最小子問題。

  1. 將原始序列分為奇數和偶數兩部分:
    X ( k ) = ∑ n = 0 N / 2 ? 1 x ( 2 n ) ? e ? j 2 π N 2 n k + ∑ n = 0 N / 2 ? 1 x ( 2 n + 1 ) ? e ? j 2 π N ( 2 n + 1 ) k X(k) = \sum_{n=0}^{N/2-1} x(2n) \cdot e^{-j \frac{2\pi}{N} 2nk} + \sum_{n=0}^{N/2-1} x(2n+1) \cdot e^{-j \frac{2\pi}{N} (2n+1)k} X(k)=n=0N/2?1?x(2n)?e?jN2π?2nk+n=0N/2?1?x(2n+1)?e?jN2π?(2n+1)k

  2. 通過變換得到:
    X ( k ) = ∑ n = 0 N / 2 ? 1 x ( 2 n ) ? e ? j 2 π N / 2 n k + e ? j 2 π N k ∑ n = 0 N / 2 ? 1 x ( 2 n + 1 ) ? e ? j 2 π N / 2 n k X(k) = \sum_{n=0}^{N/2-1} x(2n) \cdot e^{-j \frac{2\pi}{N/2} nk} + e^{-j \frac{2\pi}{N} k} \sum_{n=0}^{N/2-1} x(2n+1) \cdot e^{-j \frac{2\pi}{N/2} nk} X(k)=n=0N/2?1?x(2n)?e?jN/22π?nk+e?jN2π?kn=0N/2?1?x(2n+1)?e?jN/22π?nk

  3. 遞歸計算兩個 N / 2 N/2 N/2長度的DFT,最終合并結果。

FFT的應用

FFT廣泛應用于信號處理、圖像處理、音頻處理、譜分析等領域。例如:

  • 音頻處理:FFT用于分析音頻信號的頻譜成分,以進行音頻壓縮、噪聲消除等操作。
  • 圖像處理:通過FFT進行圖像的頻域處理,如濾波、邊緣檢測等。
  • 通信:FFT在數字信號處理(DSP)中用于調制解調、信號分析等。

代碼示例

以下是一個使用Python中的numpy庫計算FFT的示例:

import numpy as np
import matplotlib.pyplot as plt# 生成一個信號:包含兩個不同頻率的正弦波
fs = 1000  # 采樣頻率
t = np.arange(0, 1, 1/fs)  # 時間序列
f1, f2 = 50, 120  # 信號頻率
x = 0.6 * np.sin(2 * np.pi * f1 * t) + 0.4 * np.sin(2 * np.pi * f2 * t)# 計算FFT
X = np.fft.fft(x)
freqs = np.fft.fftfreq(len(X), 1/fs)# 繪制頻譜
plt.figure()
plt.plot(freqs[:len(freqs)//2], np.abs(X)[:len(X)//2])
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.title('Frequency Spectrum')
plt.show()

這個示例生成了一個包含50Hz和120Hz兩個頻率成分的信號,通過FFT計算頻譜并繪制結果。

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

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

相關文章

動手學深度學習(Pytorch版)代碼實踐 -卷積神經網絡-20填充與步幅

20填充與步幅 import torch from torch import nn# 此函數初始化卷積層權重,并對輸入和輸出提高和縮減相應的維數 def comp_conv2d(conv2d, X):# 這里的(1,1)表示批量大小和通道數都是1#將輸入張量 X 的形狀調整為 (1, 1, height,…

Grafana-11.0.0 在線部署教程

Grafana-11.0.0 在線部署教程 環境: 操作系統: ubuntugrafana版本: 11.0.0 (建議不要按照最新版)grafana要求的系統配置不高,建議直接部署在監控服務器上,比如zabbix服務器、prometheus服務器…

從菌群代謝到健康影響——認識腸道丙酸和丁酸

谷禾健康 短鏈脂肪酸這一詞經常出現在谷禾的文章和報告中,那你真的了解短鏈脂肪酸嗎?短鏈脂肪酸(SCFA)主要是腸道微生物群在結腸內通過發酵碳水化合物(包括膳食和內源性碳水化合物,主要是抗性淀粉和膳食纖維)和一些微生物可利用的蛋白質而產生…

光線追蹤:原理與實現

版權聲明 本文為“優夢創客”原創文章,您可以自由轉載,但必須加入完整的版權聲明文章內容不得刪減、修改、演繹本文視頻版本:見文末 各位同學大家好,今天我要給大家分享的是光線追蹤的原理和實現大家知道在過往很多年里面&#x…

超簡單的nodejs使用log4js保存日志到本地(可直接復制使用)

引入依賴 npm install log4js 新建配置文件logUtil.js const log4js require(log4js);// 日志配置 log4js.configure({appenders: {// 控制臺輸出consoleAppender: { type: console },// 文件輸出fileAppender: {type: dateFile,filename: ./logs/default, //日志文件的存…

如何從0構建一款類似pytest的工具

Pytest主要模塊 Pytest 是一個強大且靈活的測試框架,它通過一系列步驟來發現和運行測試。其核心工作原理包括以下幾個方面:測試發現:Pytest 會遍歷指定目錄下的所有文件,找到以 test_ 開頭或 _test.py 結尾的文件,并且…

python 實例002 - 數據轉換

題目: 有一組用例數據如下: cases [[case_id, case_title, url, data, excepted],[1, 用例1, www.baudi.com, 001, ok],[4, 用例4, www.baudi.com, 002, ok],[2, 用例2, www.baudi.com, 002, ok],[3, 用例3, www.baudi.com, 002, ok],[5, 用例5, www.ba…

MS-Net: A Multi-Path Sparse Model for Motion Prediction in Multi-Scenes

MS-Net: A Multi-Path Sparse Model for Motion Prediction in Multi-Scenes 基本信息 期刊:IEEE ROBOTICS AND AUTOMATION LETTERS (IF 4.6 SCI3區)單位:同濟大學,上海人工智能實驗室時間:2023年12月數據…

架構師必知的絕活-JVM調優

前言 為什么要學JVM? 首先:面試需要 了解JVM能幫助回答面試中的復雜問題。面試中涉及到的JVM相關問題層出不窮,難道每次面試都靠背幾百上千條面試八股? 其次:基礎知識決定上層建筑 自己寫的代碼都不知道是怎么回事&a…

精準圖像識別:算法與應用的雙重突破

精準圖像識別在近年來取得了算法與應用的雙重突破,這些突破不僅推動了技術的發展,也極大地拓寬了圖像識別的應用領域。以下是對這些突破的詳細概述: 算法突破 深度學習技術的崛起:深度學習,特別是卷積神經網絡&#…

C++中的虛函數表結構框架

一.虛函數表介紹 Virtual Table虛函數表是實現多態的 每個有虛函數的類的實現,都有個指向虛函數的指針表(不管是父類還是子類) 指向虛表的指針是作為數據成員存在實例對象中 當調用虛函數時,就去查找對象的虛表中指向整頓派生類函…

golang template HTML動態模板解析實現

使用場景: 我們希望在模板里面動態解析指定的模板文件。 這個似乎使用go語言的模板嵌套 template 可以實現,不過模板嵌套聲明里面是不支持使用變量的, 如:{{template "模板文件名" .}} 這里的"模板文件名"不…

LeetCode 2710.移除字符串中的尾隨零:模擬

【LetMeFly】2710.移除字符串中的尾隨零:模擬 力扣題目鏈接:https://leetcode.cn/problems/remove-trailing-zeros-from-a-string/ 給你一個用字符串表示的正整數 num ,請你以字符串形式返回不含尾隨零的整數 num 。 示例 1: 輸…

Apache Kylin資源管理全指南:優化你的大數據架構

標題:Apache Kylin資源管理全指南:優化你的大數據架構 摘要 Apache Kylin是一個開源的分布式分析引擎,旨在為大規模數據集提供高性能的SQL查詢能力。在Kylin中進行有效的資源管理對于確保查詢性能和系統穩定性至關重要。本文將詳細介紹如何…

leetcode 133雙周賽 統計逆序對的數目「dp」「前綴和優化」

3193. 統計逆序對的數目 題目描述: 給定一個長度為n的二維數組 r e re re,其中 r e [ i ] [ i d i , c n t i ] re[i] [id_i, cnt_i] re[i][idi?,cnti?],求存在多少個全排列perm滿足對所有的 r e [ i ] re[i] re[i]都有 p e r m [ 0.. …

Bayes分類器設計

本篇文章是博主在人工智能等領域學習時,用于個人學習、研究或者欣賞使用,并基于博主對人工智能等領域的一些理解而記錄的學習摘錄和筆記,若有不當和侵權之處,指出后將會立即改正,還望諒解。文章分類在AI學習筆記&#…

東方博宜 OJ 1201-1300

目錄 1268:【基礎】高精度加法 1269:【基礎】高精度減法 1280:【基礎】求 2 的 n 次方 1281:【基礎】求 222222?222?2 1285:【基礎】計算 N 的階乘 1286:【基礎】高精度乘單精度 1287:【基礎】高精…

第一百三十三節 Java數據類型教程 - Java基本數據類型

Java數據類型教程 - Java基本數據類型 Java定義了八種基本類型的數據:byte,short,int,long,char,float,double和boolean。 基本類型通常被稱為簡單類型。 這些可以分為四組: Integers - 包括byte&#x…

求推薦幾款http可視化調試工具?

Postman 非常流行的API調試工具,適用于構建、測試和文檔化APIs。它支持各種HTTP方法,有強大的集合和環境管理功能,以及代碼生成能力。 BB-API 是一款旨在提升開發效率的工具,它專注于提供簡約、完全免費且功能強大的HTTP模擬請…

目標檢測算法

一、緒論 1.1 目標檢測算法的定義和背景 1.2 目標檢測算法在計算機視覺領域的重要性 二、目標檢測算法的發展歷程 2.1 傳統目標檢測算法 2.2 基于深度學習的目標檢測算法 2.3 目標檢測算法的評價指標 三、目標檢測算法的關鍵技術 3.1 區域建議網絡(RPN) 3.2 卷積神經…