逆散射成像--基于子空间优化算法(SOM)

文章介绍了电磁逆散射问题的背景,强调了其非线性和病态性。通过应用SOM算法进行迭代优化,计算感应电流的主要部分,并通过矩阵运算处理数据方程和状态方程的残差,逐步更新重构散射体的电性能参数。最终,展示了算法的执行过程和结果。
摘要由CSDN通过智能技术生成

前言

电磁逆散射问题是指利用测量的散射场数据重构探测区域内散射体的电性能参数空间分布。由于逆散射问题内在的非线性和病态性,通常采用迭代优化方法求解该问题。
电磁逆散射成像模型图

SOM算法

由于公式粘贴到此处总是出错,这里采用截图的方式展示,请大家多多包涵。

在这里插入图片描述

具体实现步骤

在这里插入图片描述

在这里插入图片描述

SOM算法部分代码

L = 15;
[Gs_U,Gs_S,Gs_V] = svd(Gs);%奇异值分解
%% 感应电流主要部分的计算
alpha_po = Gs_U(:,1:L)'*E_s./repmat(diag(Gs_S(1:L,1:L)),1,Ni); % L x Ni
J_po = Gs_V(:,1:L)*alpha_po; % M^2 x Ni感应电流源,感应电流的主要部分
epsono_r = ones(M,M);
epsono_r((x-0.3).^2+(y-0.6).^2<=0.2^2) = epsono_r_c;
epsono_r((x+0.3).^2+(y-0.6).^2<=0.2^2) = epsono_r_c;
epsono_r((x).^2+(y+0.2).^2>=0.3^2 & (x).^2+(y+0.2).^2<=0.6^2) = epsono_r_c;
chai0 = -1i*k0/imp*(epsono_r-ones(M,M));%计算每个网格的电磁波响应,并储存在chai0矩阵中
%% Loop循环
Gs_V_ne = Gs_V(:,(L+1):end); % M^2 x (M^2-L)%后 M-L列
%初始化向量
alpha_ne = zeros(M^2-L,Ni);  
alpha_neo = zeros(M^2-L,Ni);
rho = zeros(M^2-L,Ni);
grad = zeros(M^2-L,Ni);
B = repmat(reshape(chai,M^2,1),1,Ni).*(E_inc+Gd(J_po,Z,M))-J_po;  % M^2 x Ni
del_dat = Gs*(Gs_V_ne*alpha_ne)+Gs*J_po-E_s; % Ns x Ni数据方程残差
del_sta = Gs_V_ne*alpha_ne - repmat(reshape(chai,M^2,1),1,Ni).*Gd(Gs_V_ne*alpha_ne,Z,M)-B;   % M^2 x Ni状态方程残差
E_po = E_inc+Gd(J_po,Z,M); % M^2 x Ni电场
E_s_norm_sq = sum(abs(E_s).^2,1); % 1 x Ni
J_po_norm_sq = sum(abs(J_po).^2,1); % 1 x Ni
for n = 1:50
        grad = (Gs*Gs_V_ne)'*(del_dat)./repmat(E_s_norm_sq,M^2-L,1)+(Gs_V_ne'*(del_sta) - Gs_V_ne'*Gd(repmat(conj(chai(:)),1,Ni).*(del_sta),conj(Z),M))./repmat(J_po_norm_sq,M^2-L,1); % (M^2-L) x Ni
        if n > 1
        rho = grad+repmat(real(sum(conj(grad-grado).*grad,1))./sum(abs(grado).^2,1),M^2-L,1).*rhoo; %搜索方向
        end
        if n == 1
        rho = grad;  % (M^2-L) x Ni
        end      
        num = -sum(conj(Gs*(Gs_V_ne*rho)).*del_dat,1)./E_s_norm_sq-sum(conj((Gs_V_ne*rho - repmat(reshape(chai,M^2,1),1,Ni).*Gd(Gs_V_ne*rho,Z,M))).*del_sta,1)./J_po_norm_sq; % 1 x Ni
        den = sum(abs(Gs*(Gs_V_ne*rho)).^2,1)./E_s_norm_sq+sum(abs((Gs_V_ne*rho - repmat(reshape(chai,M^2,1),1,Ni).*Gd(Gs_V_ne*rho,Z,M))).^2,1)./J_po_norm_sq; % 1 x Ni
        alpha_ne = alpha_neo+repmat(num./den,M^2-L,1).*rho; % (M^2-L) x Ni
        J = J_po+Gs_V_ne*alpha_ne; % M^2 x Ni更新感应电流
        Et = E_inc + Gd(J,Z,M); % M^2 x Ni更新第m个总场
        chai_num = sum(conj(Et).*J./repmat(J_po_norm_sq,M^2,1),2); % M^2 x 1
        chai_den = sum(conj(Et).*Et./repmat(J_po_norm_sq,M^2,1),2); % M^2 x 1
        chai = chai_num./chai_den; % M^2 x 1目标函数
        chai(imag(chai)>0) = 0; % M^2 x 1
        chai = 1i*imag(chai);
        grado = grad; % (M^2-L) x Ni
        alpha_neo = alpha_ne; % (M^2-L) x Ni
        rhoo = rho; % (M^2-L) x Ni
        B = repmat(reshape(chai,M^2,1),1,Ni).*(E_po)-J_po; % M^2 x Ni
        del_dat = Gs*(Gs_V_ne*alpha_ne)+Gs*J_po-E_s; % Ns x Ni
        del_sta = Gs_V_ne*alpha_ne - repmat(reshape(chai,M^2,1),1,Ni).*Gd(Gs_V_ne*alpha_ne,Z,M)-B;
        objectf1 = sum(sum((abs(del_dat)).^2,1)./E_s_norm_sq,2); % 1 x 1
        objectf2 = sum(sum((abs(del_sta)).^2,1)./J_po_norm_sq,2);% 1 x 1
        f(n) = objectf1+objectf2; % 1 x 1   objective function总残差
        p = real(chai/(-1i*k0/imp))+ones(M^2,1); % M^2 x 1
        q = real(chai0(:)/(-1i*k0/imp))+ones(M^2,1); % M^2 x 1
        g(n) = norm(q-p)/norm(q); % 1 x 1   relative error相对误差
        chai_storage(:,n) = chai(:); % the updated contrast in each step更新对比度 
end
chai = reshape(chai,M,M);

结果展示

在这里插入图片描述

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值