csongsk 发表于 2015-4-23 14:49

近场声全息的matlab程序,结果误差很大,求问哪里有问题

clc
clear all
close all
%%%%%%%%%% 介质%%%%%%%%
ro=1.29;                     
c=344;
%%%%%%%%%% 源 %%%%%%%%%
rr=0.0001                     %声源半径
f=1500;                        %频率
w=2*pi*f;
k=w/c;                                 
x0=0;   
y0=0;   
z0=0;                                    
%%%%%%%%% 测量面 %%%%%%%%
zh=0.1;                                 
d_jianju=0.2;
num=7;
Lx=(num-1)*d_jianju;                  %测量面长度为Lx
Ly=Lx;                                       %测量面宽度为Ly
n=1:num;
xh=-Lx/2+(n-1)*d_jianju;            %一维向量,代表x轴上测量点的坐标
yh=-Ly/2+(n-1)*d_jianju;            %一维向量,代表y轴上测量点的坐标
%%%%%%%%% 重建面 %%%%%%%%
zs=0.05;                           
xs=xh;
ys=yh;


for Nx=1:num
    for Ny=1:num
      Rh(Nx,Ny)=sqrt((zh-z0)^2+(xh(Nx)-x0)^2+(yh(Ny)-y0)^2);      %测量面上各点到原点的距离
      Rs(Nx,Ny)=sqrt((zs-z0)^2+(xs(Nx)-x0)^2+(ys(Ny)-y0)^2);       %重建面上各点到原点的距离


      ph(Nx,Ny)=j*k*ro*c*rr^2*exp(1i*k*Rh(Nx,Ny))./Rh(Nx,Ny);
      ps(Nx,Ny)=j*k*ro*c*rr^2*exp(1i*k*Rs(Nx,Ny))./Rs(Nx,Ny);
      ph1((Nx-1)*num+Ny)=ph(Nx,Ny);                               %把二维矩阵排列成一维向量,便于画图展示
      ps1((Nx-1)*num+Ny)=ps(Nx,Ny);
    end
end

delta_kx=2*pi/(d_jianju*(num-1));      
delta_ky=2*pi/(d_jianju*(num-1));
kx=-pi/d_jianju:delta_kx:pi/d_jianju;          %对应《近场声全息技术及其应用》p29的m△kx      
ky=-pi/d_jianju:delta_ky:pi/d_jianju;
for i1=1:num;         
    for j1=1:num;
      kz(i1,j1)=sqrt(k^2-(kx(i1)).^2-(ky(j1)).^2);
    end
end


psp=ifft2(fft2(ph)*exp(-1i*kz*(zh-zs)));      %《近场声全息技术及其应用》30页的(2.1.89)
for t=1:num
    for y=1:num
      psp1((t-1)*num+y)=psp(t,y);
    end
end

figure(1)
plot(abs(ps1))
hold on
plot(abs(psp1),'--')

xlabel('y/m')
ylabel('声压幅值/ Pa')
legend('理论值','重建声压')
grid on


参考了论坛里的一个程序,点声源发出声场,用测量面的声压重建重建面的声压。公式参考的是《近场声全息技术及其应用》30页的(2.1.89)

海量汪涵 发表于 2015-4-27 21:34

是不是跟测量面以及重构面的采样间距有关?而且用基于平面波传播规律的反演法是不是太简单了?呵呵,声全息不太熟,我去问问声全息的专家再说{:{28}:}

ravying 发表于 2015-12-14 15:13

我也刚学,当用近场声全息反演时要求全息面的测量孔径很大,使得在全息孔径之外的声压信号越小越好,越小重建时也就越精确,而程序中孔径之外的声压明显不能小到可以忽略的地步,因此,会产生较大的误差。以上,不知对否。

ravying 发表于 2015-12-14 15:15

采样间距,重构距离,孔径大小等都会影响重建精度,这个程序里我觉得主要是孔径影响最大。

NAH_DAMON 发表于 2016-3-9 12:45

我觉得可能主要问题是在全息面到重建面的逆向计算过程中没有进行加指数窗或者进行正则化的原因!因为NAH的重建是一个不适定的逆问题。

txl 发表于 2017-4-14 10:19

我也正在搞这个,理论声压的公式根本没有倏逝波的成分,但是重建时用了倏逝波参与重建,是不是会产生很大误差?另外,经过我很多仿真表明,测量面积大只是为了减小二维傅立叶变换的卷绕误差,如果面积不大卷绕误差会大一些,但是不明显,顶多是图形不好看,不是那么平滑。在没有噪声进行理论仿真的时候,不需要加指数窗滤波也应该可以

敷衍会致命 发表于 2017-4-17 09:50

txl 发表于 2017-4-14 10:19
我也正在搞这个,理论声压的公式根本没有倏逝波的成分,但是重建时用了倏逝波参与重建,是不是会产生很大误 ...

误差当然会大

txl 发表于 2017-4-18 09:17

敷衍会致命 发表于 2017-4-17 09:50
误差当然会大

刚重新看了下上面的程序,重建过程中没有倏逝波的参与,也就是声压用平面波分解的时候分解的个数不对(传播波个数+倏逝波个数=数据采集点个数),如果全部分解为传播波(传播波个数=数据采集点个数)会导致kx、ky的取值不正确,计算的结果必然不正确,不知道理解对不对。

Triste 发表于 2017-4-20 09:26

程序在哪找的问题不少

txl 发表于 2017-4-20 10:29

Triste 发表于 2017-4-20 09:26
程序在哪找的问题不少

你可以给楼主指出程序中的错误。。。
页: [1]
查看完整版本: 近场声全息的matlab程序,结果误差很大,求问哪里有问题