forked from FT_DSP/FT_DSP.gitlink.net
537 lines
78 KiB
HTML
537 lines
78 KiB
HTML
|
||
|
||
<!DOCTYPE html>
|
||
<html class="writer-html5" lang="zh-CN" data-content_root="../../">
|
||
<head>
|
||
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
|
||
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<title>RDSAR(距离-多普勒SAR成像算法) — MindSpore Signal+ 使用手册 alpha 文档</title>
|
||
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=03e43079" />
|
||
<link rel="stylesheet" type="text/css" href="../../_static/css/theme.css?v=e59714d7" />
|
||
<link rel="stylesheet" type="text/css" href="../../_static/table.css?v=72b86d3e" />
|
||
|
||
|
||
<script src="../../_static/jquery.js?v=5d32c60e"></script>
|
||
<script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
|
||
<script src="../../_static/documentation_options.js?v=406e4f49"></script>
|
||
<script src="../../_static/doctools.js?v=9bcbadda"></script>
|
||
<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
|
||
<script src="../../_static/translations.js?v=beaddf03"></script>
|
||
<script src="../../_static/table.js?v=99ed15ba"></script>
|
||
<script src="../../_static/js/theme.js"></script>
|
||
<link rel="index" title="索引" href="../../genindex.html" />
|
||
<link rel="search" title="搜索" href="../../search.html" />
|
||
<link rel="next" title="AI辅助开发示例" href="../autocodegen/index.html" />
|
||
<link rel="prev" title="DSP应用示例" href="index.html" />
|
||
</head>
|
||
|
||
<body class="wy-body-for-nav">
|
||
<div class="wy-grid-for-nav">
|
||
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
||
<div class="wy-side-scroll">
|
||
<div class="wy-side-nav-search" >
|
||
|
||
|
||
|
||
<a href="../../index.html" class="icon icon-home">
|
||
MindSpore Signal+ 使用手册
|
||
</a>
|
||
<div role="search">
|
||
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
|
||
<input type="text" name="q" placeholder="搜索文档" aria-label="搜索文档" />
|
||
<input type="hidden" name="check_keywords" value="yes" />
|
||
<input type="hidden" name="area" value="default" />
|
||
</form>
|
||
</div>
|
||
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="导航菜单">
|
||
<ul class="current">
|
||
<li class="toctree-l1"><a class="reference internal" href="../../quickstart/index.html">快速入门</a></li>
|
||
<li class="toctree-l1 current"><a class="reference internal" href="../index.html">应用开发示例</a><ul class="current">
|
||
<li class="toctree-l2"><a class="reference internal" href="../ai_dsp/index.html">AI+DSP应用示例</a></li>
|
||
<li class="toctree-l2 current"><a class="reference internal" href="index.html">DSP应用示例</a><ul class="current">
|
||
<li class="toctree-l3 current"><a class="current reference internal" href="#">RDSAR(距离-多普勒SAR成像算法)</a><ul>
|
||
<li class="toctree-l4"><a class="reference internal" href="#id1">算法概述</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="#matlab">MATLAB 实现</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="#mindspore-signal">MindSpore Signal+ 实现</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="#id6">板卡部署</a></li>
|
||
<li class="toctree-l4"><a class="reference internal" href="#id7">参考与源码</a></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l2"><a class="reference internal" href="../autocodegen/index.html">AI辅助开发示例</a></li>
|
||
</ul>
|
||
</li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../../functionlib/index.html">算子库支持</a></li>
|
||
<li class="toctree-l1"><a class="reference internal" href="../../refdoc/index.html">参考资料</a></li>
|
||
</ul>
|
||
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
|
||
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="移动版导航菜单" >
|
||
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
||
<a href="../../index.html">MindSpore Signal+ 使用手册</a>
|
||
</nav>
|
||
|
||
<div class="wy-nav-content">
|
||
<div class="rst-content">
|
||
<div role="navigation" aria-label="页面导航">
|
||
<ul class="wy-breadcrumbs">
|
||
<li><a href="../../index.html" class="icon icon-home" aria-label="Home"></a></li>
|
||
<li class="breadcrumb-item"><a href="../index.html">应用开发示例</a></li>
|
||
<li class="breadcrumb-item"><a href="index.html">DSP应用示例</a></li>
|
||
<li class="breadcrumb-item active">RDSAR(距离-多普勒SAR成像算法)</li>
|
||
<li class="wy-breadcrumbs-aside">
|
||
<a href="../../_sources/appdevelop/dsp/rdsar.md.txt" rel="nofollow"> 查看页面源码</a>
|
||
</li>
|
||
</ul>
|
||
<hr/>
|
||
</div>
|
||
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
||
<div itemprop="articleBody">
|
||
|
||
<section id="rdsar-sar">
|
||
<h1>RDSAR(距离-多普勒SAR成像算法)<a class="headerlink" href="#rdsar-sar" title="Link to this heading"></a></h1>
|
||
<section id="id1">
|
||
<h2>算法概述<a class="headerlink" href="#id1" title="Link to this heading"></a></h2>
|
||
<p>RDSAR(Range-Doppler SAR)是一种经典的合成孔径雷达(SAR)成像算法,通过距离-多普勒域处理实现高分辨率雷达图像重建。该算法是SAR成像的基础方法之一,广泛应用于遥感、军事侦察、地形测绘等领域。</p>
|
||
</section>
|
||
<section id="matlab">
|
||
<h2>MATLAB 实现<a class="headerlink" href="#matlab" title="Link to this heading"></a></h2>
|
||
<div class="highlight-matlab notranslate"><div class="highlight"><pre><span></span><span class="cm">%{</span>
|
||
<span class="cm"> 本代码用于对雷达的回波数据,利用RD算法~普通版本进行成像。</span>
|
||
<span class="cm"> 2023/11/18 20:47</span>
|
||
<span class="cm">%}</span>
|
||
<span class="nb">close</span><span class="w"> </span><span class="nb">all</span><span class="p">;</span>
|
||
<span class="c">%% 数据读取</span>
|
||
<span class="c">% 加载数据</span>
|
||
<span class="c">% 1536*2048 complex int8</span>
|
||
<span class="n">echo1</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">importdata</span><span class="p">(</span><span class="s">'CDdata1.mat'</span><span class="p">);</span>
|
||
<span class="c">% 1536*2048 complex int8</span>
|
||
<span class="n">echo2</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">importdata</span><span class="p">(</span><span class="s">'CDdata2.mat'</span><span class="p">);</span>
|
||
<span class="c">% 将回波拼装在一起</span>
|
||
<span class="c">% 3072*2048 complex int8</span>
|
||
<span class="nb">echo</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">double</span><span class="p">([</span><span class="n">echo1</span><span class="p">;</span><span class="n">echo2</span><span class="p">]);</span>
|
||
<span class="c">% 加载参数</span>
|
||
<span class="n">para</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">importdata</span><span class="p">(</span><span class="s">'CD_run_params.mat'</span><span class="p">);</span>
|
||
<span class="n">Fr</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">para</span><span class="p">.</span><span class="n">Fr</span><span class="p">;</span><span class="w"> </span><span class="c">% 距离向采样率</span>
|
||
<span class="n">Fa</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">para</span><span class="p">.</span><span class="n">PRF</span><span class="p">;</span><span class="w"> </span><span class="c">% 方位向采样率</span>
|
||
<span class="n">f0</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">para</span><span class="p">.</span><span class="n">f0</span><span class="p">;</span><span class="w"> </span><span class="c">% 中心频率</span>
|
||
<span class="n">Tr</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">para</span><span class="p">.</span><span class="n">Tr</span><span class="p">;</span><span class="w"> </span><span class="c">% 脉冲持续时间</span>
|
||
<span class="n">R0</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">para</span><span class="p">.</span><span class="n">R0</span><span class="p">;</span><span class="w"> </span><span class="c">% 最近点斜距</span>
|
||
<span class="n">Kr</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="o">-</span><span class="n">para</span><span class="p">.</span><span class="n">Kr</span><span class="p">;</span><span class="w"> </span><span class="c">% 线性调频率</span>
|
||
<span class="n">c</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">para</span><span class="p">.</span><span class="n">c</span><span class="p">;</span><span class="w"> </span><span class="c">% 光速</span>
|
||
<span class="c">% 以下参数来自课本附录A</span>
|
||
<span class="n">Vr</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">7062</span><span class="p">;</span><span class="w"> </span><span class="c">% 等效雷达速度</span>
|
||
<span class="n">Ka</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">1733</span><span class="p">;</span><span class="w"> </span><span class="c">% 方位向调频率</span>
|
||
<span class="n">f_nc</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="o">-</span><span class="mi">6900</span><span class="p">;</span><span class="w"> </span><span class="c">% 多普勒中心频率</span>
|
||
<span class="n">lamda</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">c</span><span class="o">/</span><span class="n">f0</span><span class="p">;</span><span class="w"> </span><span class="c">% 波长</span>
|
||
|
||
<span class="c">%% 图像填充</span>
|
||
<span class="c">% 计算参数</span>
|
||
<span class="p">[</span><span class="n">Na</span><span class="p">,</span><span class="n">Nr</span><span class="p">]</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">size</span><span class="p">(</span><span class="nb">echo</span><span class="p">);</span>
|
||
<span class="c">% 按照全尺寸对图像进行补零</span>
|
||
<span class="c">% 4096*3414 complex double</span>
|
||
<span class="nb">echo</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">padarray</span><span class="p">(</span><span class="nb">echo</span><span class="p">,[</span><span class="nb">round</span><span class="p">(</span><span class="n">Na</span><span class="o">/</span><span class="mi">6</span><span class="p">),</span><span class="w"> </span><span class="nb">round</span><span class="p">(</span><span class="n">Nr</span><span class="o">/</span><span class="mi">3</span><span class="p">)]);</span>
|
||
<span class="c">% 计算参数</span>
|
||
|
||
<span class="c">% 4096*3414 complex double</span>
|
||
<span class="p">[</span><span class="n">Na</span><span class="p">,</span><span class="n">Nr</span><span class="p">]</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">size</span><span class="p">(</span><span class="nb">echo</span><span class="p">);</span>
|
||
|
||
<span class="c">%% 轴产生</span>
|
||
<span class="c">% 距离向时间轴及频率轴</span>
|
||
<span class="n">tr_axis</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">2</span><span class="o">*</span><span class="n">R0</span><span class="o">/</span><span class="n">c</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="p">(</span><span class="o">-</span><span class="n">Nr</span><span class="o">/</span><span class="mi">2</span><span class="p">:</span><span class="n">Nr</span><span class="o">/</span><span class="mi">2</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">/</span><span class="n">Fr</span><span class="p">;</span><span class="w"> </span><span class="c">% 距离向时间轴</span>
|
||
<span class="n">fr_gap</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">Fr</span><span class="o">/</span><span class="n">Nr</span><span class="p">;</span>
|
||
<span class="c">% 交换行向量的左右两半部分。如果一个向量的元素数为奇数,则中间的元素被视为属于向量的左半部分</span>
|
||
<span class="n">fr_axis</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">fftshift</span><span class="p">(</span><span class="o">-</span><span class="n">Nr</span><span class="o">/</span><span class="mi">2</span><span class="p">:</span><span class="n">Nr</span><span class="o">/</span><span class="mi">2</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">.*</span><span class="n">fr_gap</span><span class="p">;</span><span class="w"> </span><span class="c">% 距离向频率轴</span>
|
||
|
||
<span class="c">% 方位向时间轴及频率轴</span>
|
||
<span class="n">ta_axis</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">(</span><span class="o">-</span><span class="n">Na</span><span class="o">/</span><span class="mi">2</span><span class="p">:</span><span class="n">Na</span><span class="o">/</span><span class="mi">2</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">/</span><span class="n">Fa</span><span class="p">;</span><span class="w"> </span><span class="c">% 方位向时间轴</span>
|
||
<span class="n">ta_gap</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">Fa</span><span class="o">/</span><span class="n">Na</span><span class="p">;</span><span class="w"> </span>
|
||
<span class="n">fa_axis</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">f_nc</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nb">fftshift</span><span class="p">(</span><span class="o">-</span><span class="n">Na</span><span class="o">/</span><span class="mi">2</span><span class="p">:</span><span class="n">Na</span><span class="o">/</span><span class="mi">2</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">.*</span><span class="n">ta_gap</span><span class="p">;</span><span class="w"> </span><span class="c">% 方位向频率轴</span>
|
||
<span class="c">% 方位向对应纵轴,应该转置成列向量</span>
|
||
<span class="n">ta_axis</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">ta_axis</span><span class="o">'</span><span class="p">;</span>
|
||
<span class="n">fa_axis</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">fa_axis</span><span class="o">'</span><span class="p">;</span>
|
||
|
||
<span class="c">%% 第一步 距离压缩</span>
|
||
<span class="c">% 距离向傅里叶变换,返回每行的FFT计算结果</span>
|
||
<span class="n">echo_s1</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">fft</span><span class="p">(</span><span class="nb">echo</span><span class="p">,[],</span><span class="mi">2</span><span class="p">);</span>
|
||
<span class="c">% 距离向距离压缩滤波器</span>
|
||
<span class="n">echo_d1_mf</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">exp</span><span class="p">(</span>1<span class="nb">i</span><span class="o">*</span><span class="nb">pi</span><span class="o">/</span><span class="n">Kr</span><span class="o">.*</span><span class="n">fr_axis</span><span class="o">.^</span><span class="mi">2</span><span class="p">);</span>
|
||
<span class="c">% 距离向匹配滤波,返回每一行的 n 点逆变换</span>
|
||
<span class="n">echo_s1</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">ifft</span><span class="p">(</span><span class="n">echo_s1</span><span class="w"> </span><span class="o">.*</span><span class="w"> </span><span class="n">echo_d1_mf</span><span class="p">,[],</span><span class="mi">2</span><span class="p">);</span>
|
||
|
||
<span class="c">%% 第二步 方位向傅里叶变换&距离徙动矫正</span>
|
||
<span class="c">% 方位向下变频</span>
|
||
<span class="n">echo_s1</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">echo_s1</span><span class="w"> </span><span class="o">.*</span><span class="w"> </span><span class="nb">exp</span><span class="p">(</span><span class="o">-</span>2<span class="nb">i</span><span class="o">*</span><span class="nb">pi</span><span class="o">*</span><span class="n">f_nc</span><span class="o">.*</span><span class="n">ta_axis</span><span class="p">);</span>
|
||
<span class="c">% 方位向傅里叶变换,返回每一列的FFT计算结果</span>
|
||
<span class="n">echo_s2</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">fft</span><span class="p">(</span><span class="n">echo_s1</span><span class="p">,[],</span><span class="mi">1</span><span class="p">);</span>
|
||
<span class="c">% 计算徙动因子</span>
|
||
<span class="n">D</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">lamda</span><span class="o">^</span><span class="mi">2</span><span class="o">*</span><span class="n">R0</span><span class="o">/</span><span class="mi">8</span><span class="o">/</span><span class="n">Vr</span><span class="o">^</span><span class="mi">2</span><span class="o">.*</span><span class="n">fa_axis</span><span class="o">.^</span><span class="mi">2</span><span class="p">;</span>
|
||
<span class="n">G</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">exp</span><span class="p">(</span>4<span class="nb">i</span><span class="o">*</span><span class="nb">pi</span><span class="o">/</span><span class="n">c</span><span class="o">.*</span><span class="n">fr_axis</span><span class="o">.*</span><span class="n">D</span><span class="p">);</span>
|
||
<span class="c">% 校正</span>
|
||
<span class="n">echo_s2</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">echo_s2</span><span class="o">.*</span><span class="w"> </span><span class="n">G</span><span class="p">;</span>
|
||
|
||
<span class="c">%% 第三步 方位压缩</span>
|
||
<span class="c">% 方位向滤波器</span>
|
||
<span class="n">echo_d3_mf</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">exp</span><span class="p">(</span><span class="o">-</span>1<span class="nb">i</span><span class="o">*</span><span class="nb">pi</span><span class="o">/</span><span class="n">Ka</span><span class="o">.*</span><span class="n">fa_axis</span><span class="o">.^</span><span class="mi">2</span><span class="p">);</span>
|
||
<span class="c">% 方位向脉冲压缩</span>
|
||
<span class="n">echo_s3</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">echo_s2</span><span class="w"> </span><span class="o">.*</span><span class="w"> </span><span class="n">echo_d3_mf</span><span class="p">;</span>
|
||
<span class="c">% 方位向逆傅里叶变换,返回每一列的逆变换结果</span>
|
||
<span class="n">echo_s3</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">ifft</span><span class="p">(</span><span class="n">echo_s3</span><span class="p">,[],</span><span class="mi">1</span><span class="p">);</span>
|
||
|
||
<span class="c">%% 数据最后的矫正</span>
|
||
<span class="c">% 根据实际观感,方位向做合适的循环位移</span>
|
||
<span class="n">echo_s4</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">circshift</span><span class="p">(</span><span class="nb">abs</span><span class="p">(</span><span class="n">echo_s3</span><span class="p">),</span><span class="w"> </span><span class="o">-</span><span class="mi">3328</span><span class="p">,</span><span class="w"> </span><span class="mi">1</span><span class="p">);</span>
|
||
<span class="c">% 上下镜像</span>
|
||
<span class="n">echo_s4</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">flipud</span><span class="p">(</span><span class="n">echo_s4</span><span class="p">);</span>
|
||
<span class="n">echo_s5</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">abs</span><span class="p">(</span><span class="n">echo_s4</span><span class="p">);</span>
|
||
<span class="n">saturation</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">50</span><span class="p">;</span>
|
||
<span class="n">echo_s5</span><span class="p">(</span><span class="n">echo_s5</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="n">saturation</span><span class="p">)</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">saturation</span><span class="p">;</span>
|
||
|
||
<span class="c">%% 成像</span>
|
||
<span class="c">% 绘制处理结果热力图</span>
|
||
<span class="nb">figure</span><span class="p">;</span>
|
||
<span class="nb">imagesc</span><span class="p">(</span><span class="n">tr_axis</span><span class="o">.*</span><span class="n">c</span><span class="p">,</span><span class="n">ta_axis</span><span class="o">.*</span><span class="n">c</span><span class="p">,</span><span class="n">echo_s5</span><span class="p">);</span>
|
||
<span class="nb">title</span><span class="p">(</span><span class="s">'处理结果(RD算法)'</span><span class="p">);</span>
|
||
<span class="c">% 以灰度图显示</span>
|
||
<span class="n">echo_res</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nb">gather</span><span class="p">(</span><span class="n">echo_s5</span><span class="w"> </span><span class="o">./</span><span class="w"> </span><span class="n">saturation</span><span class="p">);</span>
|
||
<span class="c">% 直方图均衡</span>
|
||
<span class="n">echo_res</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="n">adapthisteq</span><span class="p">(</span><span class="n">echo_res</span><span class="p">,</span><span class="s">"ClipLimit"</span><span class="p">,</span><span class="mf">0.004</span><span class="p">,</span><span class="s">"Distribution"</span><span class="p">,</span><span class="s">"exponential"</span><span class="p">,</span><span class="s">"Alpha"</span><span class="p">,</span><span class="mf">0.5</span><span class="p">);</span>
|
||
<span class="nb">figure</span><span class="p">;</span>
|
||
<span class="nb">imshow</span><span class="p">(</span><span class="n">echo_res</span><span class="p">);</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="mindspore-signal">
|
||
<h2>MindSpore Signal+ 实现<a class="headerlink" href="#mindspore-signal" title="Link to this heading"></a></h2>
|
||
<p>在开始编写 MindSpore Signal+ 实现之前,建议先对原始 MATLAB 代码做流程梳理。可以将整体算法分为以下几个部分:</p>
|
||
<ul class="simple">
|
||
<li><p>1.数据读取</p></li>
|
||
<li><p>2.数据预处理</p></li>
|
||
<li><p>3.核心计算</p></li>
|
||
<li><p>4.数据后处理</p></li>
|
||
</ul>
|
||
<section id="id2">
|
||
<h3>1. 数据读取<a class="headerlink" href="#id2" title="Link to this heading"></a></h3>
|
||
<p>在matlab中,数据读取是通过<code class="docutils literal notranslate"><span class="pre">importdata</span></code>函数实现的。在Python中使用MindSpore Signal+时,我们可以使用NumPy的<code class="docutils literal notranslate"><span class="pre">loadmat</span></code>或SciPy的<code class="docutils literal notranslate"><span class="pre">io.loadmat</span></code>来加载MATLAB文件中的变量,因此在Python代码开头需要导入NumPy和SciPy。</p>
|
||
<p>示例代码:</p>
|
||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># step 0 : 准备初始数据</span>
|
||
<span class="n">echo1</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">sio</span><span class="o">.</span><span class="n">loadmat</span><span class="p">(</span><span class="s1">'CDdata1.mat'</span><span class="p">)[</span><span class="s1">'data'</span><span class="p">])</span>
|
||
<span class="n">echo2</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">sio</span><span class="o">.</span><span class="n">loadmat</span><span class="p">(</span><span class="s1">'CDdata2.mat'</span><span class="p">)[</span><span class="s1">'data'</span><span class="p">])</span>
|
||
<span class="n">echo</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">echo1</span><span class="p">,</span> <span class="n">echo2</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
|
||
<span class="c1"># print(echo.shape)</span>
|
||
|
||
<span class="c1"># RD-SAR parameters</span>
|
||
<span class="n">para</span> <span class="o">=</span> <span class="n">sio</span><span class="o">.</span><span class="n">loadmat</span><span class="p">(</span><span class="s1">'CD_run_params.mat'</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">备注</p>
|
||
<p>如果当前Python环境中没有安装<code class="docutils literal notranslate"><span class="pre">scipy.io</span></code>,可以通过pip进行安装:<code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">scipy</span></code></p>
|
||
</div>
|
||
</section>
|
||
<section id="id3">
|
||
<h3>2. 数据预处理<a class="headerlink" href="#id3" title="Link to this heading"></a></h3>
|
||
<p>从算法整体分析,数据读取后到核心计算之前的步骤,主要是对数据进行填充和轴的生成,这部分都是核心计算的前期准备,建议将这部分代码封装在<code class="docutils literal notranslate"><span class="pre">__init__</span></code>函数中完成,不放在<code class="docutils literal notranslate"><span class="pre">construct</span></code>函数中可以避免额外的开销,当实例化一个类时自动触发一次<code class="docutils literal notranslate"><span class="pre">__init__</span></code>函数。</p>
|
||
<p>示例代码:</p>
|
||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">rdsar</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Cell</span><span class="p">):</span>
|
||
<span class="c1"># 数据预处理</span>
|
||
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">echo_shape</span><span class="p">,</span> <span class="n">para</span><span class="p">,</span> <span class="n">Ka</span><span class="p">,</span> <span class="n">f_nc</span><span class="p">):</span>
|
||
<span class="nb">super</span><span class="p">(</span><span class="n">rdsar</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">Fr</span> <span class="o">=</span> <span class="n">para</span><span class="p">[</span><span class="s2">"Fr"</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||
<span class="c1"># 方位向采样率</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">Fa</span> <span class="o">=</span> <span class="n">para</span><span class="p">[</span><span class="s2">"PRF"</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||
<span class="c1"># 中心频率</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">f0</span> <span class="o">=</span> <span class="n">para</span><span class="p">[</span><span class="s2">"f0"</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||
<span class="c1"># 脉冲持续时间</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">Tr</span> <span class="o">=</span> <span class="n">para</span><span class="p">[</span><span class="s2">"Tr"</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||
<span class="c1"># 最近点斜距</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">R0</span> <span class="o">=</span> <span class="n">para</span><span class="p">[</span><span class="s2">"R0"</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||
<span class="c1"># 线性调频率</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">Kr</span> <span class="o">=</span> <span class="o">-</span><span class="n">para</span><span class="p">[</span><span class="s2">"Kr"</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||
<span class="o">...</span>
|
||
|
||
<span class="c1"># 核心计算</span>
|
||
<span class="k">def</span><span class="w"> </span><span class="nf">construct</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inputs</span><span class="p">):</span>
|
||
<span class="o">...</span>
|
||
<span class="k">return</span> <span class="n">results</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="id4">
|
||
<h3>3. 核心计算<a class="headerlink" href="#id4" title="Link to this heading"></a></h3>
|
||
<p>核心计算部分是算法的核心,也是计算复杂度最高的部分,建议将这部分代码封装在<code class="docutils literal notranslate"><span class="pre">construct</span></code>函数中,这样可以方便后续的调用。核心计算的迁移主要是将matlab的计算逻辑转换为MindSpore Signal+的API调用,例如:matlab中的<code class="docutils literal notranslate"><span class="pre">fft(echo,[],2)</span></code>可以转换为<code class="docutils literal notranslate"><span class="pre">mr.FFT(dim=1)</span></code>,dim=1 表示按行计算(沿着列移动,计算每行的FFT)。MindSpore Signal+ API列表可以查阅<a class="reference external" href="https://www.mindspore.cn/docs/zh-CN/r2.3.1/api_python/mindspore.html">MindSpore官方文档</a>和<a class="reference internal" href="../../functionlib/custom_op/index.html"><span class="doc">自定义算子列表</span></a>。</p>
|
||
<p>示例代码:</p>
|
||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">class</span><span class="w"> </span><span class="nc">rdsar</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Cell</span><span class="p">):</span>
|
||
<span class="c1"># 数据预处理</span>
|
||
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">echo_shape</span><span class="p">,</span> <span class="n">para</span><span class="p">,</span> <span class="n">Ka</span><span class="p">,</span> <span class="n">f_nc</span><span class="p">):</span>
|
||
<span class="o">...</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">fft</span> <span class="o">=</span> <span class="n">mr</span><span class="o">.</span><span class="n">FFT</span><span class="p">(</span><span class="n">dim</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">fft1</span> <span class="o">=</span> <span class="n">mr</span><span class="o">.</span><span class="n">FFT</span><span class="p">(</span><span class="n">dim</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">ifft</span> <span class="o">=</span> <span class="n">mr</span><span class="o">.</span><span class="n">IFFT</span><span class="p">(</span><span class="n">dim</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">ifft1</span> <span class="o">=</span> <span class="n">mr</span><span class="o">.</span><span class="n">IFFT</span><span class="p">(</span><span class="n">dim</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||
<span class="o">...</span>
|
||
|
||
<span class="k">def</span><span class="w"> </span><span class="nf">construct</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">echo</span><span class="p">,</span> <span class="n">temp</span><span class="p">,</span> <span class="n">temp1</span><span class="p">,</span> <span class="n">temp2</span><span class="p">,</span> <span class="n">temp3</span><span class="p">):</span>
|
||
<span class="n">echo</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">echo</span><span class="p">,</span> <span class="n">ms</span><span class="o">.</span><span class="n">complex64</span><span class="p">)</span>
|
||
<span class="n">echo_s1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fft1</span><span class="p">(</span><span class="n">echo</span><span class="p">)</span>
|
||
<span class="n">echo_d1_mf</span> <span class="o">=</span> <span class="n">ops</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sq_fr_axis</span> <span class="o">*</span> <span class="n">temp</span><span class="p">)</span>
|
||
<span class="n">echo_s1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ifft1</span><span class="p">(</span><span class="n">echo_s1</span> <span class="o">*</span> <span class="n">echo_d1_mf</span><span class="p">)</span>
|
||
<span class="n">echo_s1</span> <span class="o">=</span> <span class="n">echo_s1</span> <span class="o">*</span> <span class="n">ops</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="n">temp1</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">ta_axis</span><span class="p">)</span>
|
||
<span class="n">echo_s2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fft</span><span class="p">(</span><span class="n">echo_s1</span><span class="p">)</span>
|
||
<span class="o">...</span>
|
||
<span class="k">return</span> <span class="n">echo_s5</span>
|
||
</pre></div>
|
||
</div>
|
||
<div class="admonition tip">
|
||
<p class="admonition-title">小技巧</p>
|
||
<p>1.对于一些基本运算符,例如:<code class="docutils literal notranslate"><span class="pre">*</span></code>,<code class="docutils literal notranslate"><span class="pre">+</span></code>,<code class="docutils literal notranslate"><span class="pre">/</span></code>等,只要matlab语义与Python是一致的可以直接写不用转换成API调用。<br>
|
||
2.如果某个API在计算流程中反复使用,可以提前在<code class="docutils literal notranslate"><span class="pre">__init__</span></code>中实例化,减少开销。</p>
|
||
</div>
|
||
<p>完成核心计算部分的迁移后,就可以利用实际输入数据进行测试,验证算法的正确性。</p>
|
||
<p>示例代码:</p>
|
||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># 准备数据</span>
|
||
<span class="n">echo1</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">sio</span><span class="o">.</span><span class="n">loadmat</span><span class="p">(</span><span class="s2">"CDdata1.mat"</span><span class="p">)[</span><span class="s2">"data"</span><span class="p">])</span>
|
||
<span class="n">echo2</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">sio</span><span class="o">.</span><span class="n">loadmat</span><span class="p">(</span><span class="s2">"CDdata2.mat"</span><span class="p">)[</span><span class="s2">"data"</span><span class="p">])</span>
|
||
<span class="n">echo</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">echo1</span><span class="p">,</span> <span class="n">echo2</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
|
||
|
||
<span class="c1"># 图像填充</span>
|
||
<span class="n">Na</span><span class="p">,</span> <span class="n">Nr</span> <span class="o">=</span> <span class="n">echo</span><span class="o">.</span><span class="n">shape</span>
|
||
<span class="n">echo</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">pad</span><span class="p">(</span><span class="n">echo</span><span class="p">,</span> <span class="p">((</span><span class="nb">round</span><span class="p">(</span><span class="n">Na</span> <span class="o">/</span> <span class="mi">6</span><span class="p">),</span> <span class="nb">round</span><span class="p">(</span><span class="n">Na</span> <span class="o">/</span> <span class="mi">6</span><span class="p">)),</span> <span class="p">(</span><span class="nb">round</span><span class="p">(</span><span class="n">Nr</span> <span class="o">/</span> <span class="mi">3</span><span class="p">),</span> <span class="nb">round</span><span class="p">(</span><span class="n">Nr</span> <span class="o">/</span> <span class="mi">3</span><span class="p">))))</span>
|
||
<span class="n">new_shape</span> <span class="o">=</span> <span class="p">(</span><span class="mi">4096</span><span class="p">,</span> <span class="mi">4096</span><span class="p">)</span>
|
||
<span class="n">echo</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">pad</span><span class="p">(</span>
|
||
<span class="n">echo</span><span class="p">,</span>
|
||
<span class="p">((</span><span class="mi">0</span><span class="p">,</span> <span class="n">new_shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">echo</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">new_shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">echo</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">])),</span>
|
||
<span class="s2">"constant"</span><span class="p">,</span>
|
||
<span class="n">constant_values</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
|
||
<span class="p">)</span>
|
||
<span class="n">Na</span><span class="p">,</span> <span class="n">Nr</span> <span class="o">=</span> <span class="n">echo</span><span class="o">.</span><span class="n">shape</span>
|
||
<span class="n">echo</span> <span class="o">=</span> <span class="n">Tensor</span><span class="p">(</span><span class="n">echo</span><span class="p">)</span>
|
||
<span class="n">para</span> <span class="o">=</span> <span class="n">sio</span><span class="o">.</span><span class="n">loadmat</span><span class="p">(</span><span class="s2">"CD_run_params.mat"</span><span class="p">)</span>
|
||
<span class="n">Kr</span> <span class="o">=</span> <span class="o">-</span><span class="n">para</span><span class="p">[</span><span class="s2">"Kr"</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||
<span class="n">c</span> <span class="o">=</span> <span class="n">para</span><span class="p">[</span><span class="s2">"c"</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||
<span class="n">Ka</span> <span class="o">=</span> <span class="mi">1733</span>
|
||
<span class="n">f_nc</span> <span class="o">=</span> <span class="o">-</span><span class="mi">6900</span>
|
||
|
||
<span class="n">temp</span> <span class="o">=</span> <span class="n">Tensor</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">pi</span> <span class="o">/</span> <span class="n">Kr</span> <span class="o">*</span> <span class="mi">1</span><span class="n">j</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">ms</span><span class="o">.</span><span class="n">complex64</span><span class="p">)</span>
|
||
<span class="n">temp1</span> <span class="o">=</span> <span class="n">Tensor</span><span class="p">(</span><span class="o">-</span><span class="mi">2</span><span class="n">j</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">pi</span> <span class="o">*</span> <span class="n">f_nc</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">ms</span><span class="o">.</span><span class="n">complex64</span><span class="p">)</span>
|
||
<span class="n">temp2</span> <span class="o">=</span> <span class="n">Tensor</span><span class="p">(</span><span class="mi">4</span><span class="n">j</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">pi</span> <span class="o">/</span> <span class="n">c</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">ms</span><span class="o">.</span><span class="n">complex64</span><span class="p">)</span>
|
||
<span class="n">temp3</span> <span class="o">=</span> <span class="n">Tensor</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="n">j</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">pi</span> <span class="o">/</span> <span class="n">Ka</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">ms</span><span class="o">.</span><span class="n">complex64</span><span class="p">)</span>
|
||
<span class="c1"># 实例化模型</span>
|
||
<span class="n">model</span> <span class="o">=</span> <span class="n">rdsar</span><span class="p">(</span><span class="n">echo</span><span class="o">.</span><span class="n">shape</span><span class="p">,</span> <span class="n">para</span><span class="p">,</span> <span class="n">Ka</span><span class="p">,</span> <span class="n">f_nc</span><span class="p">)</span>
|
||
<span class="n">echo_s5</span> <span class="o">=</span> <span class="n">model</span><span class="p">(</span><span class="n">echo</span><span class="p">,</span> <span class="n">temp</span><span class="p">,</span> <span class="n">temp1</span><span class="p">,</span> <span class="n">temp2</span><span class="p">,</span> <span class="n">temp3</span><span class="p">)</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="n">echo_s5</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
<section id="id5">
|
||
<h3>4. 数据后处理<a class="headerlink" href="#id5" title="Link to this heading"></a></h3>
|
||
<p>需要对计算结果进行成像,这部分主要是将计算结果转换为图像,可以使用matplotlib库进行绘制。</p>
|
||
<p>示例代码:</p>
|
||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">matplotlib.pyplot</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">plt</span>
|
||
<span class="c1"># 成像</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="s2">"show image"</span><span class="p">)</span>
|
||
<span class="n">plt</span><span class="o">.</span><span class="n">pcolor</span><span class="p">(</span><span class="n">echo_s5</span><span class="o">.</span><span class="n">numpy</span><span class="p">())</span>
|
||
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
|
||
<span class="n">plt</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="s1">'v3.jpg'</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
<div class="admonition note">
|
||
<p class="admonition-title">备注</p>
|
||
<p>如果当前Python环境中没有安装<code class="docutils literal notranslate"><span class="pre">matplotlib</span></code>,可以通过pip进行安装:<code class="docutils literal notranslate"><span class="pre">pip</span> <span class="pre">install</span> <span class="pre">matplotlib</span></code></p>
|
||
</div>
|
||
<p>结果对比:</p>
|
||
<div style="display: flex; justify-content: space-around; align-items: center; margin: 20px 0;">
|
||
<div style="text-align: center;">
|
||
<img src="../../_static/rdsar_matlab.png" alt="rdsar_matlab" width="400"/>
|
||
<p style="margin-top: 10px; font-size: 14px; color: #666;">图1:MATLAB结果</p>
|
||
</div>
|
||
<div style="text-align: center;">
|
||
<img src="../../_static/rdsar_python.png" alt="rdsar_python" width="400"/>
|
||
<p style="margin-top: 10px; font-size: 14px; color: #666;">图2:MindSpore Signal+结果</p>
|
||
</div>
|
||
</div>
|
||
<p>可以看出成像上存在一定误差,但整体趋势一致。确认结果无误后,可通过 <code class="docutils literal notranslate"><span class="pre">mindspore.export</span></code> 导出 MINDIR 模型,便于在 MindSpore Lite 端部署(板卡侧运行)。</p>
|
||
<p>以下是完整的MindSpore Signal+实现的代码:</p>
|
||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">mindspore</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">ms</span>
|
||
<span class="kn">import</span><span class="w"> </span><span class="nn">numpy</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">np</span>
|
||
<span class="kn">import</span><span class="w"> </span><span class="nn">scipy.io</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">sio</span>
|
||
<span class="kn">from</span><span class="w"> </span><span class="nn">mindspore</span><span class="w"> </span><span class="kn">import</span> <span class="n">Tensor</span><span class="p">,</span> <span class="n">nn</span><span class="p">,</span> <span class="n">ops</span>
|
||
|
||
<span class="kn">import</span><span class="w"> </span><span class="nn">mindradar</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">mr</span>
|
||
|
||
<span class="kn">import</span><span class="w"> </span><span class="nn">matplotlib.pyplot</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">plt</span>
|
||
|
||
|
||
<span class="k">class</span><span class="w"> </span><span class="nc">rdsar</span><span class="p">(</span><span class="n">nn</span><span class="o">.</span><span class="n">Cell</span><span class="p">):</span>
|
||
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">echo_shape</span><span class="p">,</span> <span class="n">para</span><span class="p">,</span> <span class="n">Ka</span><span class="p">,</span> <span class="n">f_nc</span><span class="p">):</span>
|
||
<span class="nb">super</span><span class="p">(</span><span class="n">rdsar</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
|
||
<span class="c1"># 距离向采样率</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">Fr</span> <span class="o">=</span> <span class="n">para</span><span class="p">[</span><span class="s2">"Fr"</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||
<span class="c1"># 方位向采样率</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">Fa</span> <span class="o">=</span> <span class="n">para</span><span class="p">[</span><span class="s2">"PRF"</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||
<span class="c1"># 中心频率</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">f0</span> <span class="o">=</span> <span class="n">para</span><span class="p">[</span><span class="s2">"f0"</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||
<span class="c1"># 脉冲持续时间</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">Tr</span> <span class="o">=</span> <span class="n">para</span><span class="p">[</span><span class="s2">"Tr"</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||
<span class="c1"># 最近点斜距</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">R0</span> <span class="o">=</span> <span class="n">para</span><span class="p">[</span><span class="s2">"R0"</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||
<span class="c1"># 线性调频率</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">Kr</span> <span class="o">=</span> <span class="o">-</span><span class="n">para</span><span class="p">[</span><span class="s2">"Kr"</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||
<span class="c1"># 光速</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">c</span> <span class="o">=</span> <span class="n">para</span><span class="p">[</span><span class="s2">"c"</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||
<span class="c1"># 等效雷达速度</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">Vr</span> <span class="o">=</span> <span class="mi">7062</span>
|
||
<span class="c1"># 方位向调频率</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">Ka</span> <span class="o">=</span> <span class="n">Ka</span>
|
||
<span class="c1"># 多普勒中心频率</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">f_nc</span> <span class="o">=</span> <span class="n">f_nc</span>
|
||
<span class="c1"># 波长</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">lamda</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">c</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">f0</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">saturation</span> <span class="o">=</span> <span class="mi">50</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">Na</span> <span class="o">=</span> <span class="n">echo_shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">Nr</span> <span class="o">=</span> <span class="n">echo_shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">fr_axis</span> <span class="o">=</span> <span class="n">Tensor</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">Nr</span> <span class="o">/</span> <span class="mi">2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">Nr</span> <span class="o">/</span> <span class="mi">2</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">ms</span><span class="o">.</span><span class="n">float32</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">fa_axis</span> <span class="o">=</span> <span class="n">Tensor</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">Na</span> <span class="o">/</span> <span class="mi">2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">Na</span> <span class="o">/</span> <span class="mi">2</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="n">ms</span><span class="o">.</span><span class="n">float32</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">fr_gap</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">Fr</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">Nr</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">ta_axis</span> <span class="o">=</span> <span class="n">Tensor</span><span class="p">(</span>
|
||
<span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">Na</span> <span class="o">/</span> <span class="mi">2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">Na</span> <span class="o">/</span> <span class="mi">2</span><span class="p">)</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">Fa</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">ms</span><span class="o">.</span><span class="n">float32</span>
|
||
<span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">ta_gap</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">Fa</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">Na</span>
|
||
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">cast</span> <span class="o">=</span> <span class="n">ops</span><span class="o">.</span><span class="n">Cast</span><span class="p">()</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">matmul</span> <span class="o">=</span> <span class="n">ops</span><span class="o">.</span><span class="n">MatMul</span><span class="p">(</span><span class="kc">False</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">fft</span> <span class="o">=</span> <span class="n">mr</span><span class="o">.</span><span class="n">FFT</span><span class="p">(</span><span class="n">dim</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">fft1</span> <span class="o">=</span> <span class="n">mr</span><span class="o">.</span><span class="n">FFT</span><span class="p">(</span><span class="n">dim</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">ifft</span> <span class="o">=</span> <span class="n">mr</span><span class="o">.</span><span class="n">IFFT</span><span class="p">(</span><span class="n">dim</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">ifft1</span> <span class="o">=</span> <span class="n">mr</span><span class="o">.</span><span class="n">IFFT</span><span class="p">(</span><span class="n">dim</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">abs</span> <span class="o">=</span> <span class="n">mr</span><span class="o">.</span><span class="n">ComplexAbs</span><span class="p">()</span>
|
||
|
||
<span class="c1"># 预处理</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">fr_axis</span> <span class="o">=</span> <span class="n">mr</span><span class="o">.</span><span class="n">fftshift</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fr_axis</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">fr_gap</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">fa_axis</span> <span class="o">=</span> <span class="n">mr</span><span class="o">.</span><span class="n">fftshift</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fa_axis</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">ta_gap</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">f_nc</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">ta_axis</span> <span class="o">=</span> <span class="n">ops</span><span class="o">.</span><span class="n">unsqueeze</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">ta_axis</span><span class="p">,</span> <span class="n">dim</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">fa_axis</span> <span class="o">=</span> <span class="n">ops</span><span class="o">.</span><span class="n">unsqueeze</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fa_axis</span><span class="p">,</span> <span class="n">dim</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">D</span> <span class="o">=</span> <span class="n">ops</span><span class="o">.</span><span class="n">square</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fa_axis</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">lamda</span><span class="o">**</span><span class="mi">2</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">R0</span> <span class="o">/</span> <span class="mi">8</span> <span class="o">/</span> <span class="bp">self</span><span class="o">.</span><span class="n">Vr</span><span class="o">**</span><span class="mi">2</span>
|
||
<span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">G</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">matmul</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">D</span><span class="p">,</span> <span class="n">ops</span><span class="o">.</span><span class="n">unsqueeze</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fr_axis</span><span class="p">,</span> <span class="n">dim</span><span class="o">=</span><span class="mi">1</span><span class="p">))</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">sq_fa_axis</span> <span class="o">=</span> <span class="n">ops</span><span class="o">.</span><span class="n">square</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fa_axis</span><span class="p">)</span>
|
||
<span class="bp">self</span><span class="o">.</span><span class="n">sq_fr_axis</span> <span class="o">=</span> <span class="n">ops</span><span class="o">.</span><span class="n">square</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fr_axis</span><span class="p">)</span>
|
||
|
||
<span class="k">def</span><span class="w"> </span><span class="nf">construct</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">echo</span><span class="p">,</span> <span class="n">temp</span><span class="p">,</span> <span class="n">temp1</span><span class="p">,</span> <span class="n">temp2</span><span class="p">,</span> <span class="n">temp3</span><span class="p">):</span>
|
||
<span class="n">echo</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cast</span><span class="p">(</span><span class="n">echo</span><span class="p">,</span> <span class="n">ms</span><span class="o">.</span><span class="n">complex64</span><span class="p">)</span>
|
||
<span class="n">echo_s1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fft1</span><span class="p">(</span><span class="n">echo</span><span class="p">)</span>
|
||
<span class="n">echo_d1_mf</span> <span class="o">=</span> <span class="n">ops</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sq_fr_axis</span> <span class="o">*</span> <span class="n">temp</span><span class="p">)</span>
|
||
<span class="n">echo_s1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ifft1</span><span class="p">(</span><span class="n">echo_s1</span> <span class="o">*</span> <span class="n">echo_d1_mf</span><span class="p">)</span>
|
||
<span class="n">echo_s1</span> <span class="o">=</span> <span class="n">echo_s1</span> <span class="o">*</span> <span class="n">ops</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="n">temp1</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">ta_axis</span><span class="p">)</span>
|
||
<span class="n">echo_s2</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fft</span><span class="p">(</span><span class="n">echo_s1</span><span class="p">)</span>
|
||
<span class="n">G</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">G</span> <span class="o">*</span> <span class="n">temp2</span>
|
||
<span class="n">G</span> <span class="o">=</span> <span class="n">ops</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="n">G</span><span class="p">)</span>
|
||
<span class="n">echo_s2</span> <span class="o">=</span> <span class="n">ops</span><span class="o">.</span><span class="n">multiply</span><span class="p">(</span><span class="n">echo_s2</span><span class="p">,</span> <span class="n">G</span><span class="p">)</span>
|
||
<span class="n">echo_d3_mf</span> <span class="o">=</span> <span class="n">ops</span><span class="o">.</span><span class="n">exp</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sq_fa_axis</span> <span class="o">*</span> <span class="n">temp3</span><span class="p">)</span>
|
||
<span class="n">echo_s3</span> <span class="o">=</span> <span class="n">ops</span><span class="o">.</span><span class="n">multiply</span><span class="p">(</span><span class="n">echo_s2</span><span class="p">,</span> <span class="n">echo_d3_mf</span><span class="p">)</span>
|
||
<span class="n">echo_s3</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">ifft</span><span class="p">(</span><span class="n">echo_s3</span><span class="p">)</span>
|
||
<span class="n">echo_s4</span> <span class="o">=</span> <span class="n">ms</span><span class="o">.</span><span class="n">numpy</span><span class="o">.</span><span class="n">roll</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">abs</span><span class="p">(</span><span class="n">echo_s3</span><span class="p">),</span> <span class="n">shift</span><span class="o">=-</span><span class="mi">3328</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
|
||
<span class="n">echo_s4</span> <span class="o">=</span> <span class="n">ops</span><span class="o">.</span><span class="n">flip</span><span class="p">(</span><span class="n">echo_s4</span><span class="p">,</span> <span class="n">dims</span><span class="o">=</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
||
<span class="n">saturation_tensor</span> <span class="o">=</span> <span class="n">ops</span><span class="o">.</span><span class="n">full</span><span class="p">(</span><span class="n">echo_s4</span><span class="o">.</span><span class="n">shape</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">saturation</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">ms</span><span class="o">.</span><span class="n">float32</span><span class="p">)</span>
|
||
<span class="n">echo_s5</span> <span class="o">=</span> <span class="n">ops</span><span class="o">.</span><span class="n">where</span><span class="p">(</span><span class="n">echo_s4</span> <span class="o">></span> <span class="bp">self</span><span class="o">.</span><span class="n">saturation</span><span class="p">,</span> <span class="n">saturation_tensor</span><span class="p">,</span> <span class="n">echo_s4</span><span class="p">)</span>
|
||
<span class="k">return</span> <span class="n">echo_s5</span>
|
||
|
||
|
||
<span class="c1"># step 0 : 准备初始数据</span>
|
||
<span class="n">echo1</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">sio</span><span class="o">.</span><span class="n">loadmat</span><span class="p">(</span><span class="s2">"CDdata1.mat"</span><span class="p">)[</span><span class="s2">"data"</span><span class="p">])</span>
|
||
<span class="n">echo2</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">sio</span><span class="o">.</span><span class="n">loadmat</span><span class="p">(</span><span class="s2">"CDdata2.mat"</span><span class="p">)[</span><span class="s2">"data"</span><span class="p">])</span>
|
||
<span class="n">echo</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">echo1</span><span class="p">,</span> <span class="n">echo2</span><span class="p">,</span> <span class="n">axis</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
|
||
|
||
<span class="c1"># 图像填充</span>
|
||
<span class="n">Na</span><span class="p">,</span> <span class="n">Nr</span> <span class="o">=</span> <span class="n">echo</span><span class="o">.</span><span class="n">shape</span>
|
||
<span class="n">echo</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">pad</span><span class="p">(</span><span class="n">echo</span><span class="p">,</span> <span class="p">((</span><span class="nb">round</span><span class="p">(</span><span class="n">Na</span> <span class="o">/</span> <span class="mi">6</span><span class="p">),</span> <span class="nb">round</span><span class="p">(</span><span class="n">Na</span> <span class="o">/</span> <span class="mi">6</span><span class="p">)),</span> <span class="p">(</span><span class="nb">round</span><span class="p">(</span><span class="n">Nr</span> <span class="o">/</span> <span class="mi">3</span><span class="p">),</span> <span class="nb">round</span><span class="p">(</span><span class="n">Nr</span> <span class="o">/</span> <span class="mi">3</span><span class="p">))))</span>
|
||
<span class="n">new_shape</span> <span class="o">=</span> <span class="p">(</span><span class="mi">4096</span><span class="p">,</span> <span class="mi">4096</span><span class="p">)</span>
|
||
<span class="n">echo</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">pad</span><span class="p">(</span>
|
||
<span class="n">echo</span><span class="p">,</span>
|
||
<span class="p">((</span><span class="mi">0</span><span class="p">,</span> <span class="n">new_shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">echo</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">new_shape</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">-</span> <span class="n">echo</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">1</span><span class="p">])),</span>
|
||
<span class="s2">"constant"</span><span class="p">,</span>
|
||
<span class="n">constant_values</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
|
||
<span class="p">)</span>
|
||
<span class="n">Na</span><span class="p">,</span> <span class="n">Nr</span> <span class="o">=</span> <span class="n">echo</span><span class="o">.</span><span class="n">shape</span>
|
||
<span class="n">echo</span> <span class="o">=</span> <span class="n">Tensor</span><span class="p">(</span><span class="n">echo</span><span class="p">)</span>
|
||
<span class="n">para</span> <span class="o">=</span> <span class="n">sio</span><span class="o">.</span><span class="n">loadmat</span><span class="p">(</span><span class="s2">"CD_run_params.mat"</span><span class="p">)</span>
|
||
<span class="n">Kr</span> <span class="o">=</span> <span class="o">-</span><span class="n">para</span><span class="p">[</span><span class="s2">"Kr"</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||
<span class="n">c</span> <span class="o">=</span> <span class="n">para</span><span class="p">[</span><span class="s2">"c"</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
||
<span class="n">Ka</span> <span class="o">=</span> <span class="mi">1733</span>
|
||
<span class="n">f_nc</span> <span class="o">=</span> <span class="o">-</span><span class="mi">6900</span>
|
||
|
||
<span class="n">temp</span> <span class="o">=</span> <span class="n">Tensor</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">pi</span> <span class="o">/</span> <span class="n">Kr</span> <span class="o">*</span> <span class="mi">1</span><span class="n">j</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">ms</span><span class="o">.</span><span class="n">complex64</span><span class="p">)</span>
|
||
<span class="n">temp1</span> <span class="o">=</span> <span class="n">Tensor</span><span class="p">(</span><span class="o">-</span><span class="mi">2</span><span class="n">j</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">pi</span> <span class="o">*</span> <span class="n">f_nc</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">ms</span><span class="o">.</span><span class="n">complex64</span><span class="p">)</span>
|
||
<span class="n">temp2</span> <span class="o">=</span> <span class="n">Tensor</span><span class="p">(</span><span class="mi">4</span><span class="n">j</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">pi</span> <span class="o">/</span> <span class="n">c</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">ms</span><span class="o">.</span><span class="n">complex64</span><span class="p">)</span>
|
||
<span class="n">temp3</span> <span class="o">=</span> <span class="n">Tensor</span><span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="n">j</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">pi</span> <span class="o">/</span> <span class="n">Ka</span><span class="p">,</span> <span class="n">dtype</span><span class="o">=</span><span class="n">ms</span><span class="o">.</span><span class="n">complex64</span><span class="p">)</span>
|
||
<span class="n">model</span> <span class="o">=</span> <span class="n">rdsar</span><span class="p">(</span><span class="n">echo</span><span class="o">.</span><span class="n">shape</span><span class="p">,</span> <span class="n">para</span><span class="p">,</span> <span class="n">Ka</span><span class="p">,</span> <span class="n">f_nc</span><span class="p">)</span>
|
||
<span class="n">ms</span><span class="o">.</span><span class="n">export</span><span class="p">(</span>
|
||
<span class="n">model</span><span class="p">,</span> <span class="n">echo</span><span class="p">,</span> <span class="n">temp</span><span class="p">,</span> <span class="n">temp1</span><span class="p">,</span> <span class="n">temp2</span><span class="p">,</span> <span class="n">temp3</span><span class="p">,</span> <span class="n">file_name</span><span class="o">=</span><span class="s2">"rdsarv3"</span><span class="p">,</span> <span class="n">file_format</span><span class="o">=</span><span class="s2">"MINDIR"</span>
|
||
<span class="p">)</span>
|
||
<span class="n">echo_s5</span> <span class="o">=</span> <span class="n">model</span><span class="p">(</span><span class="n">echo</span><span class="p">,</span> <span class="n">temp</span><span class="p">,</span> <span class="n">temp1</span><span class="p">,</span> <span class="n">temp2</span><span class="p">,</span> <span class="n">temp3</span><span class="p">)</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="n">echo_s5</span><span class="p">)</span>
|
||
<span class="c1"># 成像</span>
|
||
<span class="nb">print</span><span class="p">(</span><span class="s2">"show image"</span><span class="p">)</span>
|
||
<span class="n">plt</span><span class="o">.</span><span class="n">pcolor</span><span class="p">(</span><span class="n">echo_s5</span><span class="o">.</span><span class="n">numpy</span><span class="p">())</span>
|
||
<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
|
||
<span class="n">plt</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="s1">'v3.jpg'</span><span class="p">)</span>
|
||
</pre></div>
|
||
</div>
|
||
</section>
|
||
</section>
|
||
<section id="id6">
|
||
<h2>板卡部署<a class="headerlink" href="#id6" title="Link to this heading"></a></h2>
|
||
<p>模型部署建议使用 <code class="docutils literal notranslate"><span class="pre">YHFT-IDE</span></code>,它集成了模型转换、模型可视化与 MindSpore Lite 端部署模板。具体使用方法可参考 <a class="reference internal" href="../../quickstart/hellodsp.html#c"><span class="std std-ref">HelloDSP MindSpore Lite端</span></a>。</p>
|
||
<div class="admonition tip">
|
||
<p class="admonition-title">小技巧</p>
|
||
<p>源数据为 .mat 格式,C++ 侧无法直接读取。可使用第三方库 <a class="reference external" href="https://sourceforge.net/projects/matio/">MATIO</a> 读取,或先用 Python 转存为通用二进制/文本格式再在 C++ 侧读取。</p>
|
||
</div>
|
||
</section>
|
||
<section id="id7">
|
||
<h2>参考与源码<a class="headerlink" href="#id7" title="Link to this heading"></a></h2>
|
||
<ul class="simple">
|
||
<li><p>基于RD、CS和ωk算法的合成孔径雷达成像算法原理与实现:<a class="reference external" href="https://github.com/highskyno1/SAR_imaging_with_RD_CS_wk">SAR_imaging_with_RD_CS_wk</a></p></li>
|
||
<li><p>Python 示例:<a class="reference external" href="https://gitee.com/nudt-674/mind-radar/tree/master/examples/rdsar">RDSAR</a></p></li>
|
||
<li><p>Lite 端工程:<a class="reference external" href="https://gitee.com/nudt-674/mindspore/tree/develop/mindspore/lite/examples/rdsar">RDSAR</a></p></li>
|
||
</ul>
|
||
</section>
|
||
</section>
|
||
|
||
|
||
</div>
|
||
</div>
|
||
<footer><div class="rst-footer-buttons" role="navigation" aria-label="页脚">
|
||
<a href="index.html" class="btn btn-neutral float-left" title="DSP应用示例" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> 上一页</a>
|
||
<a href="../autocodegen/index.html" class="btn btn-neutral float-right" title="AI辅助开发示例" accesskey="n" rel="next">下一页 <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
|
||
</div>
|
||
|
||
<hr/>
|
||
|
||
<div role="contentinfo">
|
||
<p>© 版权所有 2025 - 2025, NUDT-674。</p>
|
||
</div>
|
||
|
||
利用 <a href="https://www.sphinx-doc.org/">Sphinx</a> 构建,使用的
|
||
<a href="https://github.com/readthedocs/sphinx_rtd_theme">主题</a>
|
||
由 <a href="https://readthedocs.org">Read the Docs</a> 开发.
|
||
|
||
|
||
</footer>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
</div>
|
||
<script>
|
||
jQuery(function () {
|
||
SphinxRtdTheme.Navigation.enable(true);
|
||
});
|
||
</script>
|
||
|
||
</body>
|
||
</html> |