|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
首先我这个课题是先对一路声音信号进行加噪,分数时延,然后根据互功率谱密度求出相差的相位,由于w×时延必须小于pi,所以导致麦克风距离很小,为了解决这个问题,采取相位周期展开的方法,每读取2次数据,进行求互功率谱,求出相位,根据每点频率求出这点最大需要周期延拓几个相位周期。计算出所有可能的时延,再把时延聚类,一般来说,真实时延那点的数据应该是最多的!但是我的计算结果是时延都不一样,根本无法聚类。,请大大帮我看看到底哪里出错了!
clear;
mird=20;%2个麦克风之间的距离
data_fname1='111.bin'; % 这里是文件名 这里的111是原始的声音文件
file_id1=fopen(data_fname1,'rb');
data_fname2='222.bin'; % 这里是文件名 这里的222文件是分数延迟后的数据文件,声音文件采取16K采样 然后分数延时
file_id2=fopen(data_fname2,'rb');
s1=[zeros(1,128)];
s3=[zeros(1,128)];
while feof(file_id1)~=1&feof(file_id2)~=1
% 数据类型是int16,每次读入256个数
% raw_array每次都是256x1的矩阵,ele_count为读入的数的个数(正常情况下应为256)
[row_array1,ele_count]=fread(file_id1,128,'double');
[row_array2,el_count]=fread(file_id2,128,'double');
if ele_count <128 % elecount < 512代表数据不够,已经到了文件的结尾
break;
else
row_array1=row_array1';
s2=[s1,row_array1(1:128)];
s1=row_array1(1:128);
if el_count <128 % elcount < 512代表数据不够,已经到了文件的结尾
break;
else
row_array2=row_array2';
s4=[s3,row_array2(1:128)];
s3=row_array2(1:128);
f1=fft(s2);
fx1=f1(1:256);
f2=fft(s4);
fx2=f2(1:256);
fz2=conj(fx2);
Pxy=fx1.*fz2;
Ap=angle(Pxy);
da=1:256;
f=1/16000;
w=da/(256*f);
sun=zeros(128,6);
for i=1:128
dsum=dlay(Ap(i),mird,w(i)); %由于麦克风距离的加长而引起相位的模糊,而采取的根据每点FFT频率计算需要延拓几个周期 计算出的是时延!
sun(i,:)=dsum;
end
sun=sort(sun,'ascend');
B=unique(sun);
c=zeros(size(B));
for n=1:length(B);
c(n)=length(find(sun==B(n)));
end
end
end
end |
-
-
www.m
1.63 KB, 下载次数: 9
主程序
-
-
dlay.m
616 Bytes, 下载次数: 5
dsum函数
|