导航:首页 > 操作系统 > 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单片机实现相关的资料

热点内容
阿里云服务器如何更换地区 浏览:968
手机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
如何做服务器服务商 浏览:761
su剖切命令 浏览:726