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的程序,求大神改一个声源定位程序 改成放置录音文件然后定位...相关推荐

  1. 用c语言设计八路抢答器的犯规程序,求大神改八路抢答器程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 改成开始前抢答蜂鸣器响,红灯亮#include #define uint unsigned int #define uchar unsigned char ...

  2. php怎么改成java,求大神帮忙把php的改成java谢谢

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 真心求助 $prize_arr = array( '0' => array('id'=>1,'prize'=>'平板电脑','v'=&g ...

  3. 两相四线步进电机C语言程序,求大神帮忙看单片机控制两相四线步进电机的程序!...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #define uchar unsigned char #define uint unsigned int uchar code tim ...

  4. 微信小程序期末大作业 记单词小程序 适合初学者学习使用

    微信小程序期末大作业 记单词小程序 小程序如下图所示:(下载链接在文末) 点我下载资源 https://download.csdn.net/download/weixin_43474701/59677 ...

  5. 思考并实现以下程序功能:实现一个抢红包的程序 java

    抢红包的程序 java 思考并实现以下程序功能:实现一个抢红包的程序. 可参考模拟微信抢红包的过程:假如当前红包是x元,参与抢红包的有y人,按时间先后顺序保证y人正好抢完x元红包,其中每人抢的红包数值 ...

  6. SQL Server 2005 - 如何在预存程序中调用另外一个预存程序

    要在一个预存程序中调用另外一个预存程序,可以使用下列两种方式之一进行调用:  <?xml:namespace prefix = o /> EXECUTE <欲执行之预存程序的名称&g ...

  7. 微信小程序|基于小程序+云开发制作一个菜谱小程序

    今天吃什么?这是一个让强迫症左右为难的问题,跟随此文基于小程序+云开发制作一个菜谱小程序,根据现有食材一键生成菜谱,省心又省力. 一.小程序 1. 创建小程序

  8. 性感又漂亮的女程序员大盘点,你以为程序员都是地中海吗?

    一般来讲,我们说程序员大神的时候,都是说的程序员,很少有人去关注女程序员这个群体,从客观上来讲,女程序员确实不多,有因为有很多人都分析过,为什么女程序员为什么要比男程序员少,今天我们先来分析和盘点下知 ...

  9. 【求大神帮助】thinkphp3.2.3老是被篡改入口文件

    thinkphp3.2.3老是被篡改入口文件,有时候还要被修改Public里样式文件夹里的js 1.6.2 或1.7文件,改完后在百度里找到网站点击后就跳转到别的地方了,还有时候要被修改Think里面 ...

最新文章

  1. LaTex in Markdown
  2. 常见的shell实例
  3. java sort reverse_Java ArrayList sort() 方法
  4. php读取mysql分页查询
  5. Lync常识之Lync客户端有哪些
  6. c语言赫夫曼树的编码与译码,哈夫曼树与编码译码实现
  7. 液压系统管路流速推荐表_(整理)液压系统油管选择.
  8. Unity为游戏添加背景音乐
  9. Java设计模式超详细
  10. MySQL 排序 输出序号
  11. Project *** is already imported into workspace 处理
  12. 码云最火爆开源项目 TOP 50,你都用过哪些?
  13. 全球营商环境报告及数据(2004-2020年)
  14. 2013,让你正能量无限的话
  15. SQL 清空数据库的所有表数据
  16. dhcp服务器(dhcp服务器怎么设置)
  17. 嗅觉计算机应用,昆虫嗅觉神经的计算机三维重建 - 应用昆虫学报.pdf
  18. 放大电路中的反馈(电压串联负反馈,电流串联负反馈,电压并联负反馈,电压并联负反馈)
  19. 华兴资本公布发行区间 蚂蚁金服与雪湖资本各认购5000万美元
  20. mos 控制交流_详解MOS管原理及几种常见失效分析

热门文章

  1. 操作系统——处理机调度
  2. 锁模块之当前读和快照读
  3. 全球与中国新一代高级电池市场深度研究分析报告
  4. K-means原理、优化及应用
  5. 安科瑞智能操控无线测温装置在江苏某化工产业园项目的应用
  6. Android 在线下载更新App 下载完成安装APK(兼容Android7.0)
  7. 趣图:菜鸟程序员的工作状态…
  8. 计算机安全在医学中的重要性,试议计算机技术在医学中的意义
  9. 2022.10.6 英语背诵
  10. 通过上下两册书籍夯实Python基础,这本书就是Python的必备书籍