精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

總結ARM芯片的算法

GReq_mcu168 ? 來源:玩轉單片機 ? 作者:玩轉單片機 ? 2020-06-24 14:33 ? 次閱讀

啥是傅立葉級數?在數學中,傅里葉級數(Fourier series)是把類似波的函數表示成簡單正弦波的方式。更正式地說法是,它能將任何周期性函數或周期信號分解成一個(可能由無窮個元素組成的)簡單振蕩函數的集合,即正弦函數和余弦函數(或者,等價地使用復指數),從數學的定義來看,是這樣地:

設x(t)是一周期信號,其周期為T。若x(t)在一個周期的能量是有限的,有即

則,可以將x(t)展開為傅立葉級數。怎么展開呢?計算如下:

公式中的k表示第k次諧波,這是個什么概念呢?不容易理解,看下對于一個方波的前4次諧波合成動圖就比較好理解了。這里的合成的概念是時域上的疊加的概念

總結ARM芯片的算法

總結ARM芯片的算法

啥是傅里葉變換?在數學中,傅里葉變換(Fourier transform FT )是一種數學變換,它將一個函數(通常是一個時間的函數,或一個信號)分解成它的組成頻率,例如用組成音符的音量和頻率表示一個音樂和弦。傅里葉變換指的是頻域表示和將頻域表示與時間函數相關聯的數學運算。其本質是一種線性積分變換,用于信號在時域(或空域)和頻域之間的變換,在物理學和工程學中有許多應用。因其基本思想首先由法國學者約瑟夫·傅里葉系統地提出,所以以其名字來命名以示紀念。實際上傅里葉變換就像化學分析,確定物質的基本成分;信號來自自然界,也可對其進行分析,確定其基本頻率成分。其數學定義為:

對于連續時間信號x(t),若x(t)在時間維度上可積分,(實際上并不一定是時間t維度,這里可以是任意維度,只需在對應維度空間可積分即可),即:

那么,x(t)的傅立葉變換存在,且其計算式為:

其反變換為:

上面這兩個公式是啥意思呢?在度量空間可積可以理解成其在度量空間能量有限,也即對其自變量積分(相當于求面積)是一個確定值,那么這樣的函數或者信號就可以進行傅立葉變換展開,展開得到的就變成是頻域的函數了,如果對頻率將函數值繪制出曲線就是我們所說的頻譜圖,而其反變換就比較好理解了,如果我們知道一個信號或者函數譜密度函數,就可以對應還原出其時域的函數,也能繪制出時域的波形圖。

總結ARM芯片的算法

當然,本文限定討論時域信號是因為我們電子系統中的應用最為普遍的就是一個時域信號,當然推而廣之,其他的多維度信號也能利用上面定義進行推廣,同樣在多維空間信號也非常有應用價值,比如2維圖像處理等等。

上面兩個概念是一個東東么?傅立葉級數對應的是周期信號,而傅立葉變換則對應的是一個時間連續可積信號(不一定是周期信號)

傅立葉級數要求信號在一個周期內能量有限,而后者則要求在整個區間能量有限

傅立葉級數的對應是離散的,而傅立葉變換則對應是連續的。

故而,兩者的物理含義不同,且其量綱也是不同的,代表周期信號的第k次諧波幅度的大小,而則是頻譜密度的概念。所以答案是這兩者從本質上不是一個概念,傅立葉級數是周期信號的另一種時域的表達方式,也就是正交級數,它是不同的頻率的波形的時域疊加。而傅立葉變換則是完全的頻域分析,傅里葉級數適用于對周期性現象做數學上的分析,傅里葉變換可以看作傅里葉級數的極限形式,也可以看作是對周期現象進行數學上的分析,同時也適用于非周期性現象的分析。傅里葉級數適用于對周期性現象做數學上的分析,傅里葉變換可以看作傅里葉級數的極限形式,也可以看作是對周期現象進行數學上的分析,同時也適用于非周期性現象的分析。

啥是離散傅立葉變換?離散傅里葉變換(Discrete Fourier Transform,縮寫為DFT),是傅里葉變換在時域和頻域上都呈離散的形式,將信號的時域采樣變換為其DTFT的頻域采樣。

在形式上,變換兩端(時域和頻域上)的序列是有限長的,而實際上這兩組序列都應當被認為是離散周期信號的主值序列。即使對有限長的離散信號作DFT,也應當將其看作其周期延拓的變換。在實際應用中通常采用快速傅里葉變換計算DFT。

對于N點序列,它的離散傅立葉變換為(DFT)為:

其中k=0,1,。..。,N-1,上面的式子展開一下:

總結ARM芯片的算法

啥是快速傅立葉變換?快速傅立葉變換(Fast Fourier Transform:FFT)是一種計算數字信號序列的離散傅立葉變換(Discrete Fourier Transform:DFT)或其逆變換(IDFT)的算法。傅里葉分析將信號從其原始域(通常是時間或空間)轉換為頻域的表示,反之亦然。DFT是通過將一系列值分解成不同頻率的分量來獲得的。這個操作在很多領域中都很有用,但是直接從定義中計算它通常太慢而不實際。FFT通過將DFT矩陣分解成稀疏(大部分為零)因子的乘積來快速計算這種轉換。所以其本質是實現離散傅立葉變換的一種優化算法,將時間復雜度從降低為,其中N為待計算序列的長度。當N非常大時,這種優化在時間維度上提升是非常顯著的。尤其在嵌入式應用領域,由于受限于采用的芯片算力往往不強,所以FFT算法較之于DFT的效果是非常有應用價值的。

1994年,Gilbert Strang將FFT描述為“我們一生中最重要的數值算法”,并被IEEE雜志《計算科學與工程》列入20世紀十大算法之一,它深遠的影響了我們世界與日常生活。說這個算法改變了世界也不為過。在我們日常生活中很多設備里面都有它的影子,比如手機、比如photoshop,比如數字音響等等。

快速傅立葉算法的最核心思想就是計算機科學里面常見的分治思想,即把一個復雜的問題,分解為一個小的類似問題進行求解。

FFT基本上可分為兩類,時間抽取法和頻率抽取法,而一般的時間抽取法和頻率抽取法只能處理長度N=2M的情況,另外還有組合數基四FFT來處理一般長度的FFT。所謂抽取,就是把長序列分為短序列的過程,可在時域也可在頻域進行。最常用的時域抽選方法是按奇偶將長序列不斷地變為短序列,結果使輸入序列為倒序,輸出序列為順序排列,這就是Coolly—Tukey算法。

假定待變換離散時間序列信號長度為,將x(n)按照奇偶分組:

上式可變換為:

其中,k取0,1,。..,N/2-1

從而,

由于A(k),B(k)都是點的DFT,X(k)為N點的DFT。那么這一分治思想還可以進一步做下去,這里就不贅述了。

下圖就是一個時間抽取的基2FFT算法的示意圖:

總結ARM芯片的算法

對于頻率抽取基2的示意圖其原理類似,這里放個圖:

總結ARM芯片的算法

不同點:

DIT2 FFT是在時域先進行奇歐倒序,頻域輸出為正序

DIF2 FFT其輸入序列在時域是正序,而頻域輸出為奇偶分開的倒序。

代碼實踐好了,前面碼了這么多字,還是不夠直觀,為了更好說明前面的分治思想,這里放了個遞歸實現代碼測一下看看療效:

#include 《assert.h》

#include 《math.h》

#include 《stdio.h》

#include 《stdlib.h》

#define q 8 /* 2^q 點,256 */

#define N (1《《q) /* N點 FFT, iFFT */

typedef float real;

typedef struct{

real Re;

real Im;

} complex;

#ifndef PI

# define PI 3.14159265358979323846264338327950288

#endif

/*為了更好說明分治思想,這里采用遞歸實現,結束條件為N《=1*/

void fft( complex *v, int n, complex *tmp )

if(n》1) { /* N如小于1,直接返回*/

int k,m; complex z, w, *vo, *ve;

ve = tmp; vo = tmp+n/2;

for(k=0; k《n/2; k++) {

ve[k] = v[2*k];

vo[k] = v[2*k+1];

fft( ve, n/2, v ); /* FFT 偶數序列 v[] */

fft( vo, n/2, v ); /* FFT 偶數序列 v[] */

for(m=0; m《n/2; m++) {

w.Re = cos(2*PI*m/(double)n);

w.Im = -sin(2*PI*m/(double)n);

z.Re = w.Re*vo[m].Re - w.Im*vo[m].Im; /* Re(w*vo[m]) */

z.Im = w.Re*vo[m].Im + w.Im*vo[m].Re; /* Im(w*vo[m]) */

v[ m ].Re = ve[m].Re + z.Re;

v[ m ].Im = ve[m].Im + z.Im;

v[m+n/2].Re = ve[m].Re - z.Re;

v[m+n/2].Im = ve[m].Im - z.Im;

return;

/*為了更好說明分治思想,這里采用遞歸實現,結束條件為N《=1*/

void ifft( complex *v, int n, complex *tmp )

if(n》1) {

int k,m; complex z, w, *vo, *ve;

ve = tmp; vo = tmp+n/2;

for(k=0; k《n/2; k++) {

ve[k] = v[2*k];

vo[k] = v[2*k+1];

ifft( ve, n/2, v ); /* FFT 偶數序列 v[] */

ifft( vo, n/2, v ); /* FFT 奇數序列 v[] */

for(m=0; m《n/2; m++) {

w.Re = cos(2*PI*m/(double)n);

w.Im = sin(2*PI*m/(double)n);

z.Re = w.Re*vo[m].Re - w.Im*vo[m].Im; /* Re(w*vo[m]) */

z.Im = w.Re*vo[m].Im + w.Im*vo[m].Re; /* Im(w*vo[m]) */

v[ m ].Re = ve[m].Re + z.Re;

v[ m ].Im = ve[m].Im + z.Im;

v[m+n/2].Re = ve[m].Re - z.Re;

v[m+n/2].Im = ve[m].Im - z.Im;

return;

#define SAMPLE_RATE (10000.0f)

int main(void)

complex v[N], scratch[N];

float amp[N];

int k;

/*模擬一個采樣系統,采樣率為10KHz,有兩個信號:500Hz/2kHz*/

for(k=0; k《N; k++) {

v[k].Re = 1*sin(2*PI*500*k/SAMPLE_RATE)+0.5*sin(2*PI*2000*k/SAMPLE_RATE);

v[k].Im = 0;//實際信號處理時,虛部常為0

/*輸出模擬信號*/

for(int i=0;i《N;i++)

printf(“%f,”,v[i].Re);

printf(“

fft( v, N, scratch );

for( int i=0;i《N;i++)

printf(“%f,”,sqrt(v[i].Re*v[i].Re+v[i].Im*v[i].Im));

printf(“

”);

while(1);

總結一下本文目的為了方便理解快速傅立葉的算法思想,如果需要將算法實際應用到單片機或者DSP中,還需要做進一步的優化,實際使用時,一般會將蝶形算子做成一個表,另外也會做定點優化。對于ARM芯片而言,其CMSIS庫有現成的實現例子可以直接使用,對于TI系列DSP而言,也內置了FFT代碼庫,可直接使用。
責任編輯:pj

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • dsp
    dsp
    +關注

    關注

    552

    文章

    7962

    瀏覽量

    348279
  • 單片機
    +關注

    關注

    6032

    文章

    44518

    瀏覽量

    633066
  • ARM芯片
    +關注

    關注

    1

    文章

    125

    瀏覽量

    21443
收藏 人收藏

    評論

    相關推薦

    【「從算法到電路—數字芯片算法的電路實現」閱讀體驗】+內容簡介

    內容簡介這是一本深入解讀基礎算法及其電路設計,以打通算法研發到數字IC設計的實現屏障,以及指導芯片設計工程師從底層掌握復雜電路設計與優化方法為目標的專業技術書。任何芯片(如WiFi
    發表于 11-21 17:14

    【「從算法到電路—數字芯片算法的電路實現」閱讀體驗】+介紹基礎硬件算法模塊

    更大的熱情此形勢下,國內芯片設計水平必將迎來一次大的升級,同時對從業者的要求也將大大提高。 算法芯片自研的基石即了解組按照購買模塊進行組裝的方式,芯片開發工程師需要掌握的基本技能是
    發表于 11-21 17:05

    【「從算法到電路—數字芯片算法的電路實現」閱讀體驗】+一本介紹基礎硬件算法模塊實現的好書

    的。 第一章簡介了芯片研發流程,算法和電路設計,算法芯片驗證的關系,算法工具等第二章介紹了基本的數字電路基礎,具備基本的計算機或者數字電路
    發表于 11-20 13:42

    名單公布!【書籍評測活動NO.46】從算法到電路 | 數字芯片算法的電路實現

    :elecfans123)領取書籍進行評測,如在5個工作日內未聯系,視為放棄本次試用評測資格! 《從算法到電路——數字芯片算法的電路實現》 是一本深入解讀基礎算法及其電路設計,以打通
    發表于 10-09 13:43

    ARM進軍汽車芯片市場,推出Neoverse設計

    近日,全球知名的移動芯片設計公司ARM宣布邁出重大步伐,正式推出專為汽車領域設計的芯片——Neoverse。這一創新不僅展示了ARM芯片
    的頭像 發表于 05-20 10:46 ?602次閱讀

    Arm預計2025年推出首款AI芯片

    全球知名的芯片設計公司安謀(Arm Holdings)正在積極籌劃其首款AI芯片的研發,預計于2025年正式推向市場。為了實現這一目標,Arm決定成立一個專門的AI
    的頭像 發表于 05-14 11:10 ?621次閱讀

    基于FPGA的常見的圖像算法模塊總結

    意在給大家補充一下基于FPGA的圖像算法基礎,于是講解了一下常見的圖像算法模塊,經過個人的總結,將知識點分布如下所示。
    的頭像 發表于 04-28 11:45 ?543次閱讀
    基于FPGA的常見的圖像<b class='flag-5'>算法</b>模塊<b class='flag-5'>總結</b>

    谷歌發布Arm架構CPU,性能超越x86和通用Arm芯片

    據悉,谷歌計劃借助谷歌云提供名為Axion的基于Arm的中央處理器(CPU)。該公司表示,其性能優越,超過同類x86芯片及云端通用Arm芯片
    的頭像 發表于 04-10 09:25 ?520次閱讀

    Arm首次面向汽車應用發布Neoverse級芯片設計

    在汽車科技日新月異的今天,英國知名芯片設計商Arm宣布,其已首次面向汽車應用推出了高性能的“Neoverse”級芯片設計,同時還發布了一套全新的系統,專門服務于汽車制造商及其供應商。這一重大舉措標志著
    的頭像 發表于 03-18 13:39 ?734次閱讀

    蘋果M3芯片ARM架構嗎

    蘋果M3芯片采用的是ARM架構。這種架構具有高效能和低功耗的特點,使得M3芯片在提供出色性能的同時,也能保持較低的能耗。
    的頭像 發表于 03-08 16:03 ?1906次閱讀

    Arm v9芯片新架構揭秘

    從中長期來看,隨著單芯片 ARM 核數增加、基于 ARM 架構芯片數量的上升以及ARM 應用場景的增加,公司仍將保持增長。據公司公告數據顯示
    發表于 02-27 14:14 ?5319次閱讀
    <b class='flag-5'>Arm</b> v9<b class='flag-5'>芯片</b>新架構揭秘

    dsp芯片arm芯片區別 dsp的應用領域

    DSP芯片ARM芯片都是常見的處理器芯片,但它們在應用領域和架構設計上有著明顯的差別。下面將詳細介紹DSP芯片
    的頭像 發表于 02-01 10:17 ?5952次閱讀

    STM32控制中常見的PID算法總結

    在很多控制算法當中,PID控制算法又是最簡單,最能體現反饋思想的控制算法,可謂經典中的經典。經典的未必是復雜的,經典的東西常常是簡單的,而且是最簡單的。
    發表于 12-27 14:07 ?1561次閱讀
    STM32控制中常見的PID<b class='flag-5'>算法</b><b class='flag-5'>總結</b>

    十大排序算法總結

    排序算法是最經典的算法知識。因為其實現代碼短,應該廣,在面試中經常會問到排序算法及其相關的問題。一般在面試中最常考的是快速排序和歸并排序等基本的排序算法,并且經常要求現場手寫基本的排序
    的頭像 發表于 12-20 10:39 ?1082次閱讀

    MEMS芯片質量影響因素總結 MEMS芯片制程技術類型

    中科融合是一家國際領先的先進光學智能傳感器芯片企業,是國內唯一擁有自主研發“MEMS芯片+SOC芯片+核心算法”,并且提供完整的AI+3D芯片
    的頭像 發表于 12-14 14:43 ?1415次閱讀
    MEMS<b class='flag-5'>芯片</b>質量影響因素<b class='flag-5'>總結</b> MEMS<b class='flag-5'>芯片</b>制程技術類型