導航:首頁 > 操作系統 > 單片機fft程序

單片機fft程序

發布時間:2022-07-28 12:15:08

『壹』 單片機實現傅立葉變換

用FPGA這種單片機

在對FFT(快速傅立葉變換)演算法進行研究的基礎上,描述了用FPGA實現FFT的方法,並對其中的整體結構、蝶形單元及性能等進行了分析。

關鍵詞:

FPGA FFT

傅立葉變換是數字信號處理中的基本操作,廣泛應用於表述及分析離散時域信號領域。但由於其運算量與變換點數N的平方成正比關系,因此,在N較大時,直接應用DFT演算法進行譜變換是不切合實際的。然而,快速傅立葉變換技術的出現使情況發生了根本性的變化。本文主要描述了採用FPGA來實現2k/4k/8k點FFT的設計方法。

1 整體結構

一般情況下,N點的傅立葉變換對為:

其中,WN=exp(-2 pi/N)。X(k)和x(n)都為復數。與之相對的快速傅立葉變換有很多種,如DIT(時域抽取法)、DIF(頻域抽取法)、Cooley-Tukey和Winograd等。對於2n傅立葉變換,Cooley-Tukey演算法可導出DIT和DIF演算法。本文運用的基本思想是Cooley-Tukey演算法,即將高點數的傅立葉變換通過多重低點數傅立葉變換來實現。雖然DIT與DIF有差別,但由於它們在本質上都是一種基於標號分解的演算法,故在運算量和演算法復雜性等方面完全一樣,而沒有性能上的優劣之分,所以可以根據需要任取其中一種,本文主要以DIT方法為對象來討論。

N=8192點DFT的運算表達式為:

式中,m=(4n1+n2)(2048k1+k2)(n=4n1+n2,k=2048k1+k2)其中n1和k2可取0,1,...,2047,k1和n2可取0,1,2,3。

由式(3)可知,8k傅立葉變換可由4×2k的傅立葉變換構成。同理,4k傅立葉變換可由2×2k的傅立葉變換構成。而2k傅立葉變換可由128×16的傅立葉變換構成。128的傅立葉變換可進一步由16×8的傅立葉變換構成,歸根結底,整個傅立葉變換可由基2、基4的傅立葉變換構成。2k的FFT可以通過5個基4和1個基2變換來實現;4k的FFT變換可通過6個基4變換來實現;8k的FFT可以通過6個基4和1個基2變換來實現。也就是說:FFT的基本結構可由基2/4模塊、復數乘法器、存儲單元和存儲器控制模塊構成,其整體結構如圖1所示。

圖1中,RAM用來存儲輸入數據、運算過程中的中間結果以及運算完成後的數據,ROM用來存儲旋轉因子表。蝶形運算單元即為基2/4模塊,控制模塊可用於產生控制時序及地址信號,以控制中間運算過程及最後輸出結果。

2 蝶形運算器的實現

基4和基2的信號流如圖2所示。圖中,若A=r0+j*i0,B=r1+j*i1,C=r2+j*i2,D=r3+j*i3是要進行變換的信號,Wk0=c0+j*s0=1,Wk1=c1+j*s1,Wk2=c2+j*s2,Wk3=c3+j*s3為旋轉因子,將其分別代入圖2中的基4蝶形運算單元,則有:

A′=[r0+(r1×c1-i1×s1)+(r2×c2-i2×s2)+(r3×c3-i3×s3)]+j[i0+(i1×c1+r1×s1)+(i2×c2+r2×s2)+(i3×c3+r3×s3)]� (4)

B′=[r0+(i1×c1+r1×s1)-(r2×c2-i2×s2)-(i3×c3+r3×s3)]+j[i0-(r1×c1-i1×s1)-(

i2×c2+r2×s2)+(r3×c3-i3×s3)] (5)

C′=[r0-(r1×c1-i1×s1)+(r2×c2-i2×s2)-(r3×c3-i3×s3)]+j[i0-(i1×c1+r1×s1)+(i2×c2+r2×s2)-(i3×c3+r3×s3)] (6)

D′=[r0-(i1×c1+r1×s1)-(r2×c2-i2×s2)+(i3×c3+r3×s3)]+j[i0+(r1×c1-i1×s1)-(i2×c2+r2×s2)-(r3×c3-i3×s3)]� (7)

看明白了嗎?

『貳』 怎樣計算一個單片機程序所需rom大小,計算的是fft演算法分析及顯示所需的容量,請寫明詳細計算過程,並舉例

一般人是不算ROM的大小,至多隻是估計。因為一個完整的程序,不同的人,甚至同一個人,程序的思路方法不一樣,程序大小會差比較多。而且你的程序,除了演算法,還有其他的很多東東,如顯示、按鍵、通信等等,這些可能比你的演算法的程序量還要大得多。
所以建議你先用模擬(如PROTEUS模擬),選用足夠大的ROM的單片機,編制完整的程序,就知道花了多少的程序空間。

『叄』 求個能在51單片機上跑的FFT ~~

這種FFT無意義

『肆』 如何實現64點FFT越詳細越好!

matlab實現的代碼:
x=importdata('aa.txt') %從aa.txt文件中讀取數據,64點FFT就取64點數據
n=[1:64]; %64個數據
N=64;
y=fft(x); %進行FFT計算
%輸出y
M=abs(y); %取幅值
M(1)=M(1)/2;
plot(n,2*M/N); %繪制幅頻圖,
title('幅頻相應');
xlabel('頻率');
ylabel('幅度');
如果要單片機實現的話,cortex及ARM有相應的庫函數,但是要注意采樣率,采樣周期與信號周期的關系,頻譜泄露的影響。

『伍』 請教用430編寫FFT程序

MSP430-FFTB6638 你要說明單片機的型號。 都屬於MSP430系列的,大致使用起來就不會差很多,有些寄存器命名、包含模塊多少等區別。 P4DIR|=BIT1+BIT2+BIT3:這句是將P4.1 P4.2 P4.3這3個IO口的方向置為輸出。 MSP430不同於51,需要先設置輸入輸出

『陸』 如何用matlab產生一組數組,這組數組將作為c編的FFT程序(單片機上)的輸入部分。

% 是單頻率信號還是帶有諧波的信號啊?以下是matlab程序,產生信號數據
fs=2500; % 你給的100ms換算成采樣頻率是10HZ,這不符合採樣定理,建議提高采樣頻率
f=50;
N=256;
n=1:N;
t=(n-1)/fs;
Am= [30.6 6 15 5 10 18]; % 這個是幅值,如果是單頻率,一個數即可
PH= [60 30 90 90 90 90]; % 這個是相位,如果是單頻率,同上
m = 6; % 如果是單頻率 取 1
x=zeros(1,N);
PH = PH/180*pi; % 如果給的是角度,需要換算成弧度
for k=1 : m
x=x+Am(k)*cos(2*pi*f*k*t+PH(k)); % x就是信號采樣後的數據,就是你需要的FFT輸入數據
end

『柒』 單片機音樂頻譜程序求解釋!

音樂頻譜的解析關鍵就是FFT函數,它可將幅域信號轉換為頻域信號,你可以看看相關的高等數學中的信號處理部分。
從jpg圖來看,你那個程序將頻域設定為16個頻點,8個高度值

『捌』 如何將一個聲音信號輸入到單片機裡面進行fft求高手

將一個聲音信號輸入到單片機裡面,可以通過麥克風,通常小小的那種咪頭(耳機線常佩戴的)那種就可以,它的輸出是電壓量(聲音信號--電信號),你可以用單片機去采樣/或者AD晶元對其采樣再把數據送個單片機進行處理,單片機內部的處理就可以說是跟matlab裡面的處理類似了,而且都是用c語言的,相信很容易上手,祝好運。

『玖』 單片機 誰懂FFT

FFT就是快速傅里葉變換,是將時域中的數字信號編程頻域,這是數字信號處理的內容,具體是如何進行的,建議你看看數字信號處理這本書

閱讀全文

與單片機fft程序相關的資料

熱點內容
java的equals用法 瀏覽:843
奧維雲伺服器怎麼開通 瀏覽:167
js取得伺服器地址 瀏覽:810
起點中文網小說緩存在哪個文件夾 瀏覽:214
java瘋狂講義pdf 瀏覽:296
推有錢app在哪裡 瀏覽:739
寧波鮑斯壓縮機 瀏覽:93
新建文件夾電影2完整版演員表 瀏覽:988
空調壓縮機為什麼不能放到冷庫用 瀏覽:89
江西雲伺服器節點虛擬主機 瀏覽:997
新氧app如何測試臉型 瀏覽:688
個稅app如何查詢社保 瀏覽:495
安卓設備快充什麼時候開啟的 瀏覽:13
ipad怎麼用安卓手機傳文件 瀏覽:584
編輯程序員視頻 瀏覽:633
極光app的雲助手在哪裡 瀏覽:777
信合有什麼ApP 瀏覽:958
android絕對位置 瀏覽:79
阿里巴巴校招程序員在哪個園區 瀏覽:905
呼吸的科學pdf 瀏覽:820