日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

工程中DSP代码片断

發(fā)布時間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 工程中DSP代码片断 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
//主程序

#include?
"LF2407.H"
#include?
"math.h"
#include?
"verable.h"?????//定義用到的各個全局變量
#include?"inicial.c"????//系統(tǒng)初始化,CAP6捕獲初始化,AD采樣初始化,SCI串口通信初始化
#include?"dataprocess.c"?????//處理AD采樣的到的數(shù)據(jù),以便于用串口與上位機(jī)進(jìn)行通信
#include?"send_rece.c"?????//串口的收發(fā)中斷服務(wù)程序子函數(shù)
#include?"interrupt.c"?????//各種中斷服務(wù)程序,包括AD,串口,捕獲,phantom
#include?"fft_table.c"????//定義fft中運(yùn)用到的sin和cos表?????

#define?wsgr?portffff?????//0xFFFF(I/O?space)?is?address?of?register?WSGR
ioport?
uint?portffff;

void?delay(long?int?a)
{
????
long?int?i;
????
for(i=0;i<a;i++);
}

void?Feed_Dog()
{
??
*WDKEY=0x0055;
??
*WDKEY=0x00AA;
}

void?main(void)
{???
????
int?i=0;?
????
int?j;??

????disable();????
//禁止所有可屏蔽的中斷
????initial();?????//系統(tǒng)初始化2?
????Feed_Dog();//edit?by?liuwei
????wsgr=0x100;????//bus?visibility?off;IO?space?4?wait?states;both?data?and?program?space?0?wait?states
??????ADINITIAL();?????//AD采樣初始化?
??????T3initial();?????//T3初始化,用來作為發(fā)送最后一位的延時,在發(fā)送最后一位時,打開T3計時器,周期中斷時將485控制線置位接收狀態(tài)。
????cap1_initial();??????//CAP1捕獲初始化????????????????????
????cap4_initial();??????//CAP4捕獲初始化????????????????????
????RS232();????//SCI模塊初始化
????while(1)
????
{???
????????
while(adcounter<64)?/**//*沒有采到64點前,等待*/
????????
{};
????????
if(adcounter==64)???/**//*采滿64點,開始fft計算*/
????????
{??
????????????adcounter
=0;
????????????
????????????
//后兩行程序用來調(diào)試程序時,利用T4的數(shù)據(jù)寄存器看fft算法和數(shù)據(jù)處理所需時間
????????
//????*T4CNT=0x00;?
????????
//?????*T4CON=*T4CON|0x0040;?????????
????????????
????????????
????????????
if(Vcenterpreselect[0]>2)????//首先判斷是否第2級已經(jīng)飽和,如果第2級飽和,那么選擇第1級
????????????{???
????????????????Vcenter_choice
=0;
????????????}

????????????
else?if?(Vcenterpreselect[1]>2)????//如果第2級沒有飽和而第3級飽和,那么選擇第2級
????????????{
????????????????Vcenter_choice
=1;
????????????}

????????????
else????????????????//如果第2級第3級都沒有飽和,那么選擇第3級
????????????{
????????????????Vcenter_choice
=2;
????????????}
??
????????????Vcenterpreselect[
0]=0;
????????????Vcenterpreselect[
1]=0;

?????????????????
for(i=0;i<64;i++)
????????????
{
????????????????dataR[
0][i]=dataC[Vcenter_choice][i];
????????????}
????
????????
????????????
for(i=0;i<64;i++)?????//最終有6路信號參與FFT變換,這6路信號都放在2維數(shù)組dataR[8][64]中的前6行中????
????????????{???
????????????????
for(j=1;j<6;j++)
????????????????
{
????????????????????dataR[j][i]
=dataC[j+2][i];
????????????????}

????????????}
?
????????????
for(j=0;j<6;j++)
????????????
{
????????????????FR[j]
=0;
????????????????FI[j]
=0;????
????????????}

????????????
????????????
for(j=0;j<6;j++)
????????????
{
????????????????FR[j]
=(dataR[j][1]+dataR[j][63]-dataR[j][31]-dataR[j][33])*cos_tab[1];
????????????????FR[j]
+=(dataR[j][2]+dataR[j][62]-dataR[j][30]-dataR[j][34])*cos_tab[2];??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????FR[j]
+=(dataR[j][3]+dataR[j][61]-dataR[j][29]-dataR[j][35])*cos_tab[3];
????????????????FR[j]
+=(dataR[j][4]+dataR[j][60]-dataR[j][28]-dataR[j][36])*cos_tab[4];
????????????????FR[j]
+=(dataR[j][5]+dataR[j][59]-dataR[j][27]-dataR[j][37])*cos_tab[5];
????????????????FR[j]
+=(dataR[j][6]+dataR[j][58]-dataR[j][26]-dataR[j][38])*cos_tab[6];
????????????????FR[j]
+=(dataR[j][7]+dataR[j][57]-dataR[j][25]-dataR[j][39])*cos_tab[7];
????????????????FR[j]
+=(dataR[j][8]+dataR[j][56]-dataR[j][24]-dataR[j][40])*cos_tab[8];
????????????????FR[j]
+=(dataR[j][9]+dataR[j][55]-dataR[j][23]-dataR[j][41])*cos_tab[9];
????????????????FR[j]
+=(dataR[j][10]+dataR[j][54]-dataR[j][22]-dataR[j][42])*cos_tab[10];
????????????????FR[j]
+=(dataR[j][11]+dataR[j][53]-dataR[j][21]-dataR[j][43])*cos_tab[11];
????????????????FR[j]
+=(dataR[j][12]+dataR[j][52]-dataR[j][20]-dataR[j][44])*cos_tab[12];
????????????????FR[j]
+=(dataR[j][13]+dataR[j][51]-dataR[j][19]-dataR[j][45])*cos_tab[13];
????????????????FR[j]
+=(dataR[j][14]+dataR[j][50]-dataR[j][18]-dataR[j][46])*cos_tab[14];
????????????????FR[j]
+=(dataR[j][15]+dataR[j][49]-dataR[j][17]-dataR[j][47])*cos_tab[15];
????????????????FR[j]
+=(dataR[j][0]-dataR[j][32])*cos_tab[0];
??????????????????????
????????????????FI[j]
=(dataR[j][1]+dataR[j][31]-dataR[j][33]-dataR[j][63])*sin_tab[1];
????????????????FI[j]
+=(dataR[j][2]+dataR[j][30]-dataR[j][34]-dataR[j][62])*sin_tab[2];
????????????????FI[j]
+=(dataR[j][3]+dataR[j][29]-dataR[j][35]-dataR[j][61])*sin_tab[3];
????????????????FI[j]
+=(dataR[j][4]+dataR[j][28]-dataR[j][36]-dataR[j][60])*sin_tab[4];
????????????????FI[j]
+=(dataR[j][5]+dataR[j][27]-dataR[j][37]-dataR[j][59])*sin_tab[5];
????????????????FI[j]
+=(dataR[j][6]+dataR[j][26]-dataR[j][38]-dataR[j][58])*sin_tab[6];
????????????????FI[j]
+=(dataR[j][7]+dataR[j][25]-dataR[j][39]-dataR[j][57])*sin_tab[7];
????????????????FI[j]
+=(dataR[j][8]+dataR[j][24]-dataR[j][40]-dataR[j][56])*sin_tab[8];
????????????????FI[j]
+=(dataR[j][9]+dataR[j][23]-dataR[j][41]-dataR[j][55])*sin_tab[9];
????????????????FI[j]
+=(dataR[j][10]+dataR[j][22]-dataR[j][42]-dataR[j][54])*sin_tab[10];
????????????????FI[j]
+=(dataR[j][11]+dataR[j][21]-dataR[j][43]-dataR[j][53])*sin_tab[11];
????????????????FI[j]
+=(dataR[j][12]+dataR[j][20]-dataR[j][44]-dataR[j][52])*sin_tab[12];
????????????????FI[j]
+=(dataR[j][13]+dataR[j][19]-dataR[j][45]-dataR[j][51])*sin_tab[13];
????????????????FI[j]
+=(dataR[j][14]+dataR[j][18]-dataR[j][46]-dataR[j][50])*sin_tab[14];
????????????????FI[j]
+=(dataR[j][15]+dataR[j][17]-dataR[j][47]-dataR[j][49])*sin_tab[15];
????????????????FI[j]
+=(dataR[j][16]-dataR[j][48])*sin_tab[16];
??????????????????????
????????????????
//因為sin,cos中都抬高了2^14倍,這里要再變回來因為FR[j]的數(shù)據(jù)類型是32bit?long型,而后面?zhèn)鬏斒?*2?int型??????????
????????????????FR[j]=FR[j]>>14;
????????????????FI[j]
=FI[j]>>14;?????????

????????????????
//算取相位,范圍是0~360度,下面是把FR作為虛軸,FI作為實軸來計算的!!!!!!!!????????????????????????
????????????????tempA=FR[j]*FR[j];
????????????????tempB
=FI[j]*FI[j];
????????????????tempC
=(long)(sqrt(tempA+tempB)+0.5);
????????????????tempD
=((float)FR[j])/((float)tempC);
????????????????amplitude[j]
=tempC;
????????????????
????????????????
if(tempD>1.0)
????????????????
{
????????????????????tempD
=1.0;
????????????????}
?????????????????
????????????????
if(tempD<-1.0)
????????????????
{
????????????????????tempD
=-1.0;
????????????????}

????
????????????????tempE
=asin(tempD);
????????????????tempE
=tempE*57.3;
????????????????????????
????????????????Phrase[j]
=tempE;????????????????????
????????????????Phrase[j]
=Phrase[j]*100;?
????????????????
if(FI[j]<0)
????????????????
{???????????????????????????????
????????????????????Phrase[j]
=18000-Phrase[j];
????????????????}

????????????????
else
????????????????
{
????????????????????Phrase[j]
=Phrase[j];
????????????????}
?
????????????????
if(Phrase[j]<0)
????????????????
{
????????????????????Phrase[j]
=Phrase[j]+36000;
????????????????}
?????
????????????}
?????????????
????????????
????????????
if?(time_ad==0)????/**//*ad?采樣次數(shù),奇偶次分別用不同的數(shù)組?*/
????????????
{??
????????????????dataprocess1();
????????????????time_ad
=1;?//數(shù)據(jù)處理后放在datagrone[]中,datagrone[]中的數(shù)據(jù)更新完畢之后time_ad才會=1?
????????????
????????????}

????????????
else
????????????
{
????????????????dataprocess2();
????????????????time_ad
=0;???????//數(shù)據(jù)處理后放在datagrtwo[]中,datagrtwo[]中的數(shù)據(jù)更新完畢之后time_ad才會=0
???????????????
????????????}
?
????????????timer3
=timer3+1;//對主函數(shù)中FFT計算的次數(shù)進(jìn)行計數(shù)
????????}

????}
????????
}

這是我的一個工程里面DSP芯片的主程序,其他都很簡單,主要用到了一個蝴蝶算法。

轉(zhuǎn)載于:https://www.cnblogs.com/coffeeliu/archive/2006/04/19/379405.html

總結(jié)

以上是生活随笔為你收集整理的工程中DSP代码片断的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。