近场声全息的matlab程序,结果误差很大,求问哪里有问题
clcclear 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)
是不是跟测量面以及重构面的采样间距有关?而且用基于平面波传播规律的反演法是不是太简单了?呵呵,声全息不太熟,我去问问声全息的专家再说{:{28}:} 我也刚学,当用近场声全息反演时要求全息面的测量孔径很大,使得在全息孔径之外的声压信号越小越好,越小重建时也就越精确,而程序中孔径之外的声压明显不能小到可以忽略的地步,因此,会产生较大的误差。以上,不知对否。 采样间距,重构距离,孔径大小等都会影响重建精度,这个程序里我觉得主要是孔径影响最大。 我觉得可能主要问题是在全息面到重建面的逆向计算过程中没有进行加指数窗或者进行正则化的原因!因为NAH的重建是一个不适定的逆问题。 我也正在搞这个,理论声压的公式根本没有倏逝波的成分,但是重建时用了倏逝波参与重建,是不是会产生很大误差?另外,经过我很多仿真表明,测量面积大只是为了减小二维傅立叶变换的卷绕误差,如果面积不大卷绕误差会大一些,但是不明显,顶多是图形不好看,不是那么平滑。在没有噪声进行理论仿真的时候,不需要加指数窗滤波也应该可以 txl 发表于 2017-4-14 10:19
我也正在搞这个,理论声压的公式根本没有倏逝波的成分,但是重建时用了倏逝波参与重建,是不是会产生很大误 ...
误差当然会大 敷衍会致命 发表于 2017-4-17 09:50
误差当然会大
刚重新看了下上面的程序,重建过程中没有倏逝波的参与,也就是声压用平面波分解的时候分解的个数不对(传播波个数+倏逝波个数=数据采集点个数),如果全部分解为传播波(传播波个数=数据采集点个数)会导致kx、ky的取值不正确,计算的结果必然不正确,不知道理解对不对。 程序在哪找的问题不少 Triste 发表于 2017-4-20 09:26
程序在哪找的问题不少
你可以给楼主指出程序中的错误。。。
页:
[1]