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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

c语言程序改频率,求问。这个fft c语言程序 采样的声音频率为多少?

發(fā)布時間:2023/11/30 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言程序改频率,求问。这个fft c语言程序 采样的声音频率为多少? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

timernum,timernum2,LEDnum3,Ltime;//用于分離

/*加入數(shù)組用于顯示相應(yīng)led燈數(shù)目*/

uchar lednum[]={0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};//0-7的顯示數(shù)組??P2組控制

int xdata FftReal[SAMPLE_NUM];

int xdata FftImage[SAMPLE_NUM];

sbit p30=P3^0;

sbit p31=P3^1;

sbit p32=P3^2;

sbit p33=P3^3;

sbit p34=P3^4;

sbit p35=P3^5;//9-11的led控制

sbit p36=P3^6;

sbit p37=P3^7;

void timerinit()//定時器 初始化函數(shù)

{

TMOD=0x01;

TH0=(65536-6000)/256;

TL0=(65536-6000)%256;

EA=1;

ET0=1;

TR0=1;

}

void disp()

{

timernum++;

if(timernum==6) timernum=1;

P2=0;//顯示前先關(guān)閉

P3=P3&0x1f;

switch(timernum)

{

case 1:anum=a[0];p34=0;p33=1;p32=1;p31=1;p30=1;break;

case 2:anum=a[1];p34=1;p33=0;p32=1;p31=1;p30=1;break;

case 3:anum=a[2];p34=1;p33=1;p32=0;p31=1;p30=1;break;

case 4:anum=a[3];p34=1;p33=1;p32=1;p31=0;p30=1;break;

case 5:anum=a[4];p34=1;p33=1;p32=1;p31=1;p30=0;break;

}

//anum=a[10];/*修改可以改變光柱高度 (anum值分開幾個部分用定時器區(qū)分顯示)(a[]內(nèi)逐加) */

if(anum<=8){P2=lednum[anum];P3=P3&0x1f;}//屏蔽高三位

//else {P2=0xff;P3=lednum2[anum-9];}

if(anum==9){P2=0xff;p35=1;p36=0;p37=0;}

if(anum==10){P2=0xff;p35=1;p36=1;p37=0;}

if(anum==11){P2=0xff;p35=1;p36=1;p37=1;}

}

uchar STC_ADC()? ? ? ? ? ? ? ?? ? //!!根據(jù)數(shù)據(jù)手冊寫一個ad讀取函數(shù)

{

uchar i;

ADC_RES? ?= 0;

ADC_RESL??= 0;

ADC_CONTR = BIN(10001000);

i=3;

while(i--);

while (1)

{

if (ADC_CONTR & BIN(10000))

{

break;

}

}

ADC_CONTR = BIN(10000000);

return( ADC_RESL<<2) ;

}

short sqrt_16( unsigned long M)

{

unsigned int N, i;

unsigned long tmp, ttp;

if( M == 0 )

return 0;

N = 0;

tmp = ( M >> 30 );

M <<= 2;

if( tmp > 1 )

{

N ++;

tmp -= N;

}

for( i=15; i>0; i-- )

{

N <<= 1;

tmp <<= 2;

tmp += (M >> 30);

ttp = N;

ttp = (ttp<<1)+1;

M <<= 2;

if( tmp >= ttp )

{

tmp -= ttp;

N ++;

}

}

return N;

}

void FFT()

{

register? ? uchar i,bb,j,k,p,max;

register short TR,TI,temp;

unsigned long ulReal;

unsigned long ulImage;

for(i=0; i

{

FftReal[BRTable[i]] = STC_ADC()<

FftImage[i] = 0;

}

keepnum=FftReal[2]/32;//提取等級數(shù)

if((7

else if((4

else if((2

else {keep=5;}

for( i=1; i<=NUM_2_LOG; i++)

{

bb=1;

bb <<= (i-1);

for( j=0; j<=bb-1; j++)

{

p=1;

p <<= (NUM_2_LOG-i);

p = p*j;

for( k=j; k

{

TR = FftReal[k]; TI = FftImage[k]; temp = FftReal[k+bb];

FftReal[k] = FftReal[k] + ((FftReal[k+bb]*cos_tabb[p])>>7) + ((FftImage[k+bb]*sin_tabb[p])>>7);

FftImage[k] = FftImage[k] - ((FftReal[k+bb]*sin_tabb[p])>>7) + ((FftImage[k+bb]*cos_tabb[p])>>7);

FftReal[k+bb] = TR - ((FftReal[k+bb]*cos_tabb[p])>>7) - ((FftImage[k+bb]*sin_tabb[p])>>7);

FftImage[k+bb] = TI + ((temp*sin_tabb[p])>>7) - ((FftImage[k+bb]*cos_tabb[p])>>7);

FftReal[k]??>>= 1;

FftImage[k]??>>= 1;

FftReal[k+bb]??>>= 1;

FftImage[k+bb]??>>= 1;

}

}

}

max=0;

for( i=0; i<5; i++)//5

{

ulReal = FftReal[i+1];

ulReal *= ulReal;

ulImage = FftImage[i+1];

ulImage *= ulImage;

a[i] = sqrt_16( ulReal + ulImage );? ?//修改

if( a[i] < FFT_OUT_MIN )

a[i] = 0;//修改

else

a[i] = a[i]-FFT_OUT_MIN;

if( a[i] >max)

max =a[i];

//disp();

}

if(max>11) //11

{

max/=11;

for( i=0; i<5; i++) //輸出a的5個分離數(shù)值

{

a[i]/=max;

}

}

}

void main()

{

P2M0=0xff;//??BIN(11111111);//P2組設(shè)置為推挽輸出

P2M1=0;

P3M0=0xe0;//??BIN(11111111);

P3M1=0;

P1M0=0x00;

P1M1=0x01;

P1ASF =1;? ? ? ?? ? //設(shè)置P1.0為AD口

AUXR1 =BIN(100);

keep=0;

keepnum=0;

timerinit();//定時器初始化

timernum=3;//從3開始

timernum2=0;

while(1)

{

FFT();

}

}

void timer0() interrupt 1

{

TH0=(65536-6000)/256;? ? ? ???//6000

TL0=(65536-6000)%256;

disp();

}

0

總結(jié)

以上是生活随笔為你收集整理的c语言程序改频率,求问。这个fft c语言程序 采样的声音频率为多少?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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