i.MX6开发系列(二)——应用层处理音频数据
小狼@http://blog.csdn.net/xiaolangyangyang
源码下载地址:http://download.csdn.net/detail/xiaolangyangyang/9631833
一、内核配置中打开硬浮点运算
Floating point emulation --->
[*] VFP-format floating point maths
[*] Advanced SIMD (NEON) Extension support
二、应用层实现音频播放器
转码:# ffmepg -i 1.mp3 -f wav 1.wav
如果ffmepg命令不可用,也可以使用酷狗音乐等音乐播放器进行转码
在下载的源码中,player.c为播放器源码
编译:# arm-fsl-linux-gnueabi-gcc -o player player.c -lasound
运行:# ./player 1.wav
如果缺少asound库可参考:alsa-lib及alsa-utils成功移植(原创)
三、音频播放器中实现FFT与IFFT
在下载的源码中,包括fft.c fft.h fft_test.c三个文件
编译:# arm-fsl-linux-gnueabi-gcc -o fft_test fft.c fft_test.c -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard -lm
运行:# ./fft_test
这里采用的neon硬件浮点运算器,也可以使用其他的硬件浮点运算器,如vfp
四、音频播放器中实现IIR滤波
FDAtool参数如下(低通滤波器):
- Edit -> Convert Structure -> Direct-Form I, SOS
- Targets -> Generate C Header
- Generate -> iir_coefs.h
- 打开iir_coefs.h把MWSPT_NSEC替换成IIR_NSEC, NL、DL数组删除掉,real32_T改成float,删掉#include "tmwtypes.h"
五、音频播放器中实现FIR滤波
FDAtool参数如下(低通滤波器):
- 点击左下侧快捷图标栏中的“Set quantization parameters”快捷图标 -> Single-precision floating-point
- Targets -> Generate C header ...
- Generate -> fir_coefs.h
- 打开fir_coefs.h把BL数组删除掉,real32_T改成float,删掉#include "tmwtypes.h"
编译:# arm-fsl-linux-gnueabi-gcc -o player player.c fir_filter.c -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard -lm -lasound
运行:# ./player 1.wav
六、几种数字滤波器比较
IIR滤波器
- 巴特沃斯滤波器:通带最平坦,阻带下降慢
- 切比雪夫滤波器:通带等纹波,阻带下降较快
- 贝塞尔滤波器:通带等纹波,阻带下降慢,选频特性最差,最佳的线性相位
- 椭圆滤波器:通带等纹波(阻带平坦或等纹波),阻带下降最快
- equiripple
- least-squares(最小乘方)
- window(窗函数)