声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2726|回复: 9

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

[复制链接]
发表于 2015-4-23 14:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
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 | 显示全部楼层
是不是跟测量面以及重构面的采样间距有关?而且用基于平面波传播规律的反演法是不是太简单了?呵呵,声全息不太熟,我去问问声全息的专家再说
发表于 2015-12-14 15:13 | 显示全部楼层
我也刚学,当用近场声全息反演时要求全息面的测量孔径很大,使得在全息孔径之外的声压信号越小越好,越小重建时也就越精确,而程序中孔径之外的声压明显不能小到可以忽略的地步,因此,会产生较大的误差。以上,不知对否。
发表于 2015-12-14 15:15 | 显示全部楼层
采样间距,重构距离,孔径大小等都会影响重建精度,这个程序里我觉得主要是孔径影响最大。
发表于 2016-3-9 12:45 | 显示全部楼层
我觉得可能主要问题是在全息面到重建面的逆向计算过程中没有进行加指数窗或者进行正则化的原因!因为NAH的重建是一个不适定的逆问题。
发表于 2017-4-14 10:19 | 显示全部楼层
我也正在搞这个,理论声压的公式根本没有倏逝波的成分,但是重建时用了倏逝波参与重建,是不是会产生很大误差?另外,经过我很多仿真表明,测量面积大只是为了减小二维傅立叶变换的卷绕误差,如果面积不大卷绕误差会大一些,但是不明显,顶多是图形不好看,不是那么平滑。在没有噪声进行理论仿真的时候,不需要加指数窗滤波也应该可以

点评

误差当然会大  详情 回复 发表于 2017-4-17 09:50
发表于 2017-4-17 09:50 | 显示全部楼层
txl 发表于 2017-4-14 10:19
我也正在搞这个,理论声压的公式根本没有倏逝波的成分,但是重建时用了倏逝波参与重建,是不是会产生很大误 ...

误差当然会大
发表于 2017-4-18 09:17 | 显示全部楼层

刚重新看了下上面的程序,重建过程中没有倏逝波的参与,也就是声压用平面波分解的时候分解的个数不对(传播波个数+倏逝波个数=数据采集点个数),如果全部分解为传播波(传播波个数=数据采集点个数)会导致kx、ky的取值不正确,计算的结果必然不正确,不知道理解对不对。
发表于 2017-4-20 09:26 | 显示全部楼层
程序在哪找的  问题不少  
发表于 2017-4-20 10:29 | 显示全部楼层
Triste 发表于 2017-4-20 09:26
程序在哪找的  问题不少

你可以给楼主指出程序中的错误。。。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-18 02:10 , Processed in 0.064026 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表