#include "MSP430X16X.h"
#include "math.h"
#include "OCMJ4X8C.h"
#include"MSP430KEY.h"
#include"df_timera.h"
#define num_point 256 //取样点数
#define num_grade 8 //蝶形运算阶数
const float tab_sin[256]={
0, 0.0245, 0.0491, 0.0736, 0.0980, 0.1224, 0.1467, 0.1710, 0.1951,
0.2191, 0.2430, 0.2667, 0.2903, 0.3137, 0.3369, 0.3599, 0.3827, 0.4052,
0.4276, 0.4496, 0.4714, 0.4929, 0.5141, 0.5350, 0.5556, 0.5758, 0.5957,
0.6152, 0.6344, 0.6532, 0.6716, 0.6895, 0.7071, 0.7242, 0.7410, 0.7572,
0.7730, 0.7883, 0.8032, 0.8176, 0.8315, 0.8449, 0.8577, 0.8701, 0.8819,
0.8932, 0.9040, 0.9142, 0.9239, 0.9330, 0.9415, 0.9495, 0.9569, 0.9638,
0.9700, 0.9757, 0.9808, 0.9853, 0.9892, 0.9925, 0.9952, 0.9973, 0.9988,
0.9997, 1.0000, 0.9997, 0.9988, 0.9973, 0.9952, 0.9925, 0.9892, 0.9853,
0.9808, 0.9757, 0.9700, 0.9638, 0.9569, 0.9495, 0.9415, 0.9330, 0.9239,
0.9142, 0.9040, 0.8932, 0.8819, 0.8701, 0.8577, 0.8449, 0.8315, 0.8176,
0.8032, 0.7883, 0.7730, 0.7572, 0.7410, 0.7242, 0.7071, 0.6895, 0.6716,
0.6532, 0.6344, 0.6152, 0.5957, 0.5758, 0.5556, 0.5350, 0.5141, 0.4929,
0.4714, 0.4496, 0.4276, 0.4052, 0.3827, 0.3599, 0.3369, 0.3137, 0.2903,
0.2667, 0.2430, 0.2191, 0.1951, 0.1710, 0.1467, 0.1224, 0.0980, 0.0736,
0.0491, 0.0245, 0.0000,-0.0245,-0.0491,-0.0736,-0.0980,-0.1224,-0.1467,
-0.1710,-0.1951,-0.2191,-0.2430,-0.2667,-0.2903,-0.3137,-0.3369,-0.3599,
-0.3827,-0.4052,-0.4276,-0.4496,-0.4714,-0.4929,-0.5141,-0.5350,-0.5556,
-0.5758,-0.5957,-0.6152,-0.6344,-0.6532,-0.6716,-0.6895,-0.7071,-0.7242,
-0.7410,-0.7572,-0.7730,-0.7883,-0.8032,-0.8176,-0.8315,-0.8449,-0.8577,
-0.8701,-0.8819,-0.8932,-0.9040,-0.9142,-0.9239,-0.9330,-0.9415,-0.9495,
-0.9569,-0.9638,-0.9700,-0.9757,-0.9808,-0.9853,-0.9892,-0.9925,-0.9952,
-0.9973,-0.9988,-0.9997,-1.0000,-0.9997,-0.9988,-0.9973,-0.9952,-0.9925,
-0.9892,-0.9853,-0.9808,-0.9757,-0.9700,-0.9638,-0.9569,-0.9495,-0.9415,
-0.9330,-0.9239,-0.9142,-0.9040,-0.8932,-0.8819,-0.8701,-0.8577,-0.8449,
-0.8315,-0.8176,-0.8032,-0.7883,-0.7730,-0.7572,-0.7410,-0.7242,-0.7071,
-0.6895,-0.6716,-0.6532,-0.6344,-0.6152,-0.5957,-0.5758,-0.5556,-0.5350,
-0.5141,-0.4929,-0.4714,-0.4496,-0.4276,-0.4052,-0.3827,-0.3599,-0.3369,
-0.3137,-0.2903,-0.2667,-0.2430,-0.2191,-0.1951,-0.1710,-0.1467,-0.1224,
-0.0980,-0.0736,-0.0491,-0.0245};
//float tab_dftR[num_point]; //输入的波形数据,兼作输出数据的实部
float tab_dftI[num_point]; //输出数据的虚部
float tab_power[num_point]; //模,频率对应的功率谱
float result[num_point]; //AD转换结果
float power_t=0; //时域总功率
float power_f=0; //频域总功率
unsigned int data1;
unsigned int data2;
unsigned char disp1[16];
unsigned char disp2[16];
unsigned int num_B=0;
unsigned int mem[num_point];
//以下为液晶显示信息
unsigned char Text[]=
{
"中山大学 "
"请按E 键开始 "
"音频信号分析仪 "
"按R 键返回 "
};
unsigned char Start[]=
{
"按E 键采集信号 "
"按R 键返回 "
"进行FFT 分析 "
"系统会在5S后返回"
};
unsigned char Sure[]=
{
"请按确定键把FFT "
"每按一次显示 "
"的功率谱分布显示"
"一个功率值 "
};
void InitSys();
void fft(float dataR[num_point],float dataI[num_point]); //FFT变换
void get_power_t(float result[num_point]);//计算时域功率,一定要放于void FFT前,否则result数据被覆盖
void get_power(float result[num_point],float dataI[num_point]); //求模
void AD_timeB();
void AdcConvert(unsigned char *Numeral,unsigned int result);
void sort(float* mod,unsigned int* count_in);//排序
//static unsigned int length;
void main( void )
{
unsigned char key[2],LCD_data[16];
unsigned int count,freq_count;
unsigned long data1,data2;
float data3,data4;
signed long Chan_data;
unsigned int count_index[num_point/2];
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
for(unsigned int p0=0;p0<num_point/2;p0++)
count_index[p0]=p0;
InitSys();
start:
count=0;
chn_disp (Text);//输出实验人信息
while(1)
{
key[0]=GetKeyZhi(&key[1]);
if(key[0]==0x84)
break;
LPM3;
}
clrram();
chn_disp(Start);
/*
while(1)
{
key[0]=GetKeyZhi(&key[1]);
if(key[0]==0x88)
goto start;
if(key[0]==0x84)
break;
LPM3;
}
clrram();
chn_disp(Signal);
*/
AD_timeB();
while(1)
{
if(num_B==num_point)
{
ADC12CTL0&=~ENC;
TBCTL&=~(BIT5+BIT4);
break;
}
}
for(unsigned int q4=0;q4<num_point;q4++)
{
Chan_data=mem[q4];
Chan_data -=0x7FF;
Chan_data *=5;
result[q4] =((float)Chan_data)/4095;
}
get_power_t(result);
fft(result,tab_dftI);
get_power(result,tab_dftI);
sort(tab_power,count_index);
clrram();
chn_disp(Sure);
while(1)
{
key[0]=GetKeyZhi(&key[1]);
if(key[0]==0x88)
goto start;
if(key[0]==0x84)
break;
}
/*
freq_count =count_index[count]*100;
data3=tab_power[count];
data1=(unsigned int)tab_power[count];
tab_power[count]=tab_power[count]-data1;
data2=(unsigned int)(tab_power[count]*10000);
tab_power[count]=data3;
Convert(LCD_data,data1,data2,freq_count);
line_disp(LCD_data,0x80);
count++;
*/
freq_count =count_index[count]*100;
data3=tab_power[count];
data1=(unsigned int)data3;
data3=data3-data1;
data2=(unsigned int)(data3*10000);
Convert(LCD_data,data1,data2,freq_count);
line_disp(LCD_data,0x80);
count++;
freq_count =count_index[count]*100;
data3=tab_power[count];
data1=(unsigned int)data3;
data3=data3-data1;
data2=(unsigned int)(data3*10000);
Convert(LCD_data,data1,data2,freq_count);
line_disp(LCD_data,0x90);
count++;
freq_count =count_index[count]*100;
data3=tab_power[count];
data1=(unsigned int)data3;
data3=data3-data1;
data2=(unsigned int)(data3*10000);
Convert(LCD_data,data1,data2,freq_count);
line_disp(LCD_data,0x88);
count++;
freq_count =count_index[count]*100;
data3=tab_power[count];
data1=(unsigned int)data3;
data3=data3-data1;
data2=(unsigned int)(data3*10000);
Convert(LCD_data,data1,data2,freq_count);
line_disp(LCD_data,0x98);
while(1);
/*
while(count!=101)
{
key[0]=GetKeyZhi(&key[1]);
if(key[0]==0x88)
goto start;
if(key[0]==0x84)
{
clrram();
tab_power[count]*=10000;
data1=(unsigned int)tab_power[count];
freq_count =count*100;
count++;
Convert(LCD_data,data1,freq_count);
line_disp(LCD_data,0x80);
tab_power[count]*=10000;
data2=(unsigned int)tab_power[count];
freq_count =count*100;
count++;
Convert(LCD_data,data2,freq_count);
line_disp(LCD_data,0x90);
tab_power[count]*=10000;
data3=(unsigned int)tab_power[count];
freq_count =count*100;
count++;
Convert(LCD_data,data3,freq_count);
line_disp(LCD_data,0x88);
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
FFT.rar (21个子文件)
FFT
MSP430KEY.c 5KB
df_timera.h 190B
main.c 14KB
settings
FFT7.wsdt 4KB
FFT7.dbgdt 6KB
FFT7.cspy.bat 2KB
FFT7.dni 952B
FFT7.dep 5KB
FFT7.ewp 44KB
df_timera.c 1KB
OCMJ4X8C.h 792B
Debug
Obj
main.r43 62KB
OCMJ4X8C.r43 30KB
MSP430KEY.r43 17KB
FFT7.pbd 372B
df_timera.r43 7KB
List
Exe
FFT7.d43 41KB
OCMJ4X8C.c 5KB
FFT7.eww 158B
MSP430KEY.h 281B
FFT7.ewd 12KB
共 21 条
- 1
henryliu911
- 粉丝: 3
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
前往页