【问题标题】:Matlab DWT H-levelMatlab DWT H级
【发布时间】:2013-03-21 04:35:55
【问题描述】:

我正在尝试实现在一篇论文中找到的一些水印算法1。这是论文的一行:

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

然后在模拟部分作者解释了用于实验的小波。

DWT 变换采用普通小波“Daubechies-1”,H 级 = 3.

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

我的实际代码是:

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

有人可以帮我吗?


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

【问题讨论】:

  • 嘿,添加更多标签或点击dsp.stackexchange.com 可能会更成功。这听起来更像是一个信号处理问题,而不是 matlab 问题。
  • 我觉得你说得对,谢谢
  • 最明显的解决方案是什么——询问论文的作者?

标签: matlab wavelet dwt


【解决方案1】:

1.问:“H(等级)是什么意思?”

答:Wikipedia 很好地描述了这个概念,但我会尝试总结一下。对于每个级别,数据(级别 1 的原始数据,否则为前一级别的近似数据)被分解为近似数据和详细数据。结果是描述不同frequency bins中数据的系数。

2。 Q: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

【讨论】:

  • 我还认为 H=3 表示 Dauchebies 的第三个小波,但实际上他们使用 Dauchebies-1(在模拟章节中),我认为它是 matlab 中的 db1,不是吗?
  • +1:很好的答案,但 MATLAB 有 wavedec 用于多级 DWT。
  • 从论文中看不出使用了未抽取的 dwt——论文中所谓的 dwt 很可能是(在 matlab 术语中)fwt。这个paper 描述了一个类似的算法,它确实减少了更高级别的分解。
  • 很好的解释,现在我明白了。感谢您的时间和回答1
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    Daubechies-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. 'cycle spins' 或 'à trous' 变换进行二次采样,但在每个级别执行所有可能的移位。
    见 dl.acm.org/citation.cfm?id=1746851

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-11
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      相关资源
      最近更新 更多