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

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

/*加入数组用于显示相应led灯数目*/

uchar lednum[]={0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};//0-7的显示数组  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()//定时器 初始化函数

{

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;//显示前先关闭

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值分开几个部分用定时器区分显示)(a[]内逐加) */

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()                   //!!根据数据手册写一个ad读取函数

{

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;//提取等级数

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个分离数值

{

a[i]/=max;

}

}

}

void main()

{

P2M0=0xff;//  BIN(11111111);//P2组设置为推挽输出

P2M1=0;

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

P3M1=0;

P1M0=0x00;

P1M1=0x01;

P1ASF =1;           //设置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();

}

699ba7046c51816a17b33a7caa85f179.png

0

97b4b3417991aabde46fdac613e34292.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java高级面试题!java编程思想怎么学

专题5&#xff1a;Java序列化 1、什么是java序列化&#xff0c;如何实现java序列化&#xff1f; 2、保存(持久化)对象及其状态到内存或者磁盘 3、序列化对象以字节数组保持-静态成员不保存 4、序列化用户远程对象传输 5、Serializable 实现序列化 6、writeObject 和 readO…

计算星期c语言编码,[转载]计算任何一天是星期几的C语言源代码.

[转载]计算任何一天是星期几的C语言源代码.#include int main(){int day,mn,yr,i,days0,s,k;int mont[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};char wek[][9]{ {S,u,n,d,a,y},{M,o,n,d,a,y},{T,u,e,s,d,a,y},{W,e,d,n,s,d,a,y},{T,h,u,r,s,d,a,y},{F,r,i,d,a,y},{S,a,t,u,…

Java高级:mysqllimit两个参数

零基础如何学习Java&#xff1f; 首先&#xff0c;你要明白一点&#xff0c;Java入门不难&#xff01; 无论你是从事哪个行业&#xff0c;兴趣一定是最好的老师&#xff0c;也是你学习的动力。 学习方式1&#xff1a;自学 自学模式其实我个人不建议绝大部分的人选择&#x…

db2 c语言游标名称可以是变量,mysql c语言 游标能取多行吗

满意答案xuyingcxm2015.02.03采纳率&#xff1a;45% 等级&#xff1a;12已帮助&#xff1a;7182人1、 无返回结果语句&#xff0c;如&#xff1a;INSERT,UPDATE,DROP, DELETE等2、 select语句返回单行变量并可传给本地变量(select ..into)3、 返回多行结果集的select语句,并…

从入门到精通!javaidea安装教程

一、秒杀系统架构设计都有哪些关键点&#xff1f; 二、设计秒杀系统时应该注意的5个架构原则 架构原则:“4要1不要” 1.1.数据要尽里少 1.2. 请求数要尽里少 1.3.路径要尽里短 1.4.依赖要尽里少 1.5. 不要有单点2不同场景下的不同架构案例 三、如何才能做好动静分离&#xff1…

-wl是不是c语言的标识符,C语言基础知识考试

第一章 C语言基础知识一、选择题1&#xff0e;C语言规定&#xff0c;必须用 作为主函数名。(0级) A)Function B)include C)main D)stdio2&#xff0e;一个C程序可以包含任意多个不同名的函数&#xff0c;但有且仅有一个 &#xff0c;一个C程序总是从 开始执行。(0级) A)过程 B)…

从入门到精通!java可视化编程软件哪个好

1、我往Redis里写的数据怎么没了&#xff1f; 使用Redis的同学你要明白一点&#xff0c;你为什么用Redis&#xff1f;用redis的作用是什么&#xff1f;用redis的好处是什么&#xff1f;凡事多思考一下为什么&#xff0c;多想想背后的原因。 就在不久前有朋友跟我说过&#xf…

学生档案c语言编程,学生档案管理问题

/* 一个修改版本 */#include struct student{int num;char name[10];char sex;char address[20];};struct student stu[3] {{000, "li lin", m, "103 beijing road"},{001, "zhang fun", m, "130 shanghai road"},{002, "wang …

从思维图到基础再到深入,java空间查询

蚂蚁金服一面&#xff1a; 先自我介绍&#xff0c;讲讲自己基础掌握情况&#xff0c;以及项目经历平时会用到哪些数据结构&#xff1f;链表和数组的优缺点&#xff1f;解决hash冲突的方法有哪些&#xff1f;讲讲自己对HashMap的理解&#xff0c;以及和Weakhashmap的区别&#…

c语言中如何取消最后一个空格,新人提问:如何将输出时每行最后一个空格删除...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼如何将每行最后一个空格删除&#xff0c;使矩阵只有数字间有空格&#xff0c;没有多余空格&#xff1f;#include#includeint main(){int i,j,k,m,n,x,h,y;int a[15][15]{0};while(scanf("%d",&i)){k1;for(n1;n<i;…

从零开始学Java编程!java集合类详解和使用

目录 一、冒泡排序 二、选择排序 三、插入排序 四、快速排序 五、归并排序 六、希尔排序 七、堆排序 八、基数排序&#xff08;桶排序&#xff09; 九、递归 十、链表 十一、栈 十二、队列 十三、二叉树 最后 由于篇幅有限&#xff0c;这里就不一一罗列了&#xff0c;20道常见…

go语言调用c 的头文件 so,Golang生成共享库(shared library)以及Golang生成C可调用的动态库.so和静态库.a...

Golang类似于C的静态语言&#xff0c;效率也接近于C&#xff0c;如果Golang也可以导出可供C调用的库&#xff0c;那可以和很多高级语言say goodbye了&#xff0c;goodbye似乎又有点武断&#xff0c;但至少说&#xff0c;Golang可以做很多事&#xff0c;而且效率优于很多高级语言…

从青铜到王者的路线,java不同系统间数据同步

深耕技术&#xff0c;啃下22个技术点 互联网行业更新换代非常快&#xff0c;行业常态便是不断学习&#xff0c;因此这些主流技术你一个都不能落下&#xff01; ①并发编程 Java并发编程是整个Java开发体系中最难以理解&#xff0c;但也是最重要的知识点之一&#xff0c;因此学习…

c语言 大雨 班上多个同学准备,2015年计算机二级考试《C语言》提高练习题(7)

1[单选题] 若有C语言表达式23*47/3&#xff0c;以下选项中叙述正确的执行顺序是A.先执行3*4得12&#xff0c;再执行212得14&#xff0c;再执行7/3得2&#xff0c;最后执行142得16B.先执行3*4得12&#xff0c;再执行7/3得2.5&#xff0c;最后执行2122.5得16.5C.先执行7/3得2&…

从青铜到王者的路线,java枚举类使用场景

一、先来解读&#xff1a;23种设计模式要点 1.单例模式&#xff08;Singleton Pattern&#xff09; 2.工厂模式 3.抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09; 4.模板方法模式&#xff08;Template Method Pattern&#xff09; 5.建造者模式&#xff08;Bu…

android tag的作用,Android中的Context的作用(2)

ContextImpl关键成员和函数/*** Common implementation of Context API, which provides the base* context object for Activity and other application components.*/classContextImplextendsContext {privatefinalstaticString TAG "ContextImpl";privatefinalsta…

企业级项目实战讲解!javamap排序规则

一、服务发布简介 分布式系统架构下&#xff0c;服务发布是一件很麻烦的事情&#xff0c;特别是在构建自动发布流程和灰度测试的策略两个核心方面。通常情况下如果不涉及数据层面的灰度流程&#xff0c;服务可以灰度上线&#xff0c;或者滚动上线&#xff0c;这两种方式很常用…

android页面设置背景图片大小,android页面设置background为图片后,页面滑动掉帧问题...

最近接手的一个android项目里面&#xff0c;有个viewpager3个fragment的页面&#xff0c;就是很常见的可以左右滑动切换页面的那种布局。接手的时候告诉我&#xff0c;这个页面有卡顿现象&#xff0c;性能需要优化。一开始觉得是fragment里面做了太多耗时操作的原因&#xff0c…

企业级项目实战讲解!java的war包能直接改名么

Java核心架构笔记大致如下 0~1年&#xff1a; Java基础&#xff08;基本语法、面向对象、继承、多态、接口和抽象类、异常、内部类、集合、泛型、反射、I/O等&#xff09;Web编程&#xff08;ServletMySQL数据库商品管理系统实战&#xff09;SSM框架入门到精通&#xff08;Sp…

android chrome cast,有了它 任何安卓设备瞬间变身ChromeCast

ChromeCast一经问世就颇受欢迎&#xff0c;虽然35美刀的价格已经很便宜了&#xff0c;但现在你可以不花一分钱就可以拥有ChromeCast类似的功能了。前提是你有一部系统版本在2.2以上的安卓设备&#xff0c;对于很多安卓的玩家这应该不是什么问题。实现与ChromeCast类似的功能只需…