欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
STM32寫的頻譜儀的代碼
[打印本頁(yè)]
作者:
heroshi
時(shí)間:
2017-4-18 10:46
標(biāo)題:
STM32寫的頻譜儀的代碼
STM32寫的頻譜儀的代碼
0.png
(59.34 KB, 下載次數(shù): 65)
下載附件
2017-4-19 03:54 上傳
全部源碼下載:
STM32Spectrum.rar
(356.87 KB, 下載次數(shù): 72)
2017-4-18 10:45 上傳
點(diǎn)擊文件名下載附件
頻譜代碼
下載積分: 黑幣 -5
預(yù)覽:
/************************************************************
**注意事項(xiàng):系統(tǒng)直接集成TFF文件系統(tǒng)
**版本:V1.0
**日期:09-6-10
*************************************************************/
#include "STM32Lib\\stm32f10x.h"
#include "hal.h"
#include <stdio.h>
#include "TFT\\TFTdriver.h"
#include "fft\\FFTInc.h"
//-------------------------------主程序--------------------------------------------------
unsigned int FFT_N = 128; //初始化128點(diǎn)
unsigned int ActualBuf[MAX_FFT_N]; //實(shí)部
unsigned int ImagBuf[MAX_FFT_N]; //虛部
unsigned int FFT_dat_W ; //-- 數(shù)據(jù)寬度
unsigned char Distance ; //-- 頻譜條間隔距離
unsigned char Article_W ; //-- 頻譜條寬度
unsigned char DOWN_SP ; //-- 頻譜條跌落速度
unsigned char DOWN_bit ; //-- 頻譜點(diǎn)跌落速度
unsigned char MAX_bit_del ; //-- 頻譜點(diǎn)跌維持時(shí)間
unsigned int TFT_FFT_H ; //-- 頻譜顯示區(qū)高度
unsigned char FFT_Bit;
unsigned char show_sav[MAX_FFT_N/2]; //--頻譜條緩存
unsigned int show_bit[MAX_FFT_N/2]; //--頻譜點(diǎn)緩存
void FFT_Show_Init( unsigned int n )
{
unsigned int i;
FFT_dat_W = n / 2; //-- 數(shù)據(jù)寬度
Distance = 320 / FFT_dat_W ; //-- 頻譜條間隔距離
switch( n )
{
case 16:
Article_W = Distance - 3; //--
DOWN_SP = 1; //--
DOWN_bit = 2; //--
MAX_bit_del = 45; //--
FFT_Bit = 4 ; //--
break;
case 32:
Article_W = Distance - 2;
DOWN_SP = 1 ; //
DOWN_bit = 2 ; //
MAX_bit_del = 40 ; //
FFT_Bit = 5 ;
break;
case 64:
Article_W = Distance - 1;
DOWN_SP = 1 ; //
DOWN_bit = 2 ; //
MAX_bit_del = 35 ; //
FFT_Bit = 6 ;
break;
case 128:
Article_W = Distance - 1;
DOWN_SP = 1 ; //
DOWN_bit = 2 ; //
MAX_bit_del = 30 ; //
FFT_Bit = 7 ;
break;
case 256:
Article_W = Distance - 1;
DOWN_SP = 2 ; //
DOWN_bit = 3 ; //
MAX_bit_del = 25 ; //
FFT_Bit = 8 ;
break;
case 512:
Article_W = Distance;
DOWN_SP = 3 ; //
DOWN_bit = 4 ; //
MAX_bit_del = 20 ; //
FFT_Bit = 9 ;
break;
}
TFT_FFT_H = 239 - DOWN_bit - 1; //-- 頻譜顯示區(qū)高度
for ( i = 0 ;i < MAX_FFT_N / 2;i ++ )
{
show_bit[ i ] = show_sav[ i ] = 0;
}
}
//--------------???--??---------------//
union{
struct{
unsigned B_dat :8; //--
unsigned B_del :8; //--
}Bit_bit;
unsigned int Bit_bits;
}Bit_dat; //---
void FFT_Show( unsigned int *buf )
{
int i,j,dat;
for ( i = 1,j = 0;i < FFT_dat_W ;i ++,j += Distance ) //--
{
Bit_dat.Bit_bits = show_bit[ i ]; //--
TFTRectFill( Bit_dat.Bit_bit.B_dat, j , Bit_dat.Bit_bit.B_dat + DOWN_bit + 1,j + Article_W, BLACK,0);//--擦除無(wú)效點(diǎn)
TFTRectFill( show_sav[i], j , show_sav[i] + DOWN_bit, j + Article_W, BLACK,0);//--擦除無(wú)效頻譜條
if ( buf[ i ] > TFT_FFT_H ) dat = TFT_FFT_H; //--限制頻譜條數(shù)據(jù)在工作區(qū)范圍內(nèi)
else
dat = buf[i];
// buf[i] = 0; //--
if ( show_sav[i] < dat ) //--有新的頻譜條出現(xiàn)
{
TFTRectFill(show_sav[i],j,dat,j + Article_W,RED_BRIGHT,0); //-- 先刷差值
show_sav[i] = dat; //-- 再保存新值
}
if ( Bit_dat.Bit_bit.B_dat < dat ) //--有新的頻譜點(diǎn)出現(xiàn)(不和頻譜條一起刷新)
{
Bit_dat.Bit_bit.B_dat = dat; //--刷新頻譜點(diǎn)
Bit_dat.Bit_bit.B_del = MAX_bit_del; //--頻譜點(diǎn)維持時(shí)間刷新
}
//---- 刷頻譜點(diǎn)
TFTRectFill(Bit_dat.Bit_bit.B_dat,j,Bit_dat.Bit_bit.B_dat+1,j + Article_W,GREEN,0);
if ( show_sav[i] >= DOWN_SP ) show_sav[i] -= DOWN_SP; //頻譜條跌落
else show_sav[i] = 0;
if ( Bit_dat.Bit_bit.B_del ) Bit_dat.Bit_bit.B_del --;//--頻譜點(diǎn)維持
else
if ( Bit_dat.Bit_bit.B_dat - DOWN_bit > show_sav[i] ) //--防止點(diǎn)跌落超過(guò)條
{
if ( Bit_dat.Bit_bit.B_dat >= DOWN_bit )
Bit_dat.Bit_bit.B_dat -= DOWN_bit; //頻譜點(diǎn)跌落
else
Bit_dat.Bit_bit.B_dat = 0;
}
else //--點(diǎn)跌落到條頂部后,再維持
Bit_dat.Bit_bit.B_del = MAX_bit_del;
show_bit[i] = Bit_dat.Bit_bits; //--保存變量
}
}
unsigned char luv = 0;
extern unsigned int adcread(void);
int main(void)
{
ChipHalInit();
ChipOutHalInit();
Lcd_Init(); //初始化
FFT_read:
TFTFill(0,0,240,320,BG_COLOR);
FFT_Show_Init( FFT_N );
Int_FFT_TAB( FFT_N );
for(;;)
{
int i;
int del;
for ( i = 0;i < FFT_N; i++ )
{
ActualBuf [i]= adcread(); // 音頻實(shí)部
ImagBuf[i] = 0; // 音頻虛部
del = 520; // 音頻采樣速率
while(del--);
}
fft( (int *)ActualBuf, (int *)ImagBuf, FFT_Bit, FFT_N );//fft
//--平滑處理
if ( GET_LEFT() ) luv = 1;
if ( GET_RIGHT() ) luv = 0;
//--FFT點(diǎn)數(shù)切換 +
if ( GET_UP() )
{
if ( FFT_N < MAX_FFT_N ) FFT_N <<= 1;
else FFT_N = MIN_FFT_N;
while( GET_UP() );
goto FFT_read;
}
//--FFT點(diǎn)數(shù)切換 -
if ( GET_DOWN() )
{
if ( FFT_N > MIN_FFT_N ) FFT_N >>= 1;
while( GET_DOWN() );
goto FFT_read;
}
if ( luv ) //--簡(jiǎn)單的平滑處理
{
for ( i = 2;i < FFT_N;i ++ )
{
if ( ImagBuf[ i-1 ] > ImagBuf[ i ] ) //-- 前一通道 大于當(dāng)前通道 ,對(duì)當(dāng)前通道進(jìn)行提升
{
ImagBuf[ i ] += ( ( ImagBuf[ i-1 ] - ImagBuf[ i ]) >> 1 ) ;
}
if ( ImagBuf[ i-1 ] < ImagBuf[ i ] ) //-- 當(dāng)前通道 大于 前一通道,對(duì)前一通道進(jìn)行提升
{
ImagBuf[ i-1 ] += ( ( ImagBuf[ i ] - ImagBuf[ i-1 ] ) >> 1);
}
}
}
FFT_Show( ImagBuf );
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
作者:
alai318
時(shí)間:
2017-4-19 09:57
學(xué)習(xí)了,這資料正好有用
作者:
駱駝駝
時(shí)間:
2017-12-20 09:55
學(xué)習(xí)了,謝謝樓主分享
作者:
wxdwxd090503
時(shí)間:
2020-4-14 13:55
正在研究
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1