声源定位MATLAB的程序,求大神改一个声源定位程序 改成放置录音文件然后定位...
close all
clc
clear all
c=340;
fs=11025;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
rm=[5 3 3];
c=340;
mic2=[0 1.0 2]; %第二个麦克风
src=[3 2.5 2];
d=1;
mic3=[0 1+d 2]; %第三个麦克风
mic1=[0 1-d 2]; % 第一个麦克风
t1=sqrt((src(1)-mic1(1))^2+(src(2)-mic1(2))^2)/c; %信号源与第一个麦克风之间的距离除以声速,得到传播时间
t2=sqrt((src(1)-mic2(1))^2+(src(2)-mic2(2))^2)/c; %信号源与第二个麦克风之间的距离除以声速,得到传播时间
t3=sqrt((src(1)-mic3(1))^2+(src(2)-mic3(2))^2)/c; %信号源与第三个麦克风之间的距离除以声速,得到传播时间
t12=t1-t2;
t32=t2-t3;
rp=((2*(d^2)-(c^2)*((t12)^2+(t32)^2)))/(2*c*(t12-t32)) %实际距离
for i=1:9
tt12(i)=t12;
tt32(i)=t32;
rpp(i)=rp;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
r=0.1;
n=8;
h=rir(fs, mic2, n, r, rm, src);
figure(1)
subplot(2,2,1)
plot(h)
title('麦克风阵列采集到语音信号')
axis([0,1500,0,0.4])
HT=h(1:1400);
[y,fs,nbits]=wavread('D:\毕设资料\谢安琪');
%sn=y(1:5000);
sn=y;
N=length(HT);
L=length(sn);
s1=zeros(1,L);
for n=2:N
for m=1:n-1
s1(n)=s1(n)+HT(m)*sn(n-m+1);
end
end
for n=N+1:L
for m=1:N
s1(n)=s1(n)+HT(m)*sn(n-m);
end
end
subplot(2,2,2)
plot(s1)
xlabel('第二个麦克风')
axis([0,100000,-0.6,0.6])
%%%%%%%% s1为第二个麦克风的信号 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
n1=8;
h1=rir(fs, mic1, n1, r, rm, src);
%figure(3)
%subplot(2,1,1)
%plot(h1)
HT1=h1(1:2500);
N=length(HT1);
L=length(sn);
s2=zeros(1,L);
for n=2:N
for m=1:n-1
s2(n)=s2(n)+HT1(m)*sn(n-m+1);
end
end
for n=N+1:L
for m=1:N
s2(n)=s2(n)+HT1(m)*sn(n-m);
end
end
subplot(2,2,3)
plot(s2)
xlabel('第一个麦克风')
axis([0,100000,-0.6,0.6])
%%%%%%%%%%%% s2为第一个麦克风的信号 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
n2=8;
h2=rir(fs, mic3, n2, r, rm, src);
%figure(4)
% subplot(2,1,1)
% plot(h2)
HT2=h2(1:1800);
N=length(HT2);
L=length(sn);
s3=zeros(1,L);
for n=2:N
for m=1:n-1
s3(n)=s3(n)+HT2(m)*sn(n-m);
end
end
for n=N+1:L
for m=1:N
s3(n)=s3(n)+HT2(m)*sn(n-m);
end
end
subplot(2,2,4)
plot(s3)
xlabel('第三个麦克风')
axis([0,100000,-0.6,0.6])
%%%%%%%%%%%%%%%%%%% s3为第三个麦克风的信号 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%分帧(200ms(2205个样点),重叠50ms(约550个样点),加窗(hanning)
pp=hanning(1,2205);
LK=2205;LM=550;
LP=9;%LK+(LK-1)*(LF-2)-(LM)*(LF-1)+(LK-1)=L=16000;
cc1=zeros(9,LK*2-1); %用于存放互相关系数c1
cc2=zeros(9,LK*2-1); %用于存放互相关系数c2
phil1=zeros(9,LK);%用于存放第二个麦克风的希尔伯特包络;
phil2=zeros(9,LK);%用于存放第一个麦克风希尔伯特包络;
phil3=zeros(9,LK);%用于存放第三个麦克风希尔伯特包络;
for LF=1:LP
sh1(1:LK)=s1(LK+(LK-1)*(LF-2)-(LM)*(LF-1): LK+(LK-1)*(LF-2)-(LM)*(LF-1)+(LK-1)); %取第二个麦克风的信号帧
sh2(1:LK)=s2(LK+(LK-1)*(LF-2)-(LM)*(LF-1): LK+(LK-1)*(LF-2)-(LM)*(LF-1)+(LK-1)); %取第一个麦克风的信号帧
sh3(1:LK)=s3(LK+(LK-1)*(LF-2)-(LM)*(LF-1): LK+(LK-1)*(LF-2)-(LM)*(LF-1)+(LK-1)); %取第三个麦克风的信号帧
%%%%%%%对第二个麦克风的信号帧进行处理求希尔伯特包络 %%%%%%%%%%%%%%%%%%%%
M=length(sh1);
sp=zeros(1,M);
err=zeros(1,M);
Nt=10;
[A,E] = lpc(sh1,Nt);
for n=2:Nt
for t=2:n
sp(n)=sp(n)-A(t)*sh1(n-t+1);
end
err(n)=sh1(n)-sp(n);
end
for n=Nt+1:M
for t=2:Nt+1
sp(n)=sp(n)-A(t)*sh1(n-t+1);
end
err(n)=sh1(n)-sp(n);
end
%希尔伯特包络
errh=hilbert(err);
for n=1:M
erh(n)=imag(errh(n))^2;
er(n)=err(n)^2;
error(n)=sqrt((er(n)+erh(n)));
end
phil1(LF,:)=error;
%%%%%%%对第一个麦克风的信号帧进行处理求希尔伯特包络 %%%%%%%%%%%%%%%%%%%%
M=length(sh2);
spt=zeros(1,M);
errt=zeros(1,M);
Nt=10;
[At,Et] = lpc(sh2,Nt) ;
for n=2:Nt
for t=2:n
spt(n)=spt(n)-At(t)*sh2(n-t+1);
end
errt(n)=sh2(n)-spt(n);
end
for n=Nt+1:M
for t=2:Nt+1
spt(n)=spt(n)-At(t)*sh2(n-t+1);
end
errt(n)=sh2(n)-spt(n);
end
%希尔伯特包络
errht=hilbert(errt);
for n=1:M
erht(n)=imag(errht(n))^2;
ert(n)=errt(n)^2;
errort(n)=sqrt((ert(n)+erht(n)));
end
phil2(LF,:)=errort;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 求两个希尔伯特包络的互相关
c1 = xcorr(error,errort);
for n=1:length(c1)
if c1(n)==max(c1)
tg12(LF)=abs(n-length(c1)/2)/fs;
end
end
cc1(LF,:)=c1;
figure(4)
plot(tg12,'c+');
hold
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%对第三个麦克风的信号帧进行处理求希尔伯特包络 %%%%%%%%%%%%%%%%%%%%
M=length(sh3);
spt2=zeros(1,M);
errt2=zeros(1,M);
Nt=10;
[At2,Et2] = lpc(sh3,Nt) ;
for n=2:Nt
for t=2:n
spt2(n)=spt2(n)-At2(t)*sh3(n-t+1);
end
errt2(n)=sh3(n)-spt2(n);
end
for n=Nt+1:M
for t=2:Nt+1
spt2(n)=spt2(n)-At2(t)*sh3(n-t+1);
end
errt2(n)=sh3(n)-spt2(n);
end
%希尔伯特包络
errht2=hilbert(errt2);
for n=1:M
erht2(n)=imag(errht2(n))^2;
ert2(n)=errt2(n)^2;
errort2(n)=sqrt((ert2(n)+erht2(n)));
end
phil3(LF,:)=errort2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 求两个希尔伯特包络的互相关
c2 = xcorr(error,errort2);
for n=1:length(c2)
if c2(n)==max(c2)
tg32(LF)=abs(n-length(c2)/2)/fs;
end
end
cc2(LF,:)=c2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
%%%%%%%%%%%%%%%%进行声源定位%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
tg=tg12(LF)
tp=tg32(LF) %时间延迟
sita(LF)=asin((c*(tg+tp))/(2*d));
rl(LF)=((2*(d^2)-(c^2)*((tg)^2+(tp)^2)))/(2*c*(tg-tp));
tger(LF)=(tg-t12)/t12;
tper(LF)=(tp-t32)/t32;
figure(5)
subplot(2,1,1)
plot(tger,'*');
subplot(2,1,2)
plot(tper,'+');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end
figure(4)
subplot(3,1,1)
plot(tg12,'c+');
hold on
plot(tt12,'r*')
hold on
subplot(3,1,2)
plot(tg32,'o');
hold on
plot(tt32,'y-');
hold on
subplot(3,1,3)
hold on
plot(tg12,'+');
plot(tt12,'r*')
plot(tt32,'rp');
plot(tg32,'o');
hold on
figure(5)
subplot(2,1,1)
plot(tger,'*');
subplot(2,1,2)
plot(tper,'+');
hold on
声源定位MATLAB的程序,求大神改一个声源定位程序 改成放置录音文件然后定位...相关推荐
- 用c语言设计八路抢答器的犯规程序,求大神改八路抢答器程序
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 改成开始前抢答蜂鸣器响,红灯亮#include #define uint unsigned int #define uchar unsigned char ...
- php怎么改成java,求大神帮忙把php的改成java谢谢
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 真心求助 $prize_arr = array( '0' => array('id'=>1,'prize'=>'平板电脑','v'=&g ...
- 两相四线步进电机C语言程序,求大神帮忙看单片机控制两相四线步进电机的程序!...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #define uchar unsigned char #define uint unsigned int uchar code tim ...
- 微信小程序期末大作业 记单词小程序 适合初学者学习使用
微信小程序期末大作业 记单词小程序 小程序如下图所示:(下载链接在文末) 点我下载资源 https://download.csdn.net/download/weixin_43474701/59677 ...
- 思考并实现以下程序功能:实现一个抢红包的程序 java
抢红包的程序 java 思考并实现以下程序功能:实现一个抢红包的程序. 可参考模拟微信抢红包的过程:假如当前红包是x元,参与抢红包的有y人,按时间先后顺序保证y人正好抢完x元红包,其中每人抢的红包数值 ...
- SQL Server 2005 - 如何在预存程序中调用另外一个预存程序
要在一个预存程序中调用另外一个预存程序,可以使用下列两种方式之一进行调用: <?xml:namespace prefix = o /> EXECUTE <欲执行之预存程序的名称&g ...
- 微信小程序|基于小程序+云开发制作一个菜谱小程序
今天吃什么?这是一个让强迫症左右为难的问题,跟随此文基于小程序+云开发制作一个菜谱小程序,根据现有食材一键生成菜谱,省心又省力. 一.小程序 1. 创建小程序
- 性感又漂亮的女程序员大盘点,你以为程序员都是地中海吗?
一般来讲,我们说程序员大神的时候,都是说的程序员,很少有人去关注女程序员这个群体,从客观上来讲,女程序员确实不多,有因为有很多人都分析过,为什么女程序员为什么要比男程序员少,今天我们先来分析和盘点下知 ...
- 【求大神帮助】thinkphp3.2.3老是被篡改入口文件
thinkphp3.2.3老是被篡改入口文件,有时候还要被修改Public里样式文件夹里的js 1.6.2 或1.7文件,改完后在百度里找到网站点击后就跳转到别的地方了,还有时候要被修改Think里面 ...
最新文章
- LaTex in Markdown
- 常见的shell实例
- java sort reverse_Java ArrayList sort() 方法
- php读取mysql分页查询
- Lync常识之Lync客户端有哪些
- c语言赫夫曼树的编码与译码,哈夫曼树与编码译码实现
- 液压系统管路流速推荐表_(整理)液压系统油管选择.
- Unity为游戏添加背景音乐
- Java设计模式超详细
- MySQL 排序 输出序号
- Project *** is already imported into workspace 处理
- 码云最火爆开源项目 TOP 50,你都用过哪些?
- 全球营商环境报告及数据(2004-2020年)
- 2013,让你正能量无限的话
- SQL 清空数据库的所有表数据
- dhcp服务器(dhcp服务器怎么设置)
- 嗅觉计算机应用,昆虫嗅觉神经的计算机三维重建 - 应用昆虫学报.pdf
- 放大电路中的反馈(电压串联负反馈,电流串联负反馈,电压并联负反馈,电压并联负反馈)
- 华兴资本公布发行区间 蚂蚁金服与雪湖资本各认购5000万美元
- mos 控制交流_详解MOS管原理及几种常见失效分析