導航:首頁 > 操作系統 > fft單片機實現

fft單片機實現

發布時間:2022-12-27 06:48:00

㈠ 求助:單片機上實現DFT演算法採集市電

解決辦法很多:
1) 可以使用 dft/fft 求幅值,同時還可以求出功率等,可以參考我以前的帖子。
2) 可以使用均方根,但樓主的方法在電壓頻率不等於采樣頻率時會有抖動。解決方法是判斷過零,同時對電壓和頻率作線形插值處理,可以達到很高的精度,而且穩定。

㈡ 如何實現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有相應的庫函數,但是要注意采樣率,采樣周期與信號周期的關系,頻譜泄露的影響。

㈢ 單片機實現fft用什麼軟體模擬比較好

matlab

㈣ FFT的公式是什麼和演算法是怎樣實現

二維FFT相當於對行和列分別進行一維FFT運算。具體的實現辦法如下:
先對各行逐一進行一維FFT,然後再對變換後的新矩陣的各列逐一進行一維FFT。相應的偽代碼如下所示:
for (int i=0; i<M; i++)
FFT_1D(ROW[i],N);
for (int j=0; j<N; j++)
FFT_1D(COL[j],M);
其中,ROW[i]表示矩陣的第i行。注意這只是一個簡單的記法,並不能完全照抄。還需要通過一些語句來生成各行的數據。同理,COL[i]是對矩陣的第i列的一種簡單表示方法。
所以,關鍵是一維FFT演算法的實現。下面討論一維FFT的演算法原理。

【1D-FFT的演算法實現】
設序列h(n)長度為N,將其按下標的奇偶性分成兩組,即he和ho序列,它們的長度都是N/2。這樣,可以將h(n)的FFT計算公式改寫如下 :

(A)
由於

所以,(A)式可以改寫成下面的形式:

按照FFT的定義,上面的式子實際上是:

其中,k的取值范圍是 0~N-1。
我們注意到He(k)和Ho(k)是N/2點的DFT,其周期是N/2。因此,H(k)DFT的前N/2點和後N/2點都可以用He(k)和Ho(k)來表示

㈤ stc15系列單片機怎麼實現FFT和DFT說一下大體思路就好~

用AD采樣,然後存入數組,然後利用數組裡面的數,做快速傅里葉變換,

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

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

㈦ 如何用51單片機實現音頻信號的頻譜顯示(在LCD上顯示)

12864可以作為顯示器件

頻譜分析涉及到FFT,如果你這個不會,那還是再學習學習吧。
簡單原理: 通過快速FFT將音頻分析成多個正弦波的組合,正弦波的頻率就是高音低音,振幅就是音量的大小。
FFT運算量比較大,普通51難以接受,要選用1T的高速51,
聲音信號要通過ad進行采樣,然後將其進行分析,所以要選用一個精度高速度快的ad,一般高檔51中ad可以勝任這個工作
聲音信號在ad采樣之前需要調整成合適振幅的信號

㈧ 怎樣用C語言實現FFT演算法啊

1、二維FFT相當於對行和列分別進行一維FFT運算。具體的實現辦法如下:
先對各行逐一進行一維FFT,然後再對變換後的新矩陣的各列逐一進行一維FFT。相應的偽代碼如下所示:
for (int i=0; i<M; i++)
FFT_1D(ROW[i],N);
for (int j=0; j<N; j++)
FFT_1D(COL[j],M);
其中,ROW[i]表示矩陣的第i行。注意這只是一個簡單的記法,並不能完全照抄。還需要通過一些語句來生成各行的數據。同理,COL[i]是對矩陣的第i列的一種簡單表示方法。
所以,關鍵是一維FFT演算法的實現。

2、常式:

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#defineN1000
/*定義復數類型*/
typedefstruct{
doublereal;
doubleimg;
}complex;
complexx[N],*W;/*輸入序列,變換核*/
intsize_x=0;/*輸入序列的大小,在本程序中僅限2的次冪*/
doublePI;/*圓周率*/
voidfft();/*快速傅里葉變換*/
voidinitW();/*初始化變換核*/
voidchange();/*變址*/
voidadd(complex,complex,complex*);/*復數加法*/
voidmul(complex,complex,complex*);/*復數乘法*/
voidsub(complex,complex,complex*);/*復數減法*/
voidoutput();
intmain(){
inti;/*輸出結果*/
system("cls");
PI=atan(1)*4;
printf("Pleaseinputthesizeofx: ");
scanf("%d",&size_x);
printf("Pleaseinputthedatainx[N]: ");
for(i=0;i<size_x;i++)
scanf("%lf%lf",&x[i].real,&x[i].img);
initW();
fft();
output();
return0;
}
/*快速傅里葉變換*/
voidfft(){
inti=0,j=0,k=0,l=0;
complexup,down,proct;
change();
for(i=0;i<log(size_x)/log(2);i++){/*一級蝶形運算*/
l=1<<i;
for(j=0;j<size_x;j+=2*l){/*一組蝶形運算*/
for(k=0;k<l;k++){/*一個蝶形運算*/
mul(x[j+k+l],W[size_x*k/2/l],&proct);
add(x[j+k],proct,&up);
sub(x[j+k],proct,&down);
x[j+k]=up;
x[j+k+l]=down;
}
}
}
}
/*初始化變換核*/
voidinitW(){
inti;
W=(complex*)malloc(sizeof(complex)*size_x);
for(i=0;i<size_x;i++){
W[i].real=cos(2*PI/size_x*i);
W[i].img=-1*sin(2*PI/size_x*i);
}
}
/*變址計算,將x(n)碼位倒置*/
voidchange(){
complextemp;
unsignedshorti=0,j=0,k=0;
doublet;
for(i=0;i<size_x;i++){
k=i;j=0;
t=(log(size_x)/log(2));
while((t--)>0){
j=j<<1;
j|=(k&1);
k=k>>1;
}
if(j>i){
temp=x[i];
x[i]=x[j];
x[j]=temp;
}
}
}
/*輸出傅里葉變換的結果*/
voidoutput(){
inti;
printf("Theresultareasfollows ");
for(i=0;i<size_x;i++){
printf("%.4f",x[i].real);
if(x[i].img>=0.0001)printf("+%.4fj ",x[i].img);
elseif(fabs(x[i].img)<0.0001)printf(" ");
elseprintf("%.4fj ",x[i].img);
}
}
voidadd(complexa,complexb,complex*c){
c->real=a.real+b.real;
c->img=a.img+b.img;
}
voidmul(complexa,complexb,complex*c){
c->real=a.real*b.real-a.img*b.img;
c->img=a.real*b.img+a.img*b.real;
}
voidsub(complexa,complexb,complex*c){
c->real=a.real-b.real;
c->img=a.img-b.img;
}

㈨ FFT運算,在信號處理中是怎樣運用的啊

FFT演算法實現因為PIC16F877片內有高達368×8位(相當於184×16位)的數據存儲器(RAM),故用片內RAM最多可以完成64點FFT(16位實部和虛部數據)。現在僅實現16點FFT,主要是起拋磚引玉的作用。這里的FFT是按頻率抽取的。在調用FFT子程序前,輸入數據按正常次序輸入,而輸出數據是經FFT變換整序處理後輸出。原始數據被變換後的數據覆蓋存放在RAM中,這是通過分解序列實現的;然而分解序列將引起DFT的項序混亂,所以在變換結束,所有的數據需要進行「整序」,以恢復DFT的正常次序。某些應用可以不進行整序;因而整序程序編成子程序形式,當需要時隨時可以調用。輸入數據為32位,前為16位實部,後為16位虛部,中間結果為32位;輸出數據也是前為實部,後為虛部。這樣計算的結果具有相當高的精度。

㈩ 使用單片機和FFT演算法顯示波形(高分!!!急救!!)

涉及到單片機跟上位機通信得問題,有模塊一般用串口的比較多 網上去找吧 單片機的硬體應該考慮AD轉換器(1024點的話 就用10bit特的AD吧) 若選用 STC的單片機自帶10bitAD 可以不用考慮AD的問題 你的軟體主要會涉及到兩個部分吧 單片機的程序 和 上位機的顯示程序(VB還是delphi就自己目前狀況定吧) 難點還在於通訊這一塊 如果以前沒接觸過花的時間可能會長點 還有你電壓信號一般是工頻的吧 采樣定律要求采樣率是它的兩倍以上 所以100HZ以上的了 而且事實上要大上好幾倍 最好500Hz以上吧(周期就倒數下)現在一般都用數據採集卡了 在大項目中單片機有點古老的感覺 你這課題用LabVIEW的還不錯 幾個框圖一拉就完了 一周可以搞定 呵呵 不過以後要走技術的路 還是要一步一個腳印穩扎穩打從單片機起步吧~~~好了就這么多了,你也不必再問了,下次上線我不知道是什麼時候了~~~

閱讀全文

與fft單片機實現相關的資料

熱點內容
考駕照怎麼找伺服器 瀏覽:882
阿里雲伺服器如何更換地區 瀏覽:970
手機app調音器怎麼調古箏 瀏覽:501
銳起無盤系統在伺服器上需要設置什麼嗎 瀏覽:17
紅旗計程車app怎麼應聘 瀏覽:978
如何編寫linux程序 瀏覽:870
吉利車解壓 瀏覽:248
java輸入流字元串 瀏覽:341
安卓軟體沒網怎麼回事 瀏覽:785
dvd壓縮碟怎麼導出電腦 瀏覽:274
冒險島什麼伺服器好玩 瀏覽:541
如何在伺服器上做性能測試 瀏覽:793
命令序列錯 瀏覽:259
javaif的條件表達式 瀏覽:576
手機app上傳的照片怎麼找 瀏覽:531
雲伺服器面臨哪些威脅 瀏覽:748
c語言各種編譯特點 瀏覽:177
路由器多種加密方法 瀏覽:604
程序員阻止電腦自動彈出定位 瀏覽:168
如何做伺服器服務商 瀏覽:763