欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
51單片機ADC采樣傅里葉變換頻譜輸出
[打印本頁]
作者:
51hei小林
時間:
2016-9-25 10:56
標題:
51單片機ADC采樣傅里葉變換頻譜輸出
//完成顯示數據的轉換工作,包括定點下落速度控制以及定點更新定格
// 對fft數據進行處理,得到各個頻率短的電壓增幅值
//++++++++++++++++++++++++++++++++++++++//
//復數乘法
void ee(struct compx b1,uchar data b2)
{
temp.real=b1.real*iw[2*b2]-b1.imag*iw[2*b2+1];
temp.imag=b1.real*iw[2*b2+1]+b1.imag*iw[2*b2];
}
//++++++++++++++++++++++++++++++++++++++//
//乘方函數
uint mypow(uchar data nbottom,uchar data ntop)
{
uint data result=1;
uchar data t;
for(t=0;t<ntop;t++)result*=nbottom;
return result;
}
//++++++++++++++++++++++++++++++++++++++//
//快速傅里葉變換
void fft(struct compx *xin,uchar data N)
{
uchar data fftnum,i,j,k,l,m,n,disbuff,dispos,dissec;
data struct compx t;
fftnum=N; //傅里葉變換點數
for(m=1;(fftnum=fftnum/2)!=1;m++);//求得M的值
for(k=0;k<=N-1;k++) //碼位倒置
{
n=k;
j=0;
for(i=m;i>0;i--) //倒置
{
j=j+((n%2)<<(i-1));
n=n/2;
}
if(k<j){t=xin[1+j];xin[1+j]=xin[1+k];xin[1+k]=t;}//交換數據
}
for(l=1;l<=m;l++) //FFT運算
{
disbuff=mypow(2,l); //求碟間距離
dispos=disbuff/2; //求碟間兩點之間距離
for(j=1;j<=dispos;j++)
for(i=j;i<N;i=i+disbuff) //遍歷M級所有碟形
{
dissec=i+dispos; //求第二點位置
ee(xin[dissec],(uint)(j-1)*(uint)N/disbuff);//復數乘法
t=temp;
xin[dissec].real=xin[i].real-t.real;
xin[dissec].imag=xin[i].imag-t.imag;
xin[i].real=xin[i].real+t.real;
xin[i].imag=xin[i].imag+t.imag;
}
}
}
void processfft(void)
{
uchar data pt=0,tmp;
for(pt=1;pt<65;pt++)
{
dd[pt].imag=0; //清零需部
}
fft(dd,64); //對當前數據進行傅里葉變換
for(pt=1;pt<65;pt++)
{
dd[pt].real=sqrt(dd[pt].real*dd[pt].real+dd[pt].imag*dd[pt].imag);//取均方根
}
if(Menu==1)
{
for(pt=2;pt<34;pt+=2)
{
for(tmp=(dd[pt].real/32)+1,LEDBuf[pt]=0xFF;tmp>=1;tmp--)//tmp>1;不保留最低位那一行長亮
{
LEDBuf[pt]<<=1;
}
LEDBuf[pt]=~(LEDBuf[pt]);
}
}
else if(Menu==2)
{
//ÏÂÂä¸D
for(pt=2;pt<34;pt+=2)
{
tmp=(dd[pt].real/32)+1;
if(refreshflag[pt]<tmp) //刷新數據取較大高度值 存儲顯示
{
for(LEDBuf[pt]=0xFF;tmp>1;tmp--)//tmp>1;不保留 最低位那一行長亮;{}一次也不執行
{
LEDBuf[pt]<<=1;
}
refreshflag[pt]=(dd[pt].real/32)+1;
}
else
{
if(refreshflag[pt]>1)refreshflag[pt]--; //定點下落速度控制 改變值可以改變下落速度
for(LEDBuf[pt]=0xFF,tmp=refreshflag[pt];tmp>1;tmp--) //tmp>1;不保留 最低位 那一行長亮
{
LEDBuf[pt]<<=1;
}
}
}
}
else if(Menu==0)
{
//ÏÂÂä¸DÆμÆ×
for(pt=2;pt<34;pt+=2)
{
tmp=(dd[pt].real/32)+1;
if(refreshflag[pt]<tmp) //刷新數據取較大高度值 存儲顯示
{
for(LEDBuf[pt]=0xFF;tmp>=1;tmp--)//tmp>1;不保留 最低位那一行長亮;{}一次也不執行
{
LEDBuf[pt]<<=1;
}
refreshflag[pt]=(dd[pt].real/32)+1;
}
else
{
if(refreshflag[pt]>1)refreshflag[pt]--;
for(LEDBuf[pt]=0xFF,tmp=refreshflag[pt];tmp>=1;tmp--)
{
LEDBuf[pt]<<=1;
}
}
LEDBuf[pt]=~(LEDBuf[pt]);
}
}
}
復制代碼
作者:
yxf0915
時間:
2017-10-12 09:18
請問這里 “Menu” = 0,1,2 是什么意思?
作者:
51黑電子名字
時間:
2018-3-12 15:50
yxf0915 發表于 2017-10-12 09:18
**** 作者被禁止或刪除 內容自動屏蔽 ****
我也搞不懂這個,同問
作者:
磊雷雷
時間:
2018-7-29 12:13
可用嗎
作者:
zouzichun
時間:
2019-9-2 15:14
這代碼亂寫的,沒啥用
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1