![]() |
|
||||||||||||||
| . 网站首页 . 新闻 . 新品 . 方案 . 专访 . 活动 . DSP . EDA . 评测 . 技术文库 . 会员区 . 商城 . 服务导航 . 邮购 . 资源 . | ||
|
||
|
|||||
| DSP中重要的傅立叶变换的源程序 | |||||
作者:Free 文章来源:本站原创 点击数: 更新时间:2008-2-25 ![]() |
|||||
|
#include<stdio.h>
#include<math.h> #include<float.h> #include<malloc.h> #include<stdlib.h> void initial(int num_data, float* real, float* inm); void enter_data(int num_data, float* data); void wave_sin(int num_data, float* data); void wave_cos(int num_data, float* data); void decay(int num_data, float* data); void random(int num_data, float* data); void table(int num_data, char flag, float* tablesin, float* tablecos); void DFT(int num_data, char flag, float* real, float* img, float* tablesin, float* tablecos); float period; void main() { int num_data; int i; char flag; float *real, *img; float *tablecos, *tablesin; printf("PLEASE INPUT SAMPLE PERIOD(Second):"); scanf("%f", &period); printf("PLEASE INPUT SAMPLE POINT NUMBER:"); scanf("%d", &num_data); fflush(stdin); printf("DFT OR IDFT (D/I):"); flag=getchar(); if(flag==‘d’) flag=‘D’; if(flag==‘i’) flag=‘I’; printf("\n"); real=(float*)malloc(sizeof(float)* num_data); img=(float*)malloc(sizeof(float)* num_data); tablesin=(float*)malloc(sizeof(float)* num_data); tablecos=(float*)malloc(sizeof(float)* num_data); initial(num_data, real, img); table(num_data, flag, tablesin, tablecos); DFT(num_data, flag, real, img, tablesin, tablecos); for(i=0; i<num_data; i++) printf("%8d real=%12.6f img=%12.6f\n", i, real, img); free(real); free(img); free(tablesin); free(tablecos); } void initial(int num_data, float* real, float* img) { int n; for(n=0; n<num_data; n++) { real[n]=0; img[n]=0; } printf("INITIAL REAL DATA\n"); enter_data(num_data, real); printf("\nINITIAL IMG DATA\n"); enter_data(num_data, img); } void enter_data(int num_data, float* data) { int selection; printf("FUNCTION SELECTION\n"); printf("1-----AMPLITUDE*SIN(2*3.1415926 *FREQUENCY*PERIOD*T)\n"); printf(& quot;2-----AMPLITUDE*COS(2*3.1415926 *FREQUENCY*PERIOD*T)\n"); printf("3-----AMPLITUDE*EXP(-PERIOD)\n"); printf("4-----DATA=0\n"); printf("5-----ENTER DATA\n"); printf("ENTER SELECTION---"); scanf("%d", &selection); switch(selection) { case 1:wave_sin(num_data, data);break; case 2:wave_cos(num_data, data);break; case 3:decay(num_data, data);break; case 4:break; case 5:random(num_data, data);break; } } void wave_sin(int num_data, float* data) { float amplitude, frequency, c; int n; printf("PLEASE INPUT AMPLITUDE OF WAVE:\n"); scanf("%f", &litude); printf("PLEASE INPUT FREQUENCY OF WAVE(Hz):\n"); scanf("%f", &frequency); for(n=0; n<num_data; n++) { c=2*3.1415926*frequency*period*n; data[n]=(float)(amplitude*sin(c)); } } void wave_cos(int num_data, float* data) { float amplitude, frequency, c; int n; printf("PLEASE INPUT AMPLITUDE OF WAVE:\n"); scanf("%f", &litude); printf("PLEASE INPUT FREQUENCY OF WAVE(Hz):\n"); scanf("%f", &frequency); for(n=0; n<num_data; n++) { c=2*3.1415926*frequency*period*n; data[n]=(float)(amplitude*cos(c)); } } void decay(int num_data, float* data) { float amplitude, c; int n; printf("PLEASE INPUT AMPLITUDE OF WAVE\n"); scanf("%f", &litude); for(n=0; n<num_data; n++) { c=-period*n; data[n]=(float)(amplitude*exp(c)); } } void random(int num_data, float* data) { int n; for(n=0; n<num_data; n++) { printf("PLEASE INPUT DATA[%d]:", n); scanf("%f", &data[n]); } } void table(int num_data, char flag, float* tablesin, float* tablecos) { float w, c; int n; w=(float)(8*atan(1)/num_data); if(flag==‘D’) w=-w; for(n=0; n<num_data; n++) { c=w*n; tablecos[n]=(float)cos(c); tablesin[n]=(float)sin(c); } } void DFT(int num_data, char flag, float* img, float* tablesin, float* tablecos) { int i, j, L; float *result_r, *result_i; result_r=(float*)malloc(sizeof(float)*num_data); result_i=(float*)malloc(sizeof(float)*num_data); for(i=0; i<num_data; i++) { result_r=0; result_i=0; for(j=0; j<num_data; j++) { L=i*j%num_data; result_r=result_r+real[j]*tablecos[L] +img[j]*tablesin[L]; result_i=result_i+img[j]*tablecos[L] -real[j]*tablesin[L]; } } if(flag==‘D’) { for(i=0; i<num_data; i++) { real=result_r; img=result_i; } } else if(flag==‘I’) { for(i=0; i<num_data; i++) { real=result_r/num_data; img=result_i/num_data; } } free(result_r); free(result_i); } |
|||||
| 欢迎点击进入:TI德州中文网 (国内唯一针对TI应用的中文技术网站) 文章录入:admin 责任编辑:admin | |||||
| 【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 | |||||
| 最新热点 | 最新推荐 | 相关文章 | ||
| 基于双DSP的雷场侦察图像实时… 基于DSP的孤立词语音识别系统… 基于DSP的电子节气门PID控制 基于DSP的多路音/视频采集处… 低功耗实时可编程DSP数字助听… 基于DSP+CPLD的断路器智能控… 基于DSP+CPLD的交流电机调速… 基于DSP的分布式微机保护测控… 基于DSP的语音实时变速系统设… 以ARM和DSP嵌入式系统为核心… |
| 网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!) |
| | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 | 管理登录 | | |||
|
|