时域与频域波束形成:原理、对比与工程实现 1. 波束形成的本质它到底在解决什么问题做阵列信号处理的人几乎没有人能绕开波束形成这个话题。刚接触这个概念时很多初学者容易把它想得很玄乎觉得是一堆复杂的数学公式堆出来的高深算法。但如果你抛开公式从物理直觉去理解波束形成的核心其实只有一句话让阵列对某个方向的来波更敏感同时抑制其他方向的干扰和噪声。为什么需要这个东西举个生活中的例子。几个人围坐在一张桌子旁开会你想起身发言但周围环境嘈杂有人咳嗽、有人翻纸、空调嗡嗡响。你自然会把耳朵转向你想听的人那个方向甚至用手拢在耳廓后面尽可能多地接收来自那个方向的声音同时减少从背后和两侧传来的噪声。人的双耳和大脑其实就在做一次“波束形成”通过调整对不同方向声音的敏感度把关注的信号捞出来。阵列天线或者麦克风阵列做的事情本质上和这个一模一样。只不过我们不再靠转动耳朵来改变指向性而是靠调整阵列中每个阵元接收信号的“时间补偿”或“相位补偿”让某一方向来的信号在各阵元上同相叠加、能量增强而其他方向的信号因为相位不一致被削弱。这个过程就是常规波束形成Conventional Beamforming有时也叫延迟求和波束形成Delay-and-Sum Beamforming。常规波束形成之所以被称为“常规”是因为它是所有波束形成算法里最基础、最稳健、最容易实现的一类。它不需要对信号做任何统计特性假设也不需要提前估计信源的个数和方向只要你知道阵列的几何结构就能直接计算指向任意方向的加权矢量。后面那些自适应波束形成、MUSIC、ESPRIT超分辨算法几乎都是在常规波束形成这个骨架上不断“加料”组合出来的。所以可以说弄懂常规波束形成等于拿到了整个阵列信号处理领域的入场券这也是为什么几乎所有教材都会把这一章放在最前面。常规波束形成在工程中的应用极其广泛。雷达里用它做天线扫描声呐里用它探测水下目标语音处理里用它增强说话人声音、抑制背景噪声5G和WiFi的Massive MIMO系统里也用它做初级的到达角估计。不同领域里叫法略有不同但底层原理完全一致对阵元信号做延时或相位补偿求和输出。这篇文章我会从时域波束形成和频域波束形成这两条实现路径入手把它们各自的原理、步骤、适用场景、计算量差异和工程中容易踩的坑都讲清楚。目标读者是想系统学习阵列处理的学生、刚入门麦克风阵列或雷达信号处理的工程师以及任何想要快速理解波束形成到底怎么落地的朋友。2. 时域波束形成最直观的物理实现2.1 核心原理时间差补偿与累加时域波束形成的思路非常朴素既然信号是声波或电磁波它在空间中的传播就需要时间那么到达阵列中不同阵元的时刻一定不一样。假设有一个远场平面波从某个方向入射到一个均匀线阵上由于阵元在空间中的位置不同波前到达每个阵元的先后顺序是不同的。你可以把这个过程想象成下雨时雨滴落在人行道上的场景。一阵风带着雨斜着吹过来一排排列整齐的地砖中总有一块先湿、相邻的一块后湿这个时间差完全取决于风吹来的角度。反过来如果我们记录下每块地砖“变湿”的时刻就能反推出风的方向。这就是时域波束形成做的事情。具体实现方式也很直接对每个阵元的接收信号按照目标方向的“传播延迟”做时间平移把从目标方向来的信号在时间轴上对齐然后全部相加。这样一来从目标方向来的信号因为已经对齐了叠加后幅度会增大而来自其他方向的信号因为每个阵元补偿的延迟并不匹配它们真实的到达时间相加后会出现错位和抵消幅度被压低。最终输出的波束就在目标方向形成了一个“主瓣”这就是指向性。2.2 延迟量的计算几何关系才是关键对于均匀线阵假设阵元间距为d入射角度为θ以阵列法线方向为0°那么相邻阵元之间的时间延迟为τ d·sin(θ) / c其中c是传播速度在空气中约为340m/s在电磁波中则是光速。等等这里需要注意符号的正负。如果θ定义在法线方向的右侧为正那么当波从右侧来的时候最右边的阵元会先接收到信号左边的阵元后接收到。因此为了对齐信号我们需要给左边的阵元“提前”补偿也就是要加上一个正的延迟。方向搞反了波束指向就会镜像翻折到错误的半空间这是个非常容易犯的低级错误。在实际工程中还有两个需要同时考虑的参数。一个是阵元间距d它决定了阵列在空间上的采样密度。如果d超过半个波长可能会出现栅瓣相当于在多个方向上同时形成了主瓣这对波束形成来说是致命的。另一个是采样率Fs它决定了时间延迟的量化精度。如果延迟量不是采样周期的整数倍就需要用插值滤波器来实现分数延迟这会显著增加计算量。2.3 实现细节与工程注意点时域波束形成的最大优点是原理清晰、实现简单而且在宽带信号场景下天然适用。因为它在时间域直接操作做的是真延迟不同频率成分的信号都能得到一致的时延补偿不需要额外处理。但这里有一个很坑的点如果直接用整数采样点延迟角度分辨力会受限。举一个实际的例子一个阵元间距为5cm的8元麦克风阵列采样率16kHz声速取343m/s则相邻阵元的实际延迟量大约是d/c≈145微秒换算成采样点大约是145us×16kHz≈2.33个采样点。你不可能“延迟2.33个点”只能要么延迟2个点要么延迟3个点。这种量化误差在高频段例如4kHz以上的成分会导致比较明显的相位偏差和波束畸变。所以工程上常用的做法是先做整数倍延迟粗补偿再用FIR插值滤波器做分数延迟精细补偿。FIR插值的本质是在目标延迟点附近重新采样利用信号的时间连续性来估计非整数时刻的值。这种做法的计算量大概是普通整数延迟的几倍到十几倍但效果提升是实实在在的。在实际项目中如果对指向精度要求高这部分运算省不了。另一个容易被忽略的细节是静态波束形成和动态波束扫描之间的切换。如果只需要固定指向一个方向那计算一次延迟系数、固定一套滤波器参数就够了。但是如果需要实时扫描不同方向比如机械旋转雷达的电子扫描替代方案那就要随时更新每个阵元的延迟量并且要考虑更新过程中滤波器系数切换产生的瞬态跳变否则输出信号里会听到明显的“咔哒”声或看到频谱杂散。2.4 什么时候选时域方案从工程选型的角度我个人的判断标准有两条。第一信号是不是宽带信号。语音信号当然算宽带从几百赫兹到几千赫兹都有能量地震勘探信号也是典型的宽带信号。在这种情况下时域方案天然优势明显因为不同频率得到一致的延迟补偿。第二阵元数量是不是比较少。如果阵元数量少需要同步处理的通道数不多时域方案的硬件资源占用其实可以接受。相反如果阵列动辄几十上百个阵元每个阵元后面还要挂一套高阶插值滤波器那FPGA或者嵌入式设备里的资源就很吃紧了。3. 频域波束形成换个坐标系解决问题3.1 核心原理相位补偿替代时间延迟频域波束形成的切入点完全不同。我们知道对一个信号做傅里叶变换后时域里的“延迟”对应到频域里就是“相位旋转”。延迟τ的傅里叶变换性质是X(f)·e^(-j2πfτ)。也就是说在频域里做波束形成不再需要去对齐时间轴只需要在每个频率点上给每个阵元的频谱乘上一个相位因子e^(-j2πfτ)然后求和就行。这个思路就像你在不同位置拍了几张照片想要对齐其中某个景物的位置。时域方案是直接把照片在桌面上移动到对齐频域方案是先把照片变成“频率成分的列表”然后通过调整每个成分的相位来达到同样的对齐效果。殊途同归但操作方式完全不同。频域波束形成的优势在于第一相位补偿乘法远比时间插值滤波高效尤其对窄带信号来说一个频率点只需要一次复数乘法第二它天然按频点独立处理可以很方便地为不同频率采用不同的加权系数实现频控波束或者频率相关的波束图第三配合FFT算法整体计算效率非常高特别适合需要同时处理大量频点的宽带信号场景。3.2 分帧处理流程从连续流到频域快照工程上频域波束形成很少对整段长信号直接做FFT因为那样既不实时也没有必要。标准的做法是分帧处理流程如下第一步对每个阵元的时域信号按帧切分。帧长通常取2的幂次比如256、512或1024点同时设置一定的帧重叠率比如50%避免帧边缘处因窗函数造成的信息损失。第二步对每一帧数据加窗然后做FFT。加窗是为了抑制频谱泄露常用的窗有汉宁窗、海明窗、布莱克曼窗。加窗会带来信号的幅度损失一般需要做幅度校正否则波束输出的幅度会比真实信号偏低。第三步对每个频点计算导向矢量。导向矢量的本质就是“如果不做波束形成这个方向来的信号在各个阵元上天然存在的相位差异”。对于均匀线阵第m个阵元对频率f和方向θ的导向矢量元素是a_m(f, θ) e^(-j2πf·m·d·sin(θ)/c)第四步将每个阵元的频域数据乘以导向矢量共轭补偿相位然后沿阵元轴求和得到该频点的波束输出。最后对所有频点做逆傅里叶变换IFFT得到该帧的时间波形再通过帧叠加重建恢复出连续的时域输出信号。3.3 频率与角度的耦合一个容易忽视的问题频域处理有一个非常重要的细节同一套导向矢量在不同的频率上并不通用。因为相位补偿因子里含有频率f所以如果你在对宽带信号做处理时只用了中心频率的导向矢量去补偿所有频点那高频率和低频率成分的波束指向就会偏离子期望方向。频率离中心频率越远指向偏差就越大严重时整个波束会被拉宽甚至出现畸变。这就是为什么在做宽带频域波束形成时需要在每个频点单独计算导向矢量。实际操作中这并不是个负担因为这些导向矢量可以提前算好存起来运行时只需要查表取用。真正需要注意的是如果你用的是预先计算的导向矢量表必须确保表中的频率网格覆盖你实际处理的所有频点而且频率分辨率要和FFT的bin宽度匹配。否则查表时的频率索引偏了哪怕一个bin在高频端也足以引起可观的相位误差。3.4 FFT点数与窗函数的选择经验帧长FFT点数的选取直接影响频域分辨率和时间分辨率。帧越长频率分辨率越高但时间分辨率越低瞬态响应变差输出的延迟也更大。麦克风阵列语音增强场景中帧长512点16kHz采样率时对应32ms重叠50%是一个常用的折中方案。如果用于雷达窄带信号的处理由于信号本身是窄带的FFT点数更多取决于频率分辨率和目标多普勒分辨的需求通常会和脉冲宽度、脉内调制方式一起综合考虑。窗函数的选择上我踩过几次坑。汉宁窗的频率主瓣宽度较宽但旁瓣抑制好适合语音这种频谱成分丰富的信号矩形窗的频率分辨率最高但旁瓣较大如果信号里有强干扰分量泄漏会严重影响波束输出质量。一个比较实在的建议是不要在前期纠结太久无脑用汉宁窗做宽带语音处理用矩形窗或切比雪夫窗做窄带雷达处理基本不会出大错。真正需要精细调窗函数的阶段是已经确认算法链路基本正确之后再做优化。4. 两种方案的正面对比与选型策略4.1 计算复杂度与实时性差异从计算量角度看时域和频域各有胜负。对单频点来说频域方案只需要一次复数乘法加一次累加时域方案如果延迟是整数倍采样点的话也只需要一次延时和累加两者差别不大。但如果时域方案需要分数延迟插值那每个阵元、每个输出采样点都要多一次完整的多阶FIR滤波计算量会瞬间涨上去。频域方案的优势在大规模阵列和宽带同时出现时更加明显。假设有M个阵元FFT点数为N频域波束形成每个帧需要的复数乘法次数大约在M×N量级而时域插值滤波方案需要M×N×LL是插值滤波器长度量级。当L达到16、32阶时差距就非常显著了。这也是为什么现代大阵列接收系统几乎清一色采用频域处理框架。另外频域方案还有一个天然优势它可以把所有频点的处理并行化。在FPGA实现中不同频点的波束形成是相互独立的可以拆成多个并行流水线同时计算在GPU实现中可以按频点分配线程块直接拉满并行度。这一点是时域方案很难做到的。4.2 性能对比宽窄带适用性与稳健性如果一句话总结适用性那就是宽带无脑选频域窄带两种都行但对稳健性要求极高时选时域。宽带信号选频域的原因前面已经提到了每个频点独立补偿导向矢量频率自适应性能最优。时域方案虽然也能做宽带但分数延迟插值器的设计本身就是一个技术活而且不同频率下的相位一致性很难做到理想。窄带信号则看具体场景。雷达信号通常是窄带的此时频域方案只需要对一个频点做补偿计算量极小实现也最简单。但窄带场景中如果存在很强的同频干扰频域方法因为要经过FFT、加权、IFFT这一整套流程任何一个环节的处理误差比如FFT字长有限导致的数值噪声都可能被干扰信号放大。时域方案结构简单链路短数值稳健性相对更好。4.3 表格总结一张表看懂怎么选对比维度时域波束形成频域波束形成核心操作时间延迟补偿 叠加相位补偿 频域求和宽带信号支持需要高阶插值滤波器天然支持逐频点补偿窄带信号支持简单整数延迟即可单频点补偿效率极高计算效率分数延迟时资源消耗大FFT框架下效率高易并行实时性单延时芯片可实现微秒级延迟受帧长限制出现帧级延迟稳健性结构简单数值稳定受FFT长度、窗函数影响较大典型应用语音增强、声呐宽带信号雷达、5G Massive MIMO、声呐工程复杂度插值器设计较繁琐帧同步和重叠重建较繁琐这个表格算是我的经验总结但选型时还是要回到自己的具体约束条件。硬件平台资源紧张、信号宽带、实时性要求高的场景优先考虑频域如果信号带宽不大、系统简单、通道数量少时域方案的低复杂度和高稳健性反而更省心。5. 实操过程从零搭建一套频域波束形成仿真5.1 仿真场景设定与参数计算纸上谈兵没意思直接来一个能跑的仿真实例。假设我们要设计一个8元均匀线阵麦克风阵列接收一个来自30°方向的宽带语音信号同时存在一个来自-40°方向的强干扰噪声源目标是增强目标语音、抑制干扰。参数设定如下阵元间距d5cm声速c340m/s采样率Fs16kHz。先算一下半波长约束最高工作频率对应的半波长是c/(2×d)340/(2×0.05)3400Hz。也就是说在这个阵元间距下超过3.4kHz的频率成分在波束形成时会出现空间混叠风险。所以仿真中我们只关注3.4kHz以下的频段或者前端的输入信号先做一个低通滤波。这个约束条件在真实系统里必须在设计阶段就考虑否则高频段的波束图会完全失控。目标方向的相邻阵元延迟为d·sin(30°)/c0.05×0.5/340≈73.5微秒对应16kHz采样率下约1.18个采样点。由于不是整数采样点延迟频域方案的优势就体现出来了在频域里可以直接通过e^(-j2πf×73.5us)精确补偿完全不存在插值误差。5.2 Python代码实现与关键步骤说明下面给出一份完整的Python仿真代码使用numpy实现。import numpy as np from scipy.signal import fftconvolve import soundfile as sf # 基本参数 Fs 16000 # 采样率 c 340.0 # 声速 M 8 # 阵元数 d 0.05 # 阵元间距 theta_target 30.0 # 目标方向度 theta_interf -40.0 # 干扰方向度 N 512 # FFT帧长 overlap 0.5 # 重叠率 # 生成模拟信号3秒的随机宽带信号 干扰 t_total 3.0 n_total int(Fs * t_total) target_sig np.random.randn(n_total) interf_sig np.random.randn(n_total) * 0.5 # 干扰强度为目标的-6dB # 计算各阵元的实际时延以第一个阵元为参考 tau_target -d * np.arange(M) * np.sin(np.deg2rad(theta_target)) / c tau_interf -d * np.arange(M) * np.sin(np.deg2rad(theta_interf)) / c # 通过FFT域精确时延生成阵列接收信号 def delay_signal(x, tau, Fs, N): # 频域加相位实现任意小数延迟 n_pad len(x) N X np.fft.rfft(x, n_pad) freqs np.fft.rfftfreq(n_pad, 1.0/Fs) X_delay X * np.exp(-1j * 2 * np.pi * freqs * tau) return np.fft.irfft(X_delay, n_pad)[:len(x)] X_array np.zeros((M, n_total)) for m in range(M): X_array[m] delay_signal(target_sig, tau_target[m], Fs, N) X_array[m] delay_signal(interf_sig, tau_interf[m], Fs, N) # 频域波束形成 def freq_domain_beamforming(X, Fs, M, d, c, theta_scan, N512, overlap0.5): n_total X.shape[1] hop int(N * (1 - overlap)) n_frames (n_total - N) // hop 1 window np.hanning(N) # 幅度校正系数汉宁窗的相干增益 win_gain np.sum(window) / N freqs np.fft.rfftfreq(N, 1.0/Fs) output np.zeros(n_total) weight_sum np.zeros(n_total) for k in range(n_frames): start k * hop end start N # 分帧、加窗、FFT segments X[:, start:end] * window spec np.fft.rfft(segments, axis1) # 计算当前方向的导向矢量 steering np.exp(-1j * 2 * np.pi * freqs[:, None] * (d * np.arange(M) * np.sin(np.deg2rad(theta_scan)) / c)[None, :]) # 相位补偿求和 beam_spec np.sum(spec * np.conj(steering), axis1) / M # IFFT回到时域 frame_out np.fft.irfft(beam_spec, N) frame_out frame_out * window / win_gain # 重叠叠加 output[start:end] frame_out weight_sum[start:end] window / win_gain # 归一化权重 nonzero weight_sum 1e-6 output[nonzero] / weight_sum[nonzero] return output # 扫描多个方向观察输出能量 def scan_energy(X, Fs, M, d, c, angles): energies [] for ang in angles: out freq_domain_beamforming(X, Fs, M, d, c, ang) energies.append(np.sqrt(np.mean(out**2))) return np.array(energies) angles np.arange(-90, 91, 5) energy scan_energy(X_array, Fs, M, d, c, angles) print(波束扫描能量分布) for ang, e in zip(angles, energy): bar * * int(e / energy.max() * 40) print(f{ang:3d}° | {e:.4f} | {bar})运行这段代码后你会看到30°附近的输出能量最大而-40°附近被明显抑制。这就是波束形成的效果方向性增益自然浮现出来了。5.3 关键步骤中的细节经验第一频域精确延迟生成信号时需要在FFT前给信号末尾补零否则时延操作会造成信号尾部截断。补零的量取决于最大期望延迟对应的采样点数。在我这个仿真里最大延迟约4个采样点补N_fft长度完全够。第二分帧重叠叠加OLA时窗函数的归一化必须前后一致。我用的方法是在重建阶段把窗函数的影响除以窗增益同时在累加时维护一个权重累加器最后做归一化。如果不做这一步最终输出信号会带着明显的幅度调制噪声在听感上像“波浪声”。第三导向矢量计算时注意频率轴是用fftfreq还是rfftfreq。rfft输出是单边频谱频率轴长度是N//21如果误用了完整的fftfreq长度对不上代码直接报错但就算长度对上了索引错位也会让波束指向完全错误。这个问题排查起来极其隐蔽我建议你把freqs打印出来对一遍再往下走。6. 常见问题与排查技巧实录6.1 波束输出能量极低或趋近于零这个现象我见过无数次每次原因都不同按照出现频率排序通常有以下几个。第一导向矢量共轭方向搞反了。补偿的目的是消除传播延迟所以应该乘上e^(j2πfτ)但很多人写成了e^(-j2πfτ)导致补偿方向变成了再次增加延迟本应叠加同相的信号反而反相对消。第二阵元数据的排列顺序和导向矢量计算时的阵元顺序不一致。我做过一个项目因为采集卡的通道接线顺序和设计文档不完全一致导致方向图翻转了180度排查了好几天。第三频率轴长度不对导致导向矢量在部分频点索引越界或者错位。排查这类问题有一个很高效的技巧先把波束指向设置成端射方向的0度然后手动检查第1个阵元和第M个阵元的相位补偿值是否正确。手动计算几个关键频点的数值对比一下代码的输出比盲猜快得多。6.2 高频段方向图畸变严重如果看到波束在低频段正常、高频段迅速恶化十有八九是阵元间距超过了半波长约束。回到仿真参数里3.4kHz是这个阵列的空间混叠边界超过这个频率之后波束会出现栅瓣。解决方法有两种一是压缩阵元间距代价是阵列孔径变小、分辨率下降二是限制工作带宽在采样处理链路里加一个低通滤波器。还有一种低频场景下常见的问题如果阵元间距远小于半波长波束主瓣会变得非常宽指向分辨能力严重下降。这是物理规律算法再强也救不回来。阵列孔径决定了波束宽度这是一个硬约束。6.3 时域方案中的分数延迟量化噪声时域波束形成中最常见的声音问题是“发闷”或者“发飘”。我用16kHz采样率、5cm间距的阵列做过测试如果不做分数延迟插值波束输出在3kHz以上的频率响应会出现明显的波动最高可以达到3~4dB的起伏。这是因为相邻阵元的整数延迟量化误差在高频端对应了更大的相位误差。解决方案是使用拉格朗日分数延迟滤波器一个长度8~16阶的拉格朗日插值器就能把量化误差压低到接近浮点精度。拉格朗日滤波器的好处是系数的解析表达式简单而且延迟值可以任意设定非常适合动态扫描方向的应用。6.4 实时系统里的FFT延迟与帧同步问题频域方案的固有缺陷是处理延迟较大。假设FFT帧长512点重叠率50%帧间步长256点那么最小处理延迟至少是256点约16ms。如果后续还有一个逆FFT和重叠相加总系统延迟会到30ms左右。对语音通信这种对延迟敏感的场景30ms刚好是ITU-T推荐的可接受上限附近所以必须谨慎。降低延迟的办法是缩小帧长但频率分辨率会变差低频段的波束性能会受损。工程上常用混合方案低频段用长帧获得频率分辨率高频段用短帧获得时间响应这两部分分别做频域波束形成再合并。实现复杂度高了不少但延迟和性能都能兼顾。6.5 常见问题速查表故障现象可能原因排查与解决波束输出几乎为零导向矢量共轭方向错误检查相位符号改为正号补偿方向图左右翻转阵元顺序与导向矢量不一致核对通道映射统一阵列参考方向高频段出现多峰阵元间距超过半波长减小d或限制带宽输出信号发闷、发平时域延迟量化误差增加分数延迟插值滤波器输出有周期性起伏帧重叠叠加未归一化增加窗增益校正和权重归一化波束指向偏差大导向矢量频率表与实际FFT不匹配核对频率轴定义统一freqs数组延迟大实时性差FFT帧长过长缩短帧长或采用频带分割处理7. 从常规波束形成还能走向哪里做完了基础仿真你不妨再往前走一步。常规波束形成的加权系数是固定的跟接收数据的统计特性无关。这既是优势稳健、不需要信号信息也是劣势它无法自适应地抑制强干扰。如果你在阵列上收到一个比目标强40dB的干扰信号即便不在波束主瓣方向常规波束形成的旁瓣泄露也会让干扰淹没目标。这时候就该考虑自适应波束形成了。核心思路是在保证目标方向增益不变的前提下用接收数据的协方差矩阵去估计干扰方向然后自动在干扰方向形成零陷。最经典的方法是线性约束最小方差Linear Constrained Minimum Variance, LCMV和最小方差无失真响应Minimum Variance Distortionless Response, MVDR。它们的原理并不复杂本质上就是一个带约束的优化问题但在实际应用中要注意协方差矩阵的估计误差和求逆的数值稳定性问题这些问题展开讲又是一大篇了。另外如果你需要对多个目标同时波束形成可以生成多个指向不同方向的波束这就是多波束形成。相控阵雷达里几百个阵元同时形成几十个波束同时覆盖多个方向靠的就是这个思路。多波束形成在频域实现非常自然每个频点、每个方向各做一次加权求和相当于一个大矩阵乘法非常适合GPU并行加速。如果你用的是麦克风阵列做语音增强那频域波束形成的输出通常还会接一个后置维纳滤波器进一步去除残余噪声。这套“频域波束形成后置滤波”的架构就是很多助听器、智能音箱和会议系统中语音前端方案的基本盘。我在实际项目里体会最深的一点是常规波束形成的代码写出来不难但要把它的物理意义彻底想透调试那些方向和频率对不上号的bug没有几次实战是不可能真正掌握的。建议你拿到代码之后亲手改参数跑几轮——改变入射角看能量最大值是否跟着变改变阵元间距看波束宽度变化增加阵元数量看方向图变窄——把这些实验做一遍你对波束形成的理解会上一个台阶。等你把常规方案吃透后面接触自适应波束形成、超分辨算法都会轻松很多。