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…

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…

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

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

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

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

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

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

从青铜到王者的路线,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…

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

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

企业级项目实战讲解!java类内部定义枚举

蚂蚁一面 ⼀⾯就做了⼀道算法题&#xff0c;要求两⼩时内完成&#xff0c;给了⻓度为N的有重复元素的数组&#xff0c;要求输出第10⼤的数。典型的TopK问题&#xff0c;快排算法搞定。算法题要注意的是合法性校验、边界条件以及异常的处理。另外&#xff0c;如果要写测试⽤例&…

荣耀鸿蒙价格,荣耀40S秀肌肉,120Hz+双5000万+鸿蒙系统,售价很感人

原标题&#xff1a;荣耀40S秀肌肉&#xff0c;120Hz双5000万鸿蒙系统&#xff0c;售价很感人虽然现在有不少的手机厂商开始发展子品牌&#xff0c;比如vivo发展的iQOO以及OPPO发展的真我&#xff0c;都是在市场上开始冒头。不过知名度最高的还是荣耀这个子品牌&#xff0c;自从…

作为Java开发程序员,中科创达java应届生薪资

01 并发宝典&#xff1a;面试专题 面试专题分为四个部分&#xff0c;分别如下 Synchronized 相关问题 可重入锁 ReentrantLock 及其他显式锁相关问题 Java 线程池相关问题 Java 内存模型相关问题 1.1 Synchronized 相关问题&#xff08;这里整理了八问&#xff09; 问题一…

Java面试必备的集合源码详解,砥砺前行!

一面&#xff08;一个小时左右&#xff09; 算法&#xff1a;写冒泡排序&#xff0c;问如何优化&#xff0c;简单讲了快排和堆排序的原理数据库&#xff1a;解释左连接数据库第一第二第三范式&#xff0c;数据库死锁linux&#xff1a;怎么查看内存&#xff1b;怎么查看进程&am…

java面试核心知识点,详解系列文章

技术能力 通常&#xff0c;「技术能力」这个部分将紧接着你的个人简介之后&#xff0c;放在简历的核心版面。这样设计是有道理的&#xff0c;因为它能够帮助雇主更快的判断你的技能是否与需求相吻合。 因此在制作这一部分内容时&#xff0c;你应该考虑以下两点&#xff1a; …

html5跨平台桌面打包,Html5到跨平台app应用

Html5到跨平台app应用每一项新兴技术的出现和流行&#xff0c;都是为了规模化的去统一解决一系列复杂问题&#xff0c;APICloud选择混合开发方向&#xff0c;目的是希望借助HTML5降低app开发复杂度&#xff0c;提高app开发效率。通过工程化的实践手段&#xff0c;我们首先设计了…

Java面试知识点总结宝典助你通关!成功入职字节跳动

01 阿里中间件&#xff08;四面&#xff0c;Java岗&#xff09; 1.1 Java中间件一面 技术一面考察范围 重点问了Java线程锁&#xff1a;synchronized 和ReentrantLock相关的底层实现 线程池的底层实现以及常见的参数 数据结构基本都问了一遍&#xff1a;链表、队列等 Java内存…