Matlab DWT H-level



我试图实现一些水印算法发现在论文1。这是纸上的一行:

对所有重新编号的片段进行h级DWT。

然后在仿真部分作者解释了实验中使用的小波。

DWT变换采用常用小波"Daubechies-1",能级H =3 .

我只是不明白H是什么意思,我如何在matlab DWT函数中输入H=3 ?

我的实际代码是:

[cA,cD] = dwt(audio,'db3');

有人能帮帮我吗?


1Ji, y &;一种基于DWT-DCT的量化音频水印算法。多媒体,计算机图形和广播339-344 (2011)

1。问:"H (level)是什么意思?"

A:维基百科很好地描述了这个概念,但我将尝试总结一下。对于每一层,将数据(第1层为原始数据,否则为前一层的近似数据)分解为近似数据和详细数据。结果是描述不同频带数据的系数。

2。问:如何在matlab DWT函数中输入H=3 ?

A:正如你所指出的,他们正在使用db1。为了提取层级H=3的正确系数,我们需要实现这个级联算法。下面是代码的草图。
nLevels = 3;
% Get the coefficients for level 1
[cA,cD{1}] = dwt(audio,'db1');
% Continue to cascade to get additional coefficients at each level
for n = 2:nLevels
   [cA,cD{n}] = dwt(cA,'db1');
end
% Final coefficients are cA from highest level and cD from each level

您的问题已经被kl3755很好地回答了,尽管提供的解决方案可以进一步改进。对于多级小波变换,不使用dwt命令,而使用wavedec:

H = 3;
[cA, cD] = wavedec(audio, H, 'db1');

daubecies -1是Haar小波。它是低通滤波器h和高通滤波器g的组合

>> s = sqrt(2);
>> h = [1  1] / s;
>> g = [1 -1] / s;

要查看dwt的实际操作,可以创建一个信号

>> x = (1:64) / 64;
>> y = humps(x) - humps(0);

和@kl3755说,你需要应用它3次:
-每次迭代,DWT返回
低通滤波信号(近似值)
高通滤波信号(细节)
-每次下一次迭代都应用于之前的近似
术语dwt是模棱两可的——它通常用于快速小波变换fwt,它在每次迭代中将采样近似值和细节降低2倍。由于它是最常用的版本,我们在这里执行FWT:

>> c1 = filter (h, s, y);                % level 1 approximation
>> d1 = filter (g, s, y);                % level 1 detail
>> c1 = c1 (2:2:end); d1 = d1 (2:2:end); % downsample
>> c2 = filter (h, s, c1);               % level 2 approximation
>> d2 = filter (g, s, c1);               % level 2 detail
>> c2 = c2 (2:2:end); d2 = d2 (2:2:end); % downsample
>> c3 = filter (h, s, c2);               % level 3 approximation
>> d3 = filter (g, s, c2);               % level 3 detail
>> c3 = c3 (2:2:end); d3 = d3 (2:2:end); % downsample

很容易看出如何编写这个递归。fwt输出通常只使用最终近似值(c3)和细节信号:

>> fwt_y_3 = [c3 d3 d2 d1];

fwt表示的"魔力"在于,在反转过滤器后,您可以通过与上述相同的方式过滤和上采样来重建原始图像:

>> g=reverse(g); % h is symmetric
>> d3 (2,:) = 0; d3 = d3 (:)';                     % upsample d3
>> c3 (2,:) = 0; c3 = c3 (:)';                     % upsample c3
>> r2 = filter (h, 1/s, c3) + filter (g, 1/s, d3); % level 2 reconstruction
>> d2 (2,:) = 0; d2 = d2 (:)';                     % upsample d2
>> r2 (2,:) = 0; r2 = r2 (:)';                     % upsample r2
>> r1 = filter (h, 1/s, r2) + filter (g, 1/s, d2); % level 1 reconstruction
>> d1 (2,:) = 0; d1 = d1 (:)';                     % upsample d1
>> r1 (2,:) = 0; r1 = r1 (:)';                     % upsample r1
>> ry = filter (h, 1/s, r1) + filter (g, 1/s, d1); % reconstruction of y

检查是否一切正常:

>> subplot(2,2,1);plot([y' 80+ry']);          
>> subplot(2,2,2);plot([c1' 80+r1(1:2:end)']);
>> subplot(2,2,3);plot([c2' 80+r2(1:2:end)']);
>> subplot(2,2,4);plot(fwt_y_3);hold on;plot(80+c3(1:2:end));hold off

名称dwt可能指的是不同版本的未消差小波变换。fwt要快得多,而且不冗余,但它的主要缺点是它不是移位不变性的:你不能通过重构y的移位fwt来移位y。1. 连续小波变换cwt如上所示,但没有上下采样
 参见dl.acm.org/citation.cfm?id=603242.603246
2. "循环纺纱"或"& grave;tros变换进行子采样,但在每个级别上对所有可能的移位执行子采样。
 看到dl.acm.org/citation.cfm ? id = 1746851

相关内容

  • 没有找到相关文章

最新更新