# dsp_AffineProjectionFilter
使用仿射投影 (AP) 算法计算输出、误差和系数
函数库: TyDSPSystem
# 描述
dsp_AffineProjectionFilter 系统对象使用 AP 滤波器实现过滤输入的每个通道。
要过滤输入的每个通道:
1、创建 dsp_AffineProjectionFilter 对象并设置其属性。
2、使用 step 调用对象。
# 构造
apf = dsp_AffineProjectionFilter()
apf = dsp_AffineProjectionFilter(; Name = Value)
# 说明
apf = dsp_AffineProjectionFilter( ) 返回一个自适应 FIR 滤波器系统对象 apf。 此系统对象使用仿射投影 (AP) 算法计算给定输入和所需信号的滤波输出和滤波误差。
apf = dsp_AffineProjectionFilter(; Name = Value) 返回一个仿射投影滤波器对象,每个指定的属性都设置为指定的值。 未指定的属性具有默认值。
# 语法
y, err = step(apf, x, d)
# 说明
y,err=step(apf,x,d) 过滤输入 x,使用 d 作为所需信号,并在 y 中返回过滤后的输出,在 err 中返回滤波器错误。系统对象估计最小化输出信号和所需信号之间的误差所需的滤波器权重。您可以通过访问对象的 Coefficients 属性来访问这些系数。 这只能在调用对象后完成。 例如,要访问 apf 滤波器的优化系数,请在将输入和所需信号传递给对象后调用 apf.Coefficients 参数。
# 示例
QPSK 自适应均衡
使用 32 系数 FIR 滤波器的 QPSK 自适应均衡(1000 次迭代)
using TyDSPSystem
using TyPlot
using TyMath
rng = MT19937ar(1234)
D = 16 # Number of samples of delay
b = exp(1im * pi / 4) * [-0.7 1] # Numerator coefficients of channel
a = [1 -0.7] # Denominator coefficients of channel
ntr = 1000 # Number of iterations
s = sign.(randn(rng, 1, ntr + D)) + im * sign.(randn(rng, 1, ntr + D)) # Baseband signal
n = 0.1 * (randn(rng, 1, ntr + D) + im * randn(rng, 1, ntr + D)) # Noise signal
r = filter1(vec(b), vec(a), vec(s))[1] + vec(n) # Received signal
x = r[1+D:ntr+D] # Input signal (received signal)
d = s[1:ntr] # Desired signal (delayed QPSK signal)
mu = 0.1 # Step size
po = 4 # Projection order
offset = 0.05 # Offset for covariance matrix
apf = dsp_AffineProjectionFilter(Length = 32, StepSize = mu, ProjectionOrder = po, InitialOffsetCovariance = offset)
y, e = step(apf, x, d)
figure()
subplot(2, 2, 1)
plot(1:ntr, real(d), 1:ntr, real(y), 1:ntr, real(e))
title("In-Phase Components")
grid("on")
legend(["Desired", "Output", "Error"])
xlabel("time index")
ylabel("signal value")
subplot(2, 2, 2)
plot(1:ntr, imag(d), 1:ntr, imag(y), 1:ntr, imag(e))
grid("on")
title("Quadrature Components")
legend(["Desired", "Output", "Error"])
xlabel("time index")
ylabel("signal value")
subplot(2, 2, 3)
plot(real(x[ntr-100:ntr]), imag(x[ntr-100:ntr]), ".")
title("Received Signal Scatter Plot")
axis("square")
xlabel("Real[x]")
ylabel("Imag[x]")
grid("on")
axis([-3 3 -3 3])
subplot(2, 2, 4)
plot(real(y[ntr-100:ntr]), imag(y[ntr-100:ntr]), ".")
title("Equalized Signal Scatter Plot")
axis("square")
xlabel("Real[y]")
ylabel("Imag[y]")
grid("on")
axis([-3 3 -3 3])

使用仿射投影滤波器对 FIR 滤波器的系统识别
using TyDSPSystem
using TyPlot
using TyMath
using TySignalProcessing
rng = MT19937ar(1234)
ha = fir1(31, 0.5)
# FIR system to be identified
fir = dsp_FIRFilter(Numerator = ha)
iir = dsp_IIRFilter(Numerator = [sqrt(0.75)], Denominator = [1 -0.5])
x = step(iir, sign.(randn(rng, 2000, 25)))
# Observation noise signal
n = 0.1 * randn(rng, size(x))
# Desired signal
d = step(fir, x) + n
#Filter length
l = 32
# Affine Projection filter Step size.
mu = 0.008
# Decimation factor for analysis
# and simulation results
m = 5
apf = dsp_AffineProjectionFilter(StepSize = mu)
simmse, meanWsim, Wsim, traceKsim = msesim(apf, x, d, m)
figure()
plot(m * (1:length(simmse)), 10 * log10.(simmse))
xlabel("Iteration")
ylabel("MSE (dB)")
title("Learning curve")
grid("on")

# 属性
除非另有说明,否则属性是不可调整的,这意味着您在调用对象后无法更改它们的值。 对象在调用时锁定,而释放函数将其解锁。
如果属性是可调的,您可以随时更改其值。
Method - 计算滤波器系数的方法"Direct Matrix Inversion"(默认)| "Recursive Matrix Update" | "Block Direct Matrix Inversion"
将用于计算滤波器系数的方法指定为 "Direct Matrix Inversion"、"Recursive Matrix Update" 和 "Block Direct Matrix Inversion"。 此属性是不可调整的。
Length - 滤波器系数向量的长度32(默认)| 正整数
将 FIR 滤波器系数向量的长度指定为正整数标量值。 此属性是不可调整的。
数据类型:Float | Int
ProjectionOrder - 仿射投影算法的投影顺序2(默认)| 正整数
将仿射投影算法的投影阶数指定为大于或等于 2 的标量正整数值。此属性定义输入信号协方差矩阵的大小。 此属性是不可调整的。
数据类型:Float
StepSize - 仿射投影步长1(默认)| 非负标量
将仿射投影步长因子指定为介于 0 和 1 之间的标量非负数值,包括 0 和 1。 将步长设置为 1 可在适应期间提供最快的收敛。
是否可调: Yes
数据类型:Float | Int
Initial Coefficients - 滤波器的初始系数0(默认)| 标量 | 向量
将 FIR 自适应滤波器系数的初始值指定为长度等于 Length 属性值的标量或向量。
是否可调: Yes
数据类型:Float | Int
InitialOffsetCovariance - 偏移输入协方差矩阵的初始值1(默认)| 标量 | 方阵
指定偏移输入协方差矩阵的初始值。 此属性必须是一个标量正数值或每个维度等于 " ProjectionOrder" 属性值的正定方阵。 如果它是标量值,则 "InverseOffsetCovariance" 属性将初始化为对角矩阵,其中对角线元素等于该标量值。 如果它是方阵,则 "InverseOffsetCovariance" 属性被初始化为该方阵的值。
是否可调: Yes
依赖项:仅当 Method 属性设置为 "Direct Matrix Inversion" 或 "Block Direct Matrix Inversion" 时,此属性才适用。
数据类型: Float | Int
InitialInverseOffsetCovariance - 偏移输入协方差矩阵逆的初始值20(默认)| 标量 | 方阵
指定偏移输入协方差矩阵逆的初始值。 此属性必须是一个标量正数值或每个维度等于 " ProjectionOrder" 属性值的正定方阵。 如果它是一个标量值,则 "InverseOffsetCovariance" 属性将初始化为一个对角矩阵,其中每个对角元素都等于该标量值。 如果它是方阵,则 "InverseOffsetCovariance" 属性将初始化为该方阵的值。
是否可调: Yes
依赖项:仅当 Method 属性设置为 "Recursive Matrix Update" 时,此属性才适用。
数据类型: Float | Int
InitialCorrelationCoefficients - 初始相关系数0(默认)| 标量 | 向量
将 FIR 滤波器的相关系数的初始值指定为长度等于 "ProjectionOrder" –1 的标量或向量。
是否可调: Yes
依赖项:仅当 Method 属性设置为 "Recursive Matrix Update" 时,此属性才适用。
数据类型: Float | Int
LockCoefficients - 锁定系数更新false (默认) | true
指定是否应锁定滤波器系数值。 当您将此属性设置为 true 时,滤波器系数不会更新并且它们的值保持不变。 默认值为 false(滤波器系数不断更新)。
是否可调: Yes
# 输入参数
x - 数据输入标量 | 列向量
由仿射投影滤波器过滤的信号。 输入 x 和所需信号 d 必须具有相同的大小和数据类型。
输入可以是可变大小的信号。 即使对象被锁定,您也可以更改列向量中的元素数。 当您调用对象运行其算法时,系统对象会锁定。
数据类型:Float
复数支持: Yes
d - 预期信号标量 | 列向量
仿射投影滤波器调整其系数以最小化误差 err,并尽可能将输入信号 x 收敛到所需信号 d。
输入 x 和所需信号 d 必须具有相同的大小和数据类型。
所需信号可以是可变大小的信号。 即使对象被锁定,您也可以更改列向量中的元素数量。 调用对象时系统对象会锁定。
数据类型:Float
复数支持: Yes
# 输出参数
y - 过滤后的输出标量 | 列向量
过滤后的输出,以标量或列向量形式返回。 对象调整其滤波器系数以收敛输入信号 x 以匹配所需信号 d。 滤波器输出收敛的信号。
数据类型:Float
复数支持: Yes
err - 输出和所需信号之间的差异标量 | 列向量
输出信号 y 和所需信号 d 之间的差,以标量或列向量形式返回。 仿射投影滤波器的目标是最小化这个误差。 对象调整其系数以向最佳滤波器系数收敛,从而产生与所需信号密切匹配的输出信号。 要访问仿射投影滤波器系数,请在将输入和所需信号传递给对象后调用 apf.Coefficients 系数。
数据类型:Float
复数支持: Yes
# 对象函数
要使用对象函数,请将系统对象指定为第一个输入参数。 例如,要释放名为 obj 的系统对象的系统资源,请使用以下语法:
特定于 dsp_AffineProjectionFilter
| 对象 | 描述 |
|---|---|
| msesim | 自适应滤波器的估计均方误差 |
所有系统对象共有
| 对象 | 描述 |
|---|---|
| step | 运行系统对象算法 |
| release | 释放资源并允许更改系统对象属性值和输入特征 |
| reset | 重置系统对象的内部状态 |
# 算法
仿射投影算法 (APA) 是一种自适应方案,它基于多个输入向量 [1] 估计未知系统。 它旨在提高其他自适应算法的性能,主要是基于 LMS 的算法。 仿射投影算法重用旧数据,从而在输入信号高度相关时实现快速收敛,从而产生一系列算法,可以在计算复度和收敛速度之间进行权衡 [2]。
以下等式描述了设计 AP 滤波器时使用的概念算法:
其中,如果初始偏移协方差是标量 ε,则 C 为 εI,如果初始偏移协方差为矩阵 R,则为 R。变量如下:
| 变量 | 描述 |
|---|---|
| n | 当前时间索引 |
| u(n) | 第 n 步的输入样本 |
| 最后 L+1 个输入信号向量的矩阵 | |
| 自适应滤波器系数向量 | |
| y(n) | 自适应滤波器输出 |
| d(n) | 预期 信号 |
| e(n) | 第 n 步的错误 |
| L | 投影顺序 |
| N | 滤波器阶数(即滤波器长度 = N+1) |
| 步长 |
# 参考文献
[1] K. Ozeki, T. Umeda, “An adaptive Filtering Algorithm Using an Orthogonal Projection to an Affine Subspace and its Properties”, Electron. Commun. Jpn. 67-A(5), May 1984, pp. 19–27.
[2] Paulo S. R. Diniz, Adaptive Filtering: Algorithms and Practical Implementation, Second Edition. Boston: Kluwer Academic Publishers, 2002.