2026a

# sensingDictionary


稀疏信号还原的感知字典

函数库: TyWavelet

# 描述

使用 sensingDictionary 创建感知字典对象,对一维信号进行稀疏近似。sensingDictionary 函数为各种框架提供内置支持,包括小波、离散余弦变换 (DCT)、傅里叶以及高斯和伯努利随机分布。您还可以创建和使用自定义词典。您可以使用匹配追寻或基追寻将字典应用于信号稀疏恢复。

# 语法

A = sensingDictionary()

# 说明

A = sensingDictionary() 创建一个与 100×100 单位矩阵相对应的感知字典。


A = sensingDictionary(; Name=Value) 创建一个感知字典,其属性由名称-值参数指定。例如,A = sensingDictionary(; Type=["dct"]) 将创建与 dct 基类型相对应的感知字典。您可以指定多个名称-值参数。

# 属性

Size - 感知字典大小
[100,100](默认) | 正整数 | 双元素向量

感知字典大小,指定为正整数或正整数的两元素向量。如果指定大小为 [m, n],则感知字典的行数为 m,列数为 n;如果指定大小为标量 m,则字典的行数为 m,列数取决于字典类型。对于随机字典,必须将大小指定为双元素向量。

提示

不能更改现有感知字典的大小。例如,如果感知字典 A 的大小为 [100 100],则不能为 A 指定不同的大小。

示例: A = sensingDictionary(; Size=[50,50],Type=["dwt", "dct"]) 创建一个由基类型 "dct" 和 "poly" 组成的感知字典 A。每种类型的矩阵大小为 50 x 50,A.Size = [50,100]。

Type - 字典基类型
字符串向量

字典基类型,以字符串向量的形式指定。每个字符串指定感知字典 A 中的一个基类型。对于每个基类型,基元素在矩阵中按列排列。每个基元素的长度为 N,其中 N = A.Size[1]。感知字典对象支持以下基类型:

  • "eye"(默认)- 与单位矩阵相对应的字典;

  • "dct" - 字典对应离散余弦变换-II 基;DCT-II 正交基为:

  • "dwt" - 字典对应于某一分解级的特定小波基;

  • "fourier" - 字典对应于傅里叶基;傅立叶基为 ,此处

  • "poly" - 字典矩阵的第 k 列对应于 t.^(k-1) 形式的单项式,其中 t 是由 LinRage(0,1,N) 指定的时间间隔,

  • "rand" - 字典矩阵条目为独立同分布(IID)高斯矩阵(默认)或伯努利矩阵;

  • "walsh" - 字典矩阵元素由 Walsh 编码生成。

示例: A = sensingDictionary(; Type=["eye", "dct"]) 创建一个具有基类型 "eye" 和 "dct" 的感知字典。

Name - 基名称
字符串向量

基名称,以字符串向量的形式指定。仅支持以下基类型的名称。

  • "dwt" - 字符向量是 modwt 函数支持的正交小波的名称:

    • "haar" 或 "db1"(默认)- Haar 小波;

    • "dbN" - 具有 N 个消失矩的极值相位 Daubechies 小波,其中 N 为 2 到 45 之间的正整数;

    • "symN" - 具有 N 个消失矩的 Symlets 小波,其中 N 为 2 到 45 之间的正整数;

    • "coifN" - 具有 N 个消失矩的 Coiflets 小波,其中 N 为 1 到 5 之间的正整数;

    • "fkN" - 具有 N 个系数的 Fejér-Korovkin 小波,其中 N = 4、6、8、14、18 和 22。

  • "rand" - 字符向量是随机矩阵的名称:

    • "Gaussian"(默认)- IID 高斯矩阵;

    • "Bernoulli" - 伯努利矩阵。

如果 Type 中指定的所有基类型都不支持 Name,则在 Name 的相应位置插入一个空字符向量。

命令 结果
A = sensingDictionary(; Size=[50 50],Type=["dwt", "rand"],Name=["coif4", "Bernoulli"]) 创建与 coif4 小波基和随机伯努利矩阵相对应的感知字典。
A = sensingDictionary(; Size=[50 50],Type=["dwt", "dct", "rand"],Name=["coif4", "Bernoulli"]) 创建与 coif4 小波基、DCT 基和随机伯努利矩阵相对应的感知字典。
Level - 分解层级
floor(log2(A.Size(1)) (默认) | 整数 | 向量

小波基的分解层级,以整数或正整数向量形式指定。只有在 Type 中指定了至少一个小波基,才能指定 Level。如果在 Type 中指定了小波基和其他基类型,可以将其他基的层级设为 0 或省略。您指定的非零元素数量必须小于或等于 "dwt" 类型的数量。

命令 结果
A = sensingDictionary(; Type=["dwt"],Name=["db2"],Level=[3]) 创建与第 3 级 db2 小波细节相对应感知字典。
A = sensingDictionary(Type=["dwt","fourier"],Name=["db2"],Level=[3,0]) 或 A = sensingDictionary(Type=["dwt","fourier"],Name=["db2"],Level=[3]) 创建与第 3 级 db2 小波细节和傅立叶基相对应的感知字典。
CustomDictionary - 自定义感知字典矩阵
矩阵

自定义感知字典矩阵,以矩阵形式指定。不能同时指定自定义字典和任何其他属性。

示例: A = sensingDictionary(; CustomDictionary=xmat) 使用自定义矩阵 xmat 创建感知字典。

# 对象函数

函数 说明

matchingPursuit

使用匹配追踪算法恢复稀疏信号

basisPursuit

使用基追踪算法恢复稀疏信号
horzcat 两个感知字典的横向连接

subdict

从感知字典中提取子矩阵

# 示例

创建感知字典

创建感知字典,该字典是第 2 级 db1 小波和 DCT 基的连接。

using TyWavelet

A = sensingDictionary(; Size=100, Type=["dwt", "dct"], Name=["db1"], Level=[2 0])
A = 
   sensingDictionary - Property:
               Type: ["dwt", "dct"]
               Name: ["db1", ""]
              Level: [2, 0]
   CustomDictionary: 0×0 Float64
               Size: [100, 200]
使用匹配搜索获得最佳拟合

创建由 eye 和 poly 两种基本类型组成的感知字典。每个基类型的大小为 150 x 150。

using TyWavelet
using TyMath

A = sensingDictionary(; Size=150, Type=["eye", "poly"])

使用 subdict 对象函数从每个基类型中提取一个基向量。将向量之和乘以 2,创建一个信号。

indA = 20       # basis vector in "eye"
indB = 160       # basis vector in "poly"
btv = subdict(A, 1:150, [indA indB])
sig = 2 * sum(btv; dims=2)

使用感知字典 A 和默认设置下的匹配追寻算法获取最佳拟合信号。

Xr, YI, I, R = matchingPursuit(A, sig);
@show norm(sig - YI)
norm(sig - YI) = 6.169305954983892e-9

检查索引。

@show I
I = 2-element Vector{Int64}:
  20
 160

检查系数。

@show Xr[I]
Xr[I] = 2-element Vector{Float64}:
 2.000000006169306
 1.9999999999999998