关于wav文件fft处理后x,y轴坐标数据的问题_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > 关于wav文件fft处理后x,y轴坐标数据的问题

关于wav文件fft处理后x,y轴坐标数据的问题

 2015/4/20 3:32:09  sowhat4999  程序员俱乐部  我要评论(0)
  • 摘要:1.关于横坐标的频率的最大值是采样频率,那么每个点对应的频率值就很好算了:f(n)=[Fs/(N/2)]*n(Fs是采样频率,常见的是44.1KHz(44100),N是采样点数,k表是第k个点)。我之前也参考了别人的写法,地址,有一段内容是这样描述的:“时域PCM数据是16位的short类型,取值范围是-32768..32767。对于频谱显示用512点FFT就足够了,我们知道音频数据的截止频率是由其采样率决定的,如果采样率为32kHz,截止频率为16kHz
  • 标签:文件 问题 数据

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算法,网上有很多的分装的类,自己可以自行搜索下载。

 

发表评论
用户名: 匿名