【论文笔记之 BLMS】Block Implementation of Adaptive Digital Filters

news/2024/4/29 5:52:06/文章来源:https://blog.csdn.net/wjrenxinlei/article/details/127282024

本文对 GREGORY A. CLARK1981 年在 IEEE Transactions on Circuits and Systems 上发表的论文进行简单地翻译。如有表述不当之处欢迎批评指正。欢迎任何形式的转载,但请务必注明出处。

论文链接https://ieeexplore.ieee.org/abstract/document/1085018

目录

  • 1. 论文目的
  • 2. 摘要
  • 3. 介绍
  • 4. 块维纳滤波问题
  • 5. 块自适应滤波以及 BLMS 算法
  • 6. BLMS 算法的收敛特性
  • 7. BLMS 收敛特性示例
    • 7.1. 实验 A
    • 7.2. 实验 B
  • 8. LMS 以及 BLMS 自适应滤波的计算复杂度
    • 8.1. LMS 自适应滤波器的计算复杂度
    • 8.2. BLMS 自适应滤波器的计算复杂度
    • 8.3. 基于 FFT 实现的 BLMS 自适应滤波器
    • 8.4. 基于多维卷积技术实现的 BLMS 自适应滤波器
    • 8.5. 复杂度分析
  • 9. 结论
  • 10. 附录 A: 基于 FFT 的卷积的计算复杂度
  • 11. 后记

1. 论文目的

实现逐块更新的自适应数字滤波器。

2. 摘要

块数字滤波是指一次性输入给滤波器一整块数据,然后一次性得到一整块或有限数量的输出。本文提出了一种块自适应滤波方法,在每得到一整块的输出数据后,该方法才根据广义最小均方(LMS)算法更新一次滤波器系数。通过分析收敛特性和计算复杂度,可以看出块自适应滤波器可以是广泛所使用的 LMS 自适应滤波器的快速实现,而且其性能与后者相同。

3. 介绍

Burrus, Mitra 以及其他学者已经对块数字滤波进行了广泛地讨论。该技术一次性输入一整块数据,并输出一整块数据。数字滤波器的块实现允许高效使用并行处理器,这可以加快计算速度。此外,在串行处理器上实现滤波器的时候,也可以使用高效的块算法,比如快速傅立叶变换(FFT) 。低功耗大规模集成电路以及并行处理架构的持续发展使得块滤波变得越来越有吸引力。

本文对之前讨论过的块处理技术进行了修改和扩展,以用于非递归的最小均方(LMS)自适应滤波器。首先,定义了一个块均方误差(BMSE)性能准则,并由此推导出了 BMSE 梯度估计,该估计是误差信号和输入信号的相关(over a block of data)。然后,通过该梯度估计可以得到一个权重调整算法,该算法允许在并行处理器上或在串行处理器上结合 FFT 以块形式来实现。最后,对块实现所带来的计算复杂度的降低进行了分析,结果表明,降低的计算复杂度是非常可观的。

此处讨论的自适应数字滤波是由 Widrow 等人提出的 LMS 类型的滤波技术,其性能指标为均方误差(MSE =ξ=\xi=ξ)。假定输入均为实数。Widrow 的自适应滤波器是阶数为 N−1N-1N1 的有限冲击响应(FIR)数字滤波器,在离散时刻 kkk 时,其输出 yky_{k}yk 由输入 xkx_{k}xk 和滤波器权重 wlkw_{lk}wlk 的卷积和给出:
yk=∑l=1Nwlkxk−l+1,k=1,2,3,⋯.(1)y_{k} = \sum_{l=1}^{N} w_{lk} x_{k-l+1}, \quad k=1,2,3, \cdots. \tag{1} yk=l=1Nwlkxkl+1,k=1,2,3,.(1)

Widrow-Hoff LMS 算法根据 (2)(2)(2) 调整滤波器的权重:
Wk+1=Wk+2μϵkXk(2)\bm W_{k+1} = \bm W_{k} + 2 \mu \epsilon_{k} \bm X_{k} \tag{2} Wk+1=Wk+2μϵkXk(2)

其中 μ\muμ 是收敛常量,Wk\bm W_{k}WkXk\bm X_{k}Xk 分别是 N×1N \times 1N×1 维的权重向量和 N×1N \times 1N×1 维的输入向量:

KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ \bm W_{k} &\tr…

ϵk\epsilon_{k}ϵkkkk 时刻的误差信号,由期望输出 dkd_{k}dk 减去真实输出 yky_{k}yk 得到:
ϵk≜dk−yk.(3)\epsilon_{k} \triangleq d_{k} - y_{k}. \tag{3} ϵkdkyk.(3)

本文研究了通过对数据进行分块处理来实现自适应滤波器,以期降低计算复杂度。为了使用高效的块处理,自适应算法必须在不改变滤波器参数的情况下计算输出一整块数据。因此,块自适应滤波器应该逐数据块调整权重。可以看到,传统的逐采样点调整权重的 LMS 自适应滤波器是块自适应滤波器块长为 111 时的特殊情况。

对于时不变的情况,(1)(1)(1) 可被写为以下矩阵形式:
yk=WTXk=XkTW.(4)y_{k} = \bm W^{T} \bm X_{k} = \bm X_{k}^{T} \bm W. \tag{4} yk=WTXk=XkTW.(4)

LLL 表示块长,以下低阶(L=3,N=3L=3, N=3L=3,N=3)的例子展示了卷积是如何被写为更方便的块形式的:
式

(5)(5)(5) 中,将滤波器权重(而不是输入)表示为向量的形式。这与之前所提出的标准块处理公式相反,但却使得块分析变得方便,这是因为它允许对权重进行简单的微分。

通过使用上面的块符号,对于通常 (L,N)(L, N)(L,N) 的情况来说,(2)(2)(2) 可以被改写为:
Yj=χjW(6)\bm Y_{j} = \chi_{j} \bm W \tag{6} Yj=χjW(6)

其中 jjj 为块索引,Yj\bm Y_{j}Yjχj\chi_{j}χj 分别是第 jjj 个长为 LLL 的输出向量,以及由输入向量组成的 L×NL \times NL×N 维矩阵:
KaTeX parse error: No such environment: align* at position 8: \begin{̲a̲l̲i̲g̲n̲*̲}̲ \bm Y_{j} &\tr…

可以使用并行处理器或在串行处理器上结合 FFT 来实现线性卷积。
图1

4. 块维纳滤波问题

经典的维纳滤波器可以被扩展到如下所示的块输入情况,可参考图1。假设所有的输入是平稳的,令
dj≜[d(j−1)L+1d(j−1)L+2⋯djL]T(7)\bm d_{j} \triangleq [d_{(j-1)L+1} \quad d_{(j-1)L+2} \cdots d_{jL}]^{T} \tag{7} dj[d(j1)L+1d(j1)L+2djL]T(7)

为第 jjj 个块所对应的 L×1L \times 1L×1 维的期望响应向量,再令
ϵj≜[ϵ(j−1)L+1ϵ(j−1)L+2⋯ϵjL]T(8)\bm \epsilon_{j} \triangleq [\epsilon_{(j-1)L+1} \quad \epsilon_{(j-1)L+2} \cdots \epsilon_{jL}]^{T} \tag{8} ϵj[ϵ(j1)L+1ϵ(j1)L+2ϵjL]T(8)

为第 jjj 个块所对应的 L×1L \times 1L×1 维的误差向量,ϵk\epsilon_{k}ϵk 定义在 (3)(3)(3) 中。性能指标是分析该问题的关键要素,此处使用标准 MSE 以及最小二乘问题中所使用的 sum square error 的组合。BMSE 定义为:
BMSE=Ξ≜1LE[ϵjTϵj]=E[1L∑k=(j−1)L+1jLϵk2].(9)\text{BMSE} = \Xi \triangleq \frac{1}{L} E[\bm \epsilon_{j}^{T}\bm \epsilon_{j}] = E[\frac{1}{L} \sum_{k=(j-1)L+1}^{jL} \epsilon_{k}^{2}]. \tag{9} BMSE=ΞL1E[ϵjTϵj]=E[L1k=(j1)L+1jLϵk2].(9)

很明显,BMSE is the expected value of a smoothed estimate of the squared error over one block. This is appropriate because it combines a block’s worth of error information into one number for each value of the block index jjj. MSE 每次只考虑一个点的误差信息。通过使用 (6)(6)(6)(8)(8)(8)(9)(9)(9) 可被改写为:
LΞ=E{djTdj}−E{djTχj}W−WTE{χjTdj}+WTE{χjTχj}WL \Xi = E\{\bm d_{j}^{T} \bm d_{j}\} - E\{\bm d_{j}^{T} \chi_{j}\} \bm W - \bm W^{T} E\{\chi_{j}^{T} \bm d_{j}\} + \bm W^{T} E\{\chi_{j}^{T} \chi_{j}\} \bm W LΞ=E{djTdj}E{djTχj}WWTE{χjTdj}+WTE{χjTχj}W

其中 dj\bm d_{j}dj 是第 jjj 个期望输出块。

现定义如下的相关矩阵:
R=E[XkXkT]P=E[Xkdk]R=E[χjTχj],P=E[χjTdj].(10 — 12)\begin{aligned} R &= E[\bm X_{k} \bm X_{k}^{T}] \\ P &= E[\bm X_{k} d_{k}] \\ \mathscr{R} &= E[\chi_{j}^{T} \chi_{j}], \quad \mathscr{P} = E[\chi_{j}^{T} \bm d_{j}]. \end{aligned} \tag{10 --- 12} RPR=E[XkXkT]=E[Xkdk]=E[χjTχj],P=E[χjTdj].(10  12)

RRRR\mathscr{R}R 分别是 N×NN \times NN×N 维的输入自相关以及块输入相关矩阵。同样地,PPP 是输入和期望响应之间 N×1N \times 1N×1 维的互相关向量,P\mathscr{P}P 是块输入和块期望响应之间 N×1N \times 1N×1 维的互相关向量。

使用上述定义,BMSE 可被改写为:
Ξ=1L[E{djTdj}−PTW−WTP+WTRW](13)\Xi = \frac{1}{L} [E\{\bm d_{j}^{T} \bm d_{j}\} - \mathscr{P}^{T} \bm W - \bm W^{T} \mathscr{P} + \bm W^{T} \mathscr{R} \bm W] \tag{13} Ξ=L1[E{djTdj}PTWWTP+WTRW](13)

使用 (6)(6)(6)(12)(12)(12),并利用平稳性,可以证明 R=LR\mathscr{R} = LRR=LR 以及 P=LP\mathscr{P} = LPP=LP。进一步,(13)(13)(13) 可被重写为:
Ξ=E[dk2]−2PTW−WTRW=ξ.(14)\Xi = E[d_{k}^{2}] - 2P^{T} \bm W - \bm W^{T} R \bm W = \xi. \tag{14} Ξ=E[dk2]2PTWWTRW=ξ.(14)

(笔者注:上式可能是原作笔误,正确公式应该是 Ξ=E[dk2]−2PTW+WTRW=ξ.\Xi = E[d_{k}^{2}] - 2P^{T} \bm W + \bm W^{T} R \bm W = \xi.Ξ=E[dk2]2PTW+WTRW=ξ.)因此,当输入是平稳的时候,BMSE 等于 MSE。那么块维纳滤波器的权重最优解集 W∗\bm W^{*}W 与维纳滤波器的相同,即:
W∗=R−1P.(15)\bm W^{*} = R^{-1} P. \tag{15} W=R1P.(15)

这可以用正交性原理的扩展来证明,该原理是指使 BMSE 最小化的权重向量 W∗\bm W^{*}W 是令误差向量 ϵj\bm \epsilon_{j}ϵj 和块数据 χj\chi_{j}χj 正交的向量。BMSE 的最小值(Ξmin\Xi_{min}Ξmin)由下式给出:
1LE[djTϵj]\frac{1}{L} E[\bm d_{j}^{T} \bm \epsilon_{j}] L1E[djTϵj]

且其等于 ξmin\xi_{min}ξmin。 显然,维纳滤波问题是块维纳问题的一种特殊情况(L=1L=1L=1)。

5. 块自适应滤波以及 BLMS 算法

类似于 LMS 自适应滤波,也可以推导出一种分块算法,其利用梯度搜索技术来实时顺序地求解维纳权重向量。因为在处理每个数据块的时候,希望权重值保持不变,因此,权重向量是逐块更新的,而不像 LMS 算法那样是逐点更新的。算法更新公式为:
Wj+1=Wj−μB∇Bj(16)\bm W_{j+1} = \bm W_{j} - \mu_{B} \nabla_{Bj} \tag{16} Wj+1=WjμBBj(16)

其中 μB\mu_{B}μB 是收敛常量,∇Bj\nabla_{Bj}Bjjjj 时刻 N×1N \times 1N×1 维的 BMSE 梯度,Wj\bm W_{j}Wjjjj 时刻 N×1N \times 1N×1 维的权重向量。
∇Bj≜1L∂E[ϵjTϵj]∂W∣W=Wj(17)\left. \nabla_{Bj} \triangleq \frac{1}{L} \frac{\partial E[\bm \epsilon_{j}^{T} \bm \epsilon_{j}]}{\partial \bm W} \right|_{\bm W = \bm W_{j}} \tag{17} BjL1WE[ϵjTϵj]W=Wj(17)

因为计算集总平均(ensemble average)是比较难得,因此使用梯度的估计 ∇^Bj\hat \nabla_{Bj}^Bj 来代替 ∇Bj\nabla_{Bj}Bjjjj 时刻 BMSE 梯度估计定义为:
∇^Bj≜1L∂ϵjTϵj∂Wj=−2LχjTϵj.(18)\hat \nabla_{Bj} \triangleq \frac{1}{L} \frac{\partial \bm \epsilon_{j}^{T} \bm \epsilon_{j}}{\partial \bm W_{j}} = - \frac{2}{L} \chi_{j}^{T} \bm \epsilon_{j}. \tag{18} ^BjL1WjϵjTϵj=L2χjTϵj.(18)

在权重调整算法 (16)(16)(16) 中使用这种无偏块梯度估计,得到块最小均方(BLMS)算法:
Wj+1=Wj+2μBLχjTϵj=Wj+2μBL∑k=(j−1)L+1jLϵkXk=Wj+2μBLΦj.(19)\begin{aligned} \bm W_{j+1} &= \bm W_{j} + \frac{2 \mu_{B}}{L} \chi_{j}^{T} \bm \epsilon_{j} \\ &= \bm W_{j} + \frac{2 \mu_{B}}{L} \sum_{k=(j-1)L+1}^{jL} \epsilon_{k} \bm X_{k} = \bm W_{j} + \frac{2 \mu_{B}}{L} \Phi_{j}. \end{aligned} \tag{19} Wj+1=Wj+L2μBχjTϵj=Wj+L2μBk=(j1)L+1jLϵkXk=Wj+L2μBΦj.(19)

当块长 L=1L=1L=1 时,BLMS 算法等于 LMS 算法。(19)(19)(19) 中的权重更新项是对由一块数据所生成的 LLL 个类 LMSϵkXk\epsilon_{k} \bm X_{k}ϵkXk 的平均。Consider Φj\Phi_{j}Φj written out for the iiith weight:
ϕij=∑k=(j−1)L+1jLϵkxk−i+1,i=1,2,⋯,N.\phi_{ij} = \sum_{k=(j-1)L+1}^{jL} \epsilon_{k} x_{k-i+1}, \quad i=1,2, \cdots, N. ϕij=k=(j1)L+1jLϵkxki+1,i=1,2,,N.

n=k−i+1n=k-i+1n=ki+1,上式变为:
ϕij=∑n=(j−1)L−i+2jL−i+1ϵn+i−1xn=e−i∗xi,fori=1,2,⋯,N\begin{aligned} \phi_{ij} &= \sum_{n=(j-1)L-i+2}^{jL-i+1} \epsilon_{n+i-1} x_{n} \\ &= e_{-i} * x_{i}, \quad \text{for} \; i=1,2, \cdots, N \end{aligned} ϕij=n=(j1)Li+2jLi+1ϵn+i1xn=eixi,fori=1,2,,N

其中 ∗* 表示卷积操作。很明显,权重更新项是相关操作,可以使用并行处理器或在串行处理器上结合 FFT 以块形式来实现(见图 1)。

从另一个角度来看,注意到 χjT\chi_{j}^{T}χjT is Toeplitz when square and can therefore be embedded in a circulant matrix. 卷积操作 χjWj\chi_{j} \bm W_{j}χjWj 和相关操作 χjTϵj\chi_{j}^{T} \bm \epsilon_{j}χjTϵj 就可以很容易地用 FFT 来实现。这很重要,因为这意味着对于 BLMS 自适应滤波来说,(6)(6)(6) 中的卷积和权重更新都能以块形式实现,而对于 LMS 自适应滤波,两者都不能以块形式实现。

块长度的选择是很重要的。(19)(19)(19) 表明对于任意大于或等于 111 的块长,该算法都是有效的。然而,在大多数应用中,L=NL = NL=N 的情况可能会是首选。这是因为对于 L>NL > NL>N 的情况,在 LLL 个输入样本上计算出来的梯度估计,比滤波器 W\bm WW 使用的输入信息更多,这导致了冗余操作。对于 L<NL < NL<N 的情况,滤波器长度大于正在处理的输入数据块长,这是对滤波器权重的 waste

6. BLMS 算法的收敛特性

自适应滤波过程中的 收敛特性主要包括:收敛常量(μ\muμμB\mu_{B}μB)的边界,自适应速度和自适应精度。 自适应速度是指 MSE 降低到最小 MSE(MMSE or ξmin\xi_{min}ξmin 估计值的速度。用于表示自适应算法求出的解与 ξmin\xi_{min}ξmin 接近程度的量(自适应精度)被称为失配,定义为 average excess MSE 除以 ξmin\xi_{min}ξmin。(The measure of how close the solution is to ξmin\xi_{min}ξmin (adaption accuracy)is called misadjustment and is defined as average excess MSE divided by ξmin\xi_{min}ξmin.)图2 以图形的方式展示了块形式下的自适应速度和 excess MSE。本节对块自适应滤波器的上述收敛特性进行了分析,并与传统 LMS 自适应滤波器的收敛特性进行了比较。
图2

6.1. 保证算法收敛的 μB\mu_{B}μB 的边界

首先,必须证明 BLMS 算法是收敛的,已有文献给出了证明过程。文献所采用的方法是证明随着数据块编号 jjj 接近无穷大,权重向量的期望值(E[Wj+1]E[\bm W_{j+1}]E[Wj+1])接近维纳权重向量,前提条件是假设 χj\chi_{j}χjdj\bm d_{j}dj 是各态历经的(ergodic),以及 E[χjTχj+l]≈0forl≠0E[\chi_{j}^{T} \chi_{j+l}] \approx 0 \; \text{for} \; l \neq 0E[χjTχj+l]0forl=0。该证明还表明对收敛常量的要求是相同的(μ\muμ 用于 LMSμB\mu_{B}μB 用于 BLMS ),也就是说,为了保证相应的自适应算法收敛,μ\muμμB\mu_{B}μB 的取值范围必须一样。收敛常量的边界为:
  for LMS:
0<μ<1λmax(20)0 < \mu < \frac{1}{\lambda_{max}} \tag{20} 0<μ<λmax1(20)

  for BLMS:
0<μB<1λmax(21)0 < \mu_{B} < \frac{1}{\lambda_{max}} \tag{21} 0<μB<λmax1(21)

其中 λmax\lambda_{max}λmax 是矩阵 RRR 的最大的特征值。

6.2. 自适应速度

自适应速度以时间常量的形式给出,该常量表明了权重向量收敛到维纳权重向量的速度(见图2)。实际上,存在 NNN 个时间常量 TpMSET_{pMSE}TpMSE,每个时间常量对应差分方程的一个(pthp\text{th}pth)模式,该差分方程用于描述自适应过程。这些时间常量的推导过程可以参考先前的文献。该推导过程遵循相应的 LMS 算法的推导形式,但存在一些非常重要的区别。收敛常量 μ\muμ(用于 LMS)被 μB\mu_{B}μB(用于 BLMS) 替代。用于 LMS 的时间单元为采样点编号 (k)(k)(k),而用于 BLMS 的时间单元为数据块编号 (j)(j)(j)。因此,这两种不同算法的方程具有相同的形式,但却有着不同的意义。This difference is resolved by converting the BLMS time constants to units of sample numbers so comparison with LMS time constants becomes meaningful. 对于输入数据自相关矩阵 RRR 的特征值全部相等的特殊情况下,这 NNN 个时间长量可以被归为一个,令 τMSE\tau_{MSE}τMSE 用于 LMSTMSET_{MSE}TMSE 用于 BLMS。可以得到:
  for LMS:
TpMSE=L4μBλp,TMSE=NL4μBtrR(22)T_{pMSE} = \frac{L}{4 \mu_{B} \lambda_{p}},\; T_{MSE} = \frac{NL}{4 \mu_{B} \text{tr} R} \tag{22} TpMSE=4μBλpLTMSE=4μBtrRNL(22)

  for BLMS:
τpMSE=14μλp,τMSE=N4μtrR(23)\tau_{pMSE} = \frac{1}{4 \mu \lambda_{p}}, \tau_{MSE} = \frac{N}{4 \mu \text{tr} R} \tag{23} τpMSE=4μλp1τMSE=4μtrRN(23)

其中 λp\lambda_{p}λp 等于 RRR 的第 pthp\,\text{th}pth 个特征值,trR\text{tr} RtrRRRR 的迹,或者说是 RRR 对角线上元素的和。

6.3. 自适应精度

自适应精度或者说权重噪声的度量,可以通过失配对其进行评估,定义为(见图2):
for BLMS:
M≜Average Excess BMSEξmin(24)\mathfrak{M} \triangleq \frac{\text{Average Excess BMSE}}{\xi_{min}} \tag{24} MξminAverage Excess BMSE(24)

for LMS:
M≜Average Excess MSEξmin.(25)M \triangleq \frac{\text{Average Excess MSE}}{\xi_{min}}. \tag{25} MξminAverage Excess MSE.(25)

失配是由 BLMSLMS 算法中的梯度噪声造成的。先前已有文献推导出了 BLMS 算法的失配,其形式为:
for BLMS:
Average Excess BMSE=μBLξmintrR,M=μBLtrR(26)\text{Average Excess BMSE} = \frac{\mu_{B}}{L} \xi_{min} \text{tr} R,\quad \mathfrak{M} = \frac{\mu_{B}}{L} \text{tr} R \tag{26} Average Excess BMSE=LμBξmintrRM=LμBtrR(26)

for LMS:
Average Excess BMSE=μξmintrR,M=μtrR.(27)\text{Average Excess BMSE} = \mu \xi_{min} \text{tr} R,\quad M = \mu \text{tr} R. \tag{27} Average Excess BMSE=μξmintrRM=μtrR.(27)

6.4. BLMSLMS 算法的收敛性能比较

对上述的指标取比值,可得到以下有趣的特性:
TpMSEτpMSE=LμμBandMM=μBLμ.(28)\frac{T_{pMSE}}{\tau_{pMSE}} = \frac{L \mu}{\mu_{B}} \quad \text{and} \quad \frac{\mathfrak{M}}{M} = \frac{\mu_{B}}{L \mu}. \tag{28} τpMSETpMSE=μBLμandMM=LμμB.(28)

可以看到:如果 μB=Lμ\mu_{B} = L \muμB=Lμ,那么 BLMSLMS 算法就以同样的速率收敛,并达到相同的失配。

In using these relations for design purposes, 必须记得 μB\mu_{B}μBμ\muμ 有着同样的收敛边界,因为这一存在的事实限制了可用的块长。比如,一个可能的情况是 μB=Lμ\mu_{B} = L \muμB=Lμμ\muμ 满足 (20)(20)(20),但是 μ\muμLLL 太大,以至于 (21)(21)(21) 得不到满足。当然,与快速自适应相比,慢速自适应不太可能出现这种情况。

当块长 L=1L=1L=1 时,关于 BLMS 收敛的所有关系都简化为 LMS 的情况。

6.5. 数据相关时的收敛特性

传统上,自适应滤波器的性能方程是在假设输入数据不相关的基础上导出的,因为这种情况容易处理。正如已有文献中所讨论的那样,BLMS 算法的收敛证明以及收敛参数的推导是基于输入矩阵 χj\chi_{j}χjχj+1\chi_{j+1}χj+1 不相关的前提假设。而 LMS 算法是基于 Xk\bm X_{k}XkXk+1\bm X_{k+1}Xk+1 不相关的前提假设。这些假设使得对于 BLMS 算法来说,认为 Wj\bm W_{j}Wj 是独立于 χj\chi_{j}χj 的,对于 LMS 算法来说,认为 Wk\bm W_{k}Wk 是独立于 Xk\bm X_{k}Xk 的。这些假设虽然简化了证明过程,但并不是对所有数据类型都是适用的。两种证明都假设输入是平稳的。

有文献讨论了数据相关时的收敛特性,并给出了一些结果,这些结果加强了支持块自适应滤波的论点。基于 Gersho 的工作,Kim and Davisson 使用长为 LLL 的数据块上的样本平均值来估计 MSE 梯度,以调整自适应算法的权重。他们假设输入数据是 MMM-dependent,这基本上意味着 that it is uncorrelated for autocorrelation lags greater than MMM(其中 MMM 是一个正整数)。Kim and Davisson 证明当输入是 MMM-dependent,且每个数据块调整一次滤波器权重时,如果 L≥(M+N−1)L \geq (M+N-1)L(M+N1),那么收敛性分析的问题就被克服了,其中 NNN 是滤波器长度,MMMMMM-dependent 的常量。

Keeler 基于修改了的 LMS 算法研究了自适应预测器,使其每 hhh 个输入样本调整一次权重。他表明如果 hhh 选的足够大,那么可以分析输入数据相关时的收敛特性。

关于上述讨论,需要记住的一点是,当输入数据相关并且满足 MMM-dependent 条件时,块自适应滤波相比 LMS 滤波具有分析上的优势,因为每个数据块只调整一次权重。然而,当输入相关时,在比较 LMSBLMS 的性能之前,还需要更多的工作。

7. BLMS 收敛特性示例

本节通过计算机仿真实验,验证了时间常数和失配的方程。仿真实验的目的是将 LMSBLMS 应用于同一个具有代表性的问题上,并检查 (28)(28)(28) 是成立的。在所有的实验中,均使用不相关的噪声。

示例问题选自 WidrowMcCool 的论文。该问题非常简单,易于分析,是一个很好的比较标准。它是一个系统辨识问题,其目标是建模 a plant consisting of a fixed delay of two sample periods.(见图3
图3
自适应滤波器有四个权重。n1kn_{1k}n1k is composed of independent samples of zeros-mean white Gaussian noise of unit power. The measurement noise n2kn_{2k}n2k is composed of independent samples of zeros-mean white Gaussian noise with a power of 0.50.50.5. 在所有情况中,均将权重向量初始化为 000

最优权重向量为 W∗=[0010]T\bm W^{*} = [0 \; 0 \; 1 \; 0]^{T}W=[0010]T. 收敛了之后,ϵk=n2k\epsilon_{k} = n_{2k}ϵk=n2kξmin=σn22\xi_{min} = \sigma_{n2}^{2}ξmin=σn22(它表示 n2n_{2}n2 的噪声功率,且值为0.5)。因为 n1n_{1}n1 是白噪声且其功率为 R=IR=IR=I,因此 RRR 所有的特征值均等于 111。可以证明该示例问题中的 MSE 由下式给出:
ξk=0.5+w1k2+w2k2+(w3k−1)2+w4k2.(29)\xi_{k} = 0.5 + w_{1k}^{2} + w_{2k}^{2} + (w_{3k} - 1)^{2} + w_{4k}^{2}. \tag{29} ξk=0.5+w1k2+w2k2+(w3k1)2+w4k2.(29)

失配和时间常量的理论值是通过 (22),(23)(22), (23)(22),(23)(26),(27)(26), (27)(26),(27) 计算出来的。失配的测量值是通过检查数据并使用 (24),(25)(24), (25)(24),(25) 来完成的。

7.1. 实验 A

该实验给出的示例表明当 μB=μ\mu_{B} = \muμB=μ 时,TMSE=LτMSET_{MSE} = L \tau_{MSE}TMSE=LτMSEM=M/L\mathfrak{M} = M / LM=M/L. 学习曲线如图4、图5 所示,表I 总结出了该实验的结果。可以看到理论结果和实验结果相吻合。
图4
图5
表I

7.2. 实验 B

该实验给出的示例表明当 μB=Lμ\mu_{B} = L \muμB=Lμ 时,TMSE=τMSET_{MSE} = \tau_{MSE}TMSE=τMSEM=M\mathfrak{M} = MM=M. 学习曲线如图6、图7 所示,表I 总结出了该实验的结果。再次看到理论结果和实验结果相吻合。
图6
图7

使用上述和其它的 μB,μ,L\mu_{B}, \, \mu, \, LμB,μ,L 之间的关系进行了更多的实验,均表明 (28)(28)(28) 成立。

8. LMS 以及 BLMS 自适应滤波的计算复杂度

算法实现中涉及的主要计算效率问题是存储(内存),时间(CPU 的机器周期数,输入输出等)以及计算复杂度(以所需的实数乘法和加法次数来衡量)。由于前两个指标与处理器架构有关,因此,本文集中讨论当使用标准串行处理器时,所需的计算复杂度。这是为了方便起见,即使 BLMS 自适应滤波器最有效的实现可能是使用并行处理器。

8.1. LMS 自适应滤波器的计算复杂度

(1)(1)(1) 中的卷积操作是直接实现的。生成一个输出数据需要 NNN 个实数乘法以及 N−1N-1N1 个实数加法。因此,生成 LLL 个输出数据需要 LNLNLN 个实数乘法以及 L(N−1)L(N-1)L(N1) 个实数加法。

LMS 算法生成 LLL 个输出数据(一个数据块)需要 LNLNLN 次自适应。 在每个数据块上,需要 L(N+1)L(N+1)L(N+1) 次实数乘法来计算 (2μϵk)Xk(2 \mu \epsilon_{k}) \bm X_{k}(2μϵk)Xk,需要 LNLNLN 次实数加法来完成相加操作,需要 LLL 个实数加法来计算 ϵk=dk−yk\epsilon_{k} = d_{k} - y_{k}ϵk=dkyk。对于 LMS 算法来说,计算一个数据块的自适应部分总共需要 L(N+1)L(N+1)L(N+1) 次实数乘法以及 L(N+1)L(N+1)L(N+1) 次实数加法。因此,LMS 自适应滤波总的计算复杂度为 L(2N+1)L(2N+1)L(2N+1) 次实数乘法和 2LN2LN2LN 次实数加法。表II 给出了这些结果。
表II

8.2. BLMS 自适应滤波器的计算复杂度

BLMS 的卷积操作也是直接实现的,因此它与 LMS 算法的情况一样。

(19)(19)(19) 可以看出,对于每个数据块,计算权重更新项 Φj\bm \Phi_{j}Φj 需要 LNLNLN 次实数乘法以及 N(L−1)N(L-1)N(L1) 次实数加法,将 (2μB/L)Φj(2\mu_{B} / L) \bm \Phi_{j}(2μB/L)ΦjWj\bm W_{j}Wj 相加需要 NNN 次实数加法,计算 (2μB/L)⋅Φj(2\mu_{B}/L) \cdot \bm \Phi_{j}(2μB/L)Φj 需要 NNN 次实数乘法(计算 2μB/L2\mu_{B} / L2μB/L 需要两次乘法,但这只需要在第一个数据块到来时计算一次就好,因此,忽略其计算复杂度),计算 ϵk=dk−yk\epsilon_{k} = d_{k} - y_{k}ϵk=dkyk 需要 LLL 次实数加法。因此,对于每个数据块,标准 BLMS 自适应滤波总的复杂度为 N(2L+1)N(2L+1)N(2L+1) 次实数乘法以及 2LN2LN2LN 次实数加法。表II 给出了这些结果。

8.3. 基于 FFT 实现的 BLMS 自适应滤波器

对于 BLMS 自适应滤波来说,可以使用 FFT 以及 overlap-addoverlap-save 来实现其卷积操作。在整个分析过程中,假设输入和输出都是实信号,且 FFT used is for complex data。那么就可以使用高效的卷积运算,它通过适当地使用 N′/2N^{'} / 2N/2 点的复数 FFT 算法的实部和虚部来计算 N′N^{'}N 点实序列的变换。为了进一步降低复杂度,a radix 4 FFT with one radix 2 section is used. FFT 的长度 (N′/2)(N^{'} / 2)(N/2) 必须是 222 的整数次幂,其中 N′≥L+N−1N^{'} \geq L+N-1NL+N1。附录讨论了 FFT 算法和卷积的复杂度。

BLMS 算法中的梯度估计项 Φj\bm \Phi_{j}Φj 可以被写成如第 555 节所示的相关的形式。因此,它可以如上述所述的卷积那样使用 FFT 来实现。唯一的不同之处是在与 xix_{i}xiFFT 相乘之前,必须对 ϵi\epsilon_{i}ϵiFFT 取共轭。图8 展示了该运算过程,附录讨论了其计算复杂度。注意到相关操作输出 N′N^{'}N 个数据,但只有前 NNN 个数据是有意义的,因为只有 NNN 个权重需要被调整。如图8 所展示的那样,其余的 N′−NN^{'} - NNN 个数据将被丢弃(其实是将这些数据赋值为零)。
图8
Once the correlation (gradient estimate) is computed, the BLMS algorithm requires NNN real multiplies and N+LN + LN+L real adds per block of outputs.II 给出了基于 FFT 实现的 BLMS 自适应滤波器的计算复杂度。

8.4. 基于多维卷积技术实现的 BLMS 自适应滤波器

使用多维卷积技术也可以高效地完成串行实现。它以增加存储和数据操作为代价,大大节省了乘法运算次数。这样的卷积输出一整块数据需要 (3)M(3)^M(3)M 次实数乘法,其中 N=2MN = 2^{M}N=2M。如表II 所示,以这种方式实现的 BLMS 自适应滤波器需要 2(3)M+N2(3)^{M} + N2(3)M+N 次实数乘法。
表III

8.5. 复杂度分析

II 中的结果表明 LMS 和直接实现的 BLMS 之间的复杂度差异非常小。因此,感兴趣的点是比较 LMS 和上述讨论的两种快速算法所实现的 BLMS 自适应滤波器。对于这些实现,计算复杂度比率 CR,并通过对块长 LLL 取不同值,得到表III 中的结果。
CR=Complexity of LMS FilteringComplexity of BLMS Filtering.(30)\text{CR} = \frac{\text{Complexity of LMS Filtering}}{\text{Complexity of BLMS Filtering}}. \tag{30} CR=Complexity of BLMS FilteringComplexity of LMS Filtering.(30)

只对 L=NL=NL=N 的情况进行了分析,因为第五节有讲到这种情况最有效地利用了输入数据。正如附录中所讨论的那样,卷积实现需要的序列长度为 N′≥L+N−1N^{'} \geq L + N - 1NL+N1。因为对于表II 中的方程来说,N′N^{'}N 必须是 222 的整数次幂,且已假设 L=NL = NL=N,因此,为了方便起见,在计算 CR 时,令 N′=2NN^{'} = 2NN=2N

IV summarizes the conditions under which the BLMS filter is more efficient than the LMS filter for the two implementations discussed. 很明显,串行实现的 BLMS 自适应滤波器对于大多数实际应用所感兴趣的滤波器长度来说都是具有吸引力的。对于较大的滤波器长度以及块长度来说,复杂度的提高是很显著的,达到了十倍甚至更高。使用大型滤波器的例子包含滤波器长达 256256256 的房间声学问题。另一个例子是潜艇探测问题,它使用长为 204820482048 的滤波器来获得更好的谱分辨率和处理增益。
表IV
Ferrara 所发表的论文是对 Dentino 等人所讨论的频域自适应滤波技术的扩展和改进。可以证明 Ferrara 的频域滤波器是在串行处理器上使用 FFT 实现的块自适应滤波器的一种特殊情况。这两种技术的主要差异在于基于 FFT 实现的块自适应滤波器是在时域调整权重,而 Ferrara 的滤波器是在频域调整权重。

9. 结论

推导了一种块自适应滤波器,它能够被快速实现,同时保持了与 LMS 自适应滤波器相同的性能。块表达式提供了一个统一的框架,维纳滤波和 LMS 自适应滤波都是该框架下的一种特殊情况(即块长 L=1L = 1L=1 的情况)。比较了 BLMSLMS 自适应滤波器的收敛特性,结果表明两者是一样的。有研究指出,当输入数据相关时,BLMS 相比 LMS 自适应滤波器具有分析上的优势。最后,当在串行处理器上使用高效的卷积算法实现时,BLMS 自适应滤波器可以涉及较低的计算复杂度。如果使用并行处理器,预计可以进一步提升计算速度。研究工作仍在继续以将块自适应滤波技术扩展到其它类型的 FIRIIR 结构。

10. 附录 A: 基于 FFT 的卷积的计算复杂度

The FFT algorithm used is for complex data。复数和实数运算之间的关系为:
111 个复数加法 =2= 2=2 个实数加法
111 个复数乘法 =4= 4=4 个实数乘法 + 222 个实数加法

两个长为 LLLNNN 的序列的线形卷积结果是一个长为 L+N−1L+N-1L+N1 的序列。因此,为了使用 FFT 实现这样的卷积,必须要求序列的长度为 N′≥L+N−1N^{'} \geq L + N -1NL+N1,以避免重叠。

只有在蝶形部分的数量 (log2(N′/2))(\text{log}_{2}(N^{'}/2))(log2(N/2)) 为偶数时,The radix 4 FFT complexity formulas 才有用。当 log2(N′/2)\text{log}_{2}(N^{'}/2)log2(N/2) 为奇数时,an efficient radix 2 section is used for the first section, and log4(N′/4)\text{log}_{4}(N^{'}/4)log4(N/4) radix 4 sections are used for the remainder. Sorting out the results of the efficient procedure for real data requires 2N′2N^{'}2N real multiplies and 5N′5N^{'}5N real adds. 因此,对于每个输出数据块,FFT 的复杂度为 (3/4)N′Q−4(N′/2−1)+2N′+bN′(3/4)N^{'}Q - 4(N^{'}/2-1) + 2N^{'} + bN^{'}(3/4)NQ4(N/21)+2N+bN 次实数乘法以及 (11/8)N′Q−2(N′/2−1)+5N′+b(3N′/2)(11/8)N^{'}Q - 2(N^{'}/2-1) + 5N^{'} + b(3N^{'}/2)(11/8)NQ2(N/21)+5N+b(3N/2) 次实数加法,其中:
Q={log2(N′/2),log2(N′/2)evenlog2(N′/4),log2(N′/2)oddQ=\left\{ \begin{aligned} & \text{log}_{2}(N^{'}/2), \; \text{log}_{2}(N^{'}/2) \, \text{even} \\ & \text{log}_{2}(N^{'}/4), \; \text{log}_{2}(N^{'}/2) \, \text{odd} \end{aligned} \right. Q={log2(N/2),log2(N/2)evenlog2(N/4),log2(N/2)odd


b={0,log2(N′/2)even1,log2(N′/2)oddb=\left\{ \begin{aligned} & 0, \; \text{log}_{2}(N^{'}/2) \, \text{even} \\ & 1, \; \text{log}_{2}(N^{'}/2) \, \text{odd} \end{aligned} \right. b={0,log2(N/2)even1,log2(N/2)odd

卷积需要对输入数据和权重各进行一次 FFT 运算。还需要一次复数乘法和一次 iFFT 运算。对于每个数据块来说,这总共需要 (9/4)N′Q−12(N′/2−1)+8N′+b(3N′)(9/4)N^{'}Q - 12(N^{'}/2-1) + 8N^{'} + b(3N^{'})(9/4)NQ12(N/21)+8N+b(3N) 次实数乘法和 (33/8)N′Q−6(N′/2−1)+16N′+b(9N′/2)(33/8)N^{'}Q - 6(N^{'}/2-1) + 16N^{'} + b(9N^{'}/2)(33/8)NQ6(N/21)+16N+b(9N/2) 次实数加法。

梯度估计中的相关操作与上述的卷积操作类似,不过前者少计算一次 FFT。这是因为输入数据的变换在卷积运算过程中已经计算过了(见图8)。对于每个数据块来说,,相关运算总共需要 (3/2)N′Q−8(N′/2−1)+6N′+b(2N′)(3/2)N^{'}Q - 8(N^{'}/2-1) + 6N^{'} + b(2N^{'})(3/2)NQ8(N/21)+6N+b(2N) 次实数乘法和 (11/4)N′Q−4(N′/2−1)+11N′+b(3N′)(11/4)N^{'}Q - 4(N^{'}/2-1) + 11N^{'} + b(3N^{'})(11/4)NQ4(N/21)+11N+b(3N) 次实数加法。

11. 后记

论文从块 LMS 算法入手,介绍了块自适应滤波器。块自适应滤波是研究频域自适应滤波器的基础,也是自适应滤波器版图中的一个重要组成部分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_224068.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安利几个小技巧教会你ppt如何转pdf

作为一名打工人&#xff0c;特别是办公类&#xff0c;经常是要处理大大小小的文件&#xff0c;有时候甚至要做多种文件转换。并且老板都是多变的&#xff0c;经常突然性就让你把辛苦制作一大半的PPT转成PDF格式的文件再给他。那刚入门的职场小白肯定就会选择&#xff0c;老老实…

我终于读懂了适配器模式。。。

文章目录&#x1f5fe;&#x1f306;什么是适配器模式&#xff1f;&#x1f3ef;类适配器模式&#x1f3f0;对象适配器模式⛺️接口适配器模式&#x1f3ed;适配器模式在SpringMVC 框架应用的源码剖析&#x1f5fc;适配器模式的注意事项和细节&#x1f306;什么是适配器模式&am…

自学软件测试?一般人我还是劝你算了吧...

本人7年测试经验&#xff0c;在学测试之前对电脑的认知也就只限于上个网&#xff0c;玩个办公软件。这里不能跑题&#xff0c;我为啥说&#xff1a;自学软件测试&#xff0c;一般人我还是劝你算了吧&#xff1f;因为我就是那个一般人&#xff01; 软件测试基础真的很简单&…

C# Socket

一 两个人在两个房间里打电话的图 ① 人通过【电话】可以通信&#xff1b; ② 程序通过【Socket】来通信&#xff1b; ③ *套接字 就是 程序间的电话机&#xff1b; ④ 我和孙权打电话 电话 规定好的语言&#xff1b; ⑤ 电脑和电话进行联系 协议&#xff1b; 二 Socket相关…

JVM(二十三)—— 垃圾回收器(三)G1垃圾回收器

G1垃圾回收器:区域化分代式G1概述G1的特点&#xff08;优势&#xff09;G1的缺点G1的参数设置G1的适用场景分区region&#xff1a;化整为零记忆集和写屏障G1回收器垃圾回收过程年轻代GC并发标记过程混合回收G1概述 应用程序所应对的业务越来越庞大&#xff0c;复杂&#xff0c…

【大数据】flink 读取文件数据写入ElasticSearch

前言 es是大数据存储的必备中间件之一&#xff0c;通过flink可以读取来自日志文件&#xff0c;kafka等外部数据源的数据&#xff0c;然后写入到es中&#xff0c;本篇将通过实例演示下完整的操作过程&#xff1b; 一、前置准备 1、提前搭建并开启es服务&#xff08;本文使用doc…

图像分割 - Hough变换直线检测

目录 1. Hough 直线检测 2. HoughLinesP 函数 1. Hough 直线检测 霍夫变换&#xff08;Hough 变换&#xff09;&#xff1a;利用对偶原理&#xff0c;把原空间的问题转换到对偶空间去求解 这里涉及到空间转换&#xff0c;将原来的笛卡尔空间&#xff08;xy空间&#xff09;…

App安全架构之前端安全防护

近年来&#xff0c;随着互联网、物联网、移动设备、5G通讯等技术的齐头发展&#xff0c;人类的生活和工作越来越离不开软件和互联网&#xff0c;正如人类社会文明发展到一定程度以后&#xff0c;会需要法律等社会规范来保护一样&#xff0c;线上环境也是一样道理。 Gartner 对…

Python学习小组课程-课程大纲与Python开发环境安装

一、前言 注意&#xff1a;此为内部小组学习资料&#xff0c;非售卖品&#xff0c;仅供学习参考。 为提升项目落地的逻辑思维能力&#xff0c;以及通过自我创造工具来提升工作效率&#xff0c;特成立Python学习小组。计划每周花一个小时进行在线会议直播学习&#xff0c;面向…

国内访问Github超级慢?那是你没有用我这个脚本。直接起飞。

导语 之前很多朋友咨询过国内访问Github较慢的问题&#xff0c;然后我一般让他们自己去知乎上找攻略&#xff0c;但今天我才发现网上竟然没有一个一键配置的脚本&#xff0c;一般都需要我们跟着教程一步步地去做才行。这也太麻烦了&#xff0c;于是自己动手写了个脚本&#xf…

ceph浅谈

总谈 ceph简介 用上ceph&#xff0c;多台机器的磁盘空间在一起了&#xff0c;在一台机器上就可以看到使用所有空间。 还可以保存多份安全备份 存储先ceph&#xff0c;自我管理修复&#xff0c;跨机房&#xff0c;节点越多&#xff0c;并行化&#xff0c;论上&#xff0c;节点越…

1-(3-磺酸基)丙基-1-甲基-2-吡咯烷酮三氟甲磺酸盐[C3SO3Hnmp]CF3SO3

1-(3-磺酸基)丙基-1-甲基-2-吡咯烷酮三氟甲磺酸盐[C3SO3Hnmp]CF3SO3 离子液体(IonicLiquids)是完全由离子组成&#xff0c;现在多指在低于100摄氏度时呈液体状态的熔盐。通常由特定的有机阳离子和无机阴离子&#xff08;或有机阴离子&#xff09;构成。 离子液体特点 蒸汽压…

C++基础——模板讲解

目录 一. 泛型编程 二. 函数模板 1.格式&#xff1a; 2.定义&#xff1a; 1.隐式实例化 2.显式实例化 3.解决方法3&#xff1a;使用多个T类型 4.在C中编译器允许非模板函数和模板函数同时存在 一. 泛型编程 先来看一段代码&#xff1a; void Swap(int& p1, int&am…

LeetCode:8. 字符串转换整数 (atoi)

8. 字符串转换整数 &#xff08;atoi&#xff09;1&#xff09;题目2&#xff09;思路3&#xff09;代码4&#xff09;结果1&#xff09;题目 请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数&#xff08;类似 C/C 中的 atoi 函数…

逻辑判断与正则表达式文本处理

上一篇文章分享了正则表达式的操作&#xff0c;这一篇文章就让我们一起看看正则表达式与逻辑判断结合起来会发生什么吧&#xff01;感兴趣的小伙伴欢迎评论区或者是私信留言&#xff01; 一、题目描述&#xff1a; 输入一个字符串,检查其是否为合法的python变量。输入$$$结束:…

数据结构【队列】

文章目录&#xff08;一&#xff09;队列定义&#xff08;二&#xff09;队列实现&#xff08;1&#xff09;创建结构体&#xff08;2&#xff09;具体函数实现及解析1.1 初始化队列1.2入队列1.3出队列1.4取队首元素1.5取队尾元素1.6返回队列个数1.7判断是否为空1.8销毁队列&am…

FITC标记的STAT1-ASON,绿色荧光素标记STAT1反义寡核苷酸,FITC-STAT1-ASON

产品名称&#xff1a;FITC标记的STAT1-ASON&#xff0c;绿色荧光素标记STAT1反义寡核苷酸 ​​​​​​​英文名称&#xff1a;FITC-STAT1-ASON STAT1 是第一个被发现的 STATs 家族成员&#xff0c;其编码基因位于 2 号染色体上&#xff0c;由 750 个氨基酸残基组成&#xff…

随想录一刷Day55——动态规划

文章目录Day55_动态规划47. 判断子序列48. 不同的子序列Day55_动态规划 47. 判断子序列 392. 判断子序列 思路&#xff1a; 双指针很简单&#xff0c;O(n)O(n)O(n) 时间就能解决 这里还是用dp dp[i][j] 表示以 s[i - 1] 结尾的字符串和以 t[]i-1 为结尾的字符串的最大子序列长…

Linux篇【5】:Linux 进程概念(二)

目录 3.5、查看进程 3.6、通过系统调用接口获取正在进行的进程的标识符 3.7、通过系统调用接口创建子进程 - fork 初识 3.5、查看进程 [HJMhjmlcc ~]$ clear [HJMhjmlcc ~]$ pwd /home/HJM [HJMhjmlcc ~]$ ls [HJMhjmlcc ~]$ touch mytest.c [HJMhjmlcc ~]$ ls mytest.c [H…

基于51单片机的简易数字计算器Proteus仿真

资料编号&#xff1a;115 下面是相关功能视频演示&#xff1a; 115-基于51单片机的简易数字计算器Proteus仿真&#xff08;源码仿真全套资料&#xff09;功能说明&#xff1a; 该计算器系统51 系列的单片机进行的数字计算器系统设计&#xff0c;可以完成计算器的键盘输入&…