# 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 创建感知字典。
# 对象函数
| 函数 | 说明 |
| 使用匹配追踪算法恢复稀疏信号 | |
| 使用基追踪算法恢复稀疏信号 | |
| horzcat | 两个感知字典的横向连接 |
| 从感知字典中提取子矩阵 |
# 示例
创建感知字典
创建感知字典,该字典是第 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