我是信号处理的新手,如果问题是超凡的,很抱歉。我在这方面花费的时间比我承认的要多,并且找不到错误。
我有两个三角波,它们以线性均匀阵列从扬声器和 M 传感器发出。我需要估计单个传感器中单波的延迟。
我通过数学了解我必须使用相关性,但是当我在 Matlab 中实现它时,我显然犯了一些错误,并得到一个只有一个峰值的相关性,在信号的中心(及时)。
我不认为我可以添加图片,因为我对此没有任何声誉,我希望问题很清楚。
编辑:显然我可以,所以这是每个传感器的延迟。
在Matlab中,我基本上是这样做的,传感器接收到的信号在xcorr(X(:,sensor),temp)
哪里,即从两个源接收到的信号加上一个小的高斯误差,是两个源发出的三角形信号。X(:,sensor)
temp
为什么互相关只有一个峰值而不是两个?
编辑:完整代码
clear all
clc
% close all
%dati
v=350;%metri/sec
xa=1; %metri
ya=8;
xb=9;
yb=8;
spazio=0.25;%spazio intra sensori
spt=12.5*10^-3;%secondi
M=41;
%ipotesi
sig=1/10;
%distanze trasmettitore/microfoni
indic_min_dista=xa/spazio+1;%5
indic_min_distb=xb/spazio+1;%37
da=zeros(M,1); %vettore delle distanze
for i=(indic_min_dista):M
da(i)=sqrt(ya^2+(spazio*(i-indic_min_dista))^2);
end
for i=1:(indic_min_dista -1)
da(i)=sqrt(ya^2+(spazio*(indic_min_dista-i))^2);
end
db=zeros(M,1); %vettore delle distanze
for i=(indic_min_distb):M
db(i)=sqrt(yb^2+(spazio*(i-indic_min_distb))^2);
end
for i=1:(indic_min_distb -1)
db(i)=sqrt(yb^2+(spazio*(indic_min_distb-i))^2);
end
%tempo trasmettitore/microfoni
ta=zeros(M,1); %vettore dei tempi
for i=1:M
ta(i)=da(i)/v;
end
tb=zeros(M,1); %vettore dei tempi
for i=1:M
tb(i)=db(i)/v;
end
% ta-(fliplr(tb'))'==0 i tempi sono = se letti dagli estremi opposti
%vettore dei tempi di campionamento
win=10^-3;%secondi
N=ceil((max(ta)+2*spt)/win)+1;
% N=ceil((max(tb)+2*spt)/win)+1; sono = la situazione è del ttt simmetrica
samples=zeros(N,1);
for i=0:(N-1)
samples(i+1)=-spt + win*(i);
end
rit=+spt+samples;
%segnale inviato
S=zeros(N,M);
temp=zeros(N,1);
for i =0:(N-1)
for j=1:M
if((samples(i+1)>ta(j)-spt) && (samples(i+1)<=ta(j)))
S(i+1,j)=S(i+1,j)+1-abs(samples(i+1)-ta(j))/spt;
if(j==1)
temp(i+1)=+1-abs(samples(i+1)-ta(j))/spt;
end
end
if((samples(i+1)>tb(j)-spt) && (samples(i+1)<=tb(j)))
S(i+1,j)=S(i+1,j)+1-abs(samples(i+1)-tb(j))/spt;
end
if((samples(i+1)>ta(j)) && (samples(i+1)<=ta(j)+spt))
S(i+1,j)=S(i+1,j)+1-abs(samples(i+1)-ta(j))/spt;
if(j==1)
temp(i+1)=+1-abs(samples(i+1)-ta(j))/spt;
end
end
if((samples(i+1)>tb(j)) && (samples(i+1)<=tb(j)+spt))
S(i+1,j)=S(i+1,j)+1-abs(samples(i+1)-tb(j))/spt;
end
end
end
figure
imagesc(0:41,rit,S)
xlabel('Sensori');%\sigma^2_\omega
ylabel('Ritardo [s]');
W=zeros(N,M);
%costruisco W
for i =1:N
for j=1:M
W(i,j)=normrnd(0,sig);
end
end
X=W+S;
%vettore che uso per calcolo correlazioni
vv=find(temp~=0);
temp=temp(min(vv): max(vv));
%%
figure
imagesc(0:41,rit,X)
xlabel('Sensori');%\sigma^2_\omega
ylabel('Ritardo [s]');
figure
surf(S)
set(gca,'xlim',[0 41])
xlabel('Sensori'), ylabel('Ritardo [s]');
% ticklabels = get(gca,'YTickLabel');
newTicklabels = rit;%[ticklabels(2:end,:);'60'];
set(gca,'YTickLabel',newTicklabels);
figure
surf(X)
xlabel('Sensori'), ylabel('Ritardo [s]');
% ticklabels = get(gca,'YTickLabel');
newTicklabels = rit;%[ticklabels(2:end,:);'60'];
set(gca,'YTickLabel',newTicklabels);
set(gca,'xlim',[0 41])
set(gca,'zlim',[0 2])
%%
clc
% close all
% Stima ritardo per ogni sensore, in funzione di sigma^2
% valuta MSE cfr CRB almeno m=10 e y=5m,
sig=1/100;%[1/10 1/5 1/2];
Nrun=100;
%segnale vero S(:,41)
%segnale registrato X(:,41)
MSEA=zeros(M,length(sig));
MSEB=zeros(M,length(sig));
mediaA=zeros(M,length(sig));
mediaB=zeros(M,length(sig));
W=zeros(N,M);
psi=(-N:N)*win;%mi serve per valutare phi nella differenza tra i tau
for nrun=1:Nrun
ia =zeros(length(sig),M); %indici del massimo della funzione di correlazione
ib =zeros(length(sig),M); %indici del massimo della funzione di correlazione
for k=1:length(sig)
%costruisco W
for i =1:N
for j=1:M
W(i,j)=normrnd(0,sig(k));
end
end
X=W+S;
for sensor=41:41
phisx=zeros(N+1,1);
phiss=zeros(length(psi),1);%N*2+1
corrtemp=xcorr(X(:,sensor),temp);
figure
plot(corrtemp)
end
end
end
EDIT 比较两个传感器(一个在一侧,一个在蓝色一个)和中央一个(绿线)中接收到的信号,红线对应于原始三角波。
编辑三角波和接收信号之间的相关性
回答问题,这是硬件定位。请记住我不是艺术专业的:D