skytide 发表于 2009-5-5 13:01

关于功率谱估计时延(具有相位模糊)的仿真问题!

首先我这个课题是先对一路声音信号进行加噪,分数时延,然后根据互功率谱密度求出相差的相位,由于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=;
s3=;
while feof(file_id1)~=1&feof(file_id2)~=1
    % 数据类型是int16,每次读入256个数
    % raw_array每次都是256x1的矩阵,ele_count为读入的数的个数(正常情况下应为256)
    =fread(file_id1,128,'double');
    =fread(file_id2,128,'double');
    if ele_count <128 % elecount < 512代表数据不够,已经到了文件的结尾
      break;
    else
      row_array1=row_array1';
      s2=;
      s1=row_array1(1:128);
      if el_count <128 % elcount < 512代表数据不够,已经到了文件的结尾
      break;
    else
      row_array2=row_array2';
      s4=;
      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
页: [1]
查看完整版本: 关于功率谱估计时延(具有相位模糊)的仿真问题!