博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于wav文件fft处理后x,y轴坐标数据的问题
阅读量:4597 次
发布时间:2019-06-09

本文共 749 字,大约阅读时间需要 2 分钟。

1.关于横坐标的频率的最大值是采样频率,那么每个点对应的频率值就很好算了:f(n) = [Fs/(N/2)]*n  (Fs是采样频率,常见的是44.1KHz(44100),N是采样点数,k表是第k个点)。我之前也参考了别人的写法, ,有一段内容是这样描述的:

时域PCM数据是16位的short类型,取值范围是-32768..32767。对于频谱显示用512点FFT就足够了,我们知道音频数据的截止频率是由其采样率决定的,如果采样率为32kHz,截止频率为16kHz。可以计算出FFT后频率间隔为16*1024/(512/2)=64Hz”一开始一直纠结看不懂,不过后来自己仔细想想原来是单位的问题,当然原作者对换算可能也出现问题1024应该是1000吧(kHz和Hz之间的换算是1000);

2.纵坐标就是处理后的数据,我要做的是频域图,一般的步骤就是读取相应的文件,java中数据的转换确实是个老大难的问题,开始读的时候用的是byte[]数组,而PCM数据对应的是float类型的,而我封装的画图的是double[]数组,所以转啊转,还要确保精确度的问题:

byte[]转float[]:的写法参考的是上面的链接地址

floa[]转double[]相对较简单,注意要保证精确度:

1 //buf字节数组2 for (int i = 0; i < buf.length; i++) {3             yData[i] = Double.parseDouble(String.valueOf(buf[i]));4 }

对应是FFT算法,网上有很多的分装的类,自己可以自行搜索下载。

 

转载于:https://www.cnblogs.com/sowhat4999/p/4440158.html

你可能感兴趣的文章
sqlite3:深入理解sqlite3_stmt 机制
查看>>
一个注释版的查取列表信息
查看>>
使用Ctex总结1
查看>>
ios关闭自动更新
查看>>
10 款非常棒的CSS代码格式化工具推荐
查看>>
【BZOJ2298】[HAOI2011]problem a
查看>>
【转】关于Jmeter3.0,你必须要知道的5点变化
查看>>
OJ使用心得
查看>>
day6_time模块和datetime模块
查看>>
AppUi自动化框架tool.py代码
查看>>
Oracle物理文件分类:
查看>>
请别随意关闭默认共享
查看>>
Linux CentOS中防火墙的关闭及开启端口
查看>>
机器学习中的数学(1)-回归(regression)、梯度下降(gradient descent)
查看>>
网页性能优化
查看>>
destoon网站转移空间教程
查看>>
.Net 三款工作流引擎比较:WWF、netBPM 和 ccflow
查看>>
P1280 尼克的任务(DP)
查看>>
在PC上测试移动端网站和模拟手机浏览器的5大方法
查看>>
Saltstack_使用指南18_API
查看>>