1. 程式人生 > 其它 >【聲源定位】基於matlab陣列流形矩陣訊號顯示【含Matlab原始碼 549期】

【聲源定位】基於matlab陣列流形矩陣訊號顯示【含Matlab原始碼 549期】

一、簡介

1 陣列流形A包含了陣列的幾何結構、陣元模式、陣元間的耦合、頻率等影響。
分辨力:陣列測向中,某方向上對信源的分辨力與該方向附近陣列方向向量的變化率直接相關。在方向向量變化較快的方向附近,隨著信源角度變化陣列快拍資料變化也大,相應的分辨力也高。
2 對於均勻線陣:
D(θ) - cosθ,
說明訊號在0方向分辨最高,而在60方向分辨力已經下降了一半,所以一般線陣的測向範圍為-60-60.

3 陣列的協方差矩陣:
1、M>K,即陣元個數M要大於該陣列系統可能接受到的同頻空間訊號的個數。
2、對於不同的訊號的來向θ,訊號的方向向量a(θ)是線性獨立的。
3、陣列中噪聲為隨機過程,具有高斯分佈特性。
4、空間源訊號向量S(t)的協方差矩陣Rs是對角非奇異陣,這表明空間源訊號是不相干的,同時還要求空間源訊號與陣元輸出不相干。

二、原始碼

clear all;
close all;
clc
%****************************************************%
M=2;                                %陣元數目
theta0=30;                          %聲源到達方向
p=1;                                 %聲源個數
lamda=1.6;                        %波長
d=lamda/2;                       %陣元間距
a=[0:1:M-1];
a_theta0=exp(j*pi*2*d/lamda*sin(theta0*pi/180)*a);%第一陣列流型向量
%****************************************************%
[s,fs]=wavread('C9_3_y.wav');   
s=s/max(abs(s));
sound_length = 6400;
%裝載房間衝激響應
load h.mat;            
%麥克風1的訊號
s1=conv(s,h1);
s1=s1(1:sound_length);
%麥克風2的訊號
s2=conv(s,h2);
s2=s2(1:sound_length);
%****************************************************%
s1=s1*a_theta0(1);                  %疊加角度資訊
s2=s2*a_theta0(2);
%****************************************************%
%新增白噪聲
%SNR=20dB
s1_20db = awgn(s1,20,'measured','db');
s2_20db = awgn(s2,20,'measured','db');
%SNR=10dB
s1_10db = awgn(s1,10,'measured','db');
s2_10db = awgn(s2,10,'measured','db');
%SNR=0dB
s1_0db = awgn(s1,0,'measured','db');
s2_0db = awgn(s2,0,'measured','db');
%SNR=-5dB
s1_m5db = awgn(s1,-5,'measured','db');
s2_m5db = awgn(s2,-5,'measured','db');
figure(1);
%顯示原始輸入語音訊號波形
subplot(5,2,1),plot(s1,'k'),title('麥克風1(原始)'),xlabel('取樣點'),ylabel('幅度');
subplot(5,2,2),plot(abs(s2),'k'),title('麥克風2 (原始)'),xlabel('取樣點'),ylabel('幅度');
subplot(5,2,3),plot(s1_20db,'k'),title('麥克風1(SNR=20dB)'),xlabel('取樣點'),ylabel('幅度');
subplot(5,2,4),plot(abs(s2_20db),'k'),title('麥克風2(SNR=20dB)'),xlabel('取樣點'),ylabel('幅度');
subplot(5,2,5),plot(s1_10db,'k'),title('麥克風1(SNR=10dB)'),xlabel('取樣點'),ylabel('幅度');
subplot(5,2,6),plot(abs(s2_10db),'k'),title('麥克風2(SNR=10dB)'),xlabel('取樣點'),ylabel('幅度');
subplot(5,2,7),plot(s1_0db,'k'),title('麥克風1(SNR=0dB)'),xlabel('取樣點'),ylabel('幅度');

三、執行結果

四、備註

版本:2014a
完整程式碼或代寫加1564658423