这是一个没完成的任务
用了半个月时间
连续用MATLAB等软件解了几天的方程
目前还没解决算法的问题
有知道大神麻烦帮忙看下
情况是这样的:
我月初拿到ST的BlueCoin套件BlueCoin板子上有4颗MEMS麦克风传感器形成麦克风阵列
以前用2颗麦克风实验过声源定位
在只有2颗麦克风的情况下只能对二维空间的声源角度进行估算
如果想更精准的检测声源的位置通常需要最少4颗麦克风
ST BlueCoin资料
http://www.st.com/content/st_com/en/products/evaluation-tools/solution-evaluation-tools/sensor-solution-eval-boards/steval-bcnkt01v1.html
双麦克风声源定位贴子
http://bbs.**/thread-570500-1-1.html
BlueCoin套件的例程里有声源定位的代码
因为都是以库的形式提供,不能查看也不能修改
所以想自己试试看
原理是利用4颗麦克风收到的数据计算出声源到达的时间差(TDOA)
比如麦克风B和A的时间差,C和A的时间差,D和A的时间差以及4颗麦克风的位置这几个数据
我试过2种方法
一种是通过三解函数把能想到的条件列成方程,让MATLAB计算
通过几何画板画一个棱锥,A、B、C、D四个点代表麦克风,E代表声源
得到EA,EB,EC,ED数据,分别用EB,EC,ED减去EA得到四颗麦克风之间的三个到达时间差b,c,d
把b,c,d数据交给MATLAB,可以得到EA的值,也可以得到E点的x,y,z坐标
和几何画板数据接近
因为最终要使用单片机计算声源的坐标,所以不仅仅是让MATLAB帮我计算结果
希望MATLAB能告诉我计算的方法,当把b,c,d使用符号而不是具体数值表示时
我连续使用电脑计算了几天,直到几次系统内存不足终止计算也没能得到通过a,b,c获得x,y,z的公式
MATLAB不行又试过Mathematic,MAPLE,都没有答案
所以现在有2种可能,一种可能是这类的数据软件我不太熟悉,有些设置没有配置
另一种可能是方程里给出的限定条件还不够,比如在
b=-0.40674146978418;
c=0.38541872439273;
d=0.68416206971011;
可以计算出EA = 2.245264768041492;
这个结果和几何画板里的接近
如果将这三个数值任一一个做少量修改,比如把d=0.6841改成d=0.6861
MATLAB就会反回[0x1 sym]
这说明b,c,d三个数必需满足某种特定条件,如果不把条件列出来数学软件也是大海捞针无能为力
还有一种计算方法比较简单,是通过4颗麦克风和声源的坐标计算
同样把b,c,d数据交给MATLAB,也可以得到E点的x,y,z坐标
当把b,c,d换成符号而不是具体数值时同样得不到我想要的公式
希望有经验的大神给出出主意
|