【问题标题】:High error due to resample function in MATLAB由于 MATLAB 中的重采样函数导致的高错误
【发布时间】:2015-01-06 11:31:45
【问题描述】:

我正在使用 MATLAB 中的神经网络训练信号小波变换的输出。所以我决定使用3db4 滤波器进行小波变换。我使用了 240 元素的数组,经过小波变换后,我得到了一个数组 l

l = [36;36;65;123;240]

现在,由于我必须训练我的神经网络,我必须将长度为 36, 36, 65, 123 的小波变换重新采样为 240 个元素的数组。

所以我所做的是,我对信号进行了小波变换。我将每个小波变换重新采样到240 点,然后分别将小波重新采样到36, 36, 65, 123 点。我收到了20.2668 的错误。可以做些什么来减少错误?

我使用以下命令使用 MATLAB 重新采样:

[c1, l] = wavedec(signal, 3, 'db4');

c1a = c1(1:l(1));
c1a = resample(c1a, length(signal), length(c1a));

c1b = c1(1+l(1):l(1)+l(2));
c1b = resample(c1b, length(signal), length(c1b));

c1c = c1(1+l(1)+l(2):l(1)+l(2)+l(3));
c1c = resample(c1c, length(signal), length(c1c));

c1d = c1(1+l(1)+l(2)+l(3):l(1)+l(2)+l(3)+l(4));
c1d = resample(c1d, length(signal), length(c1d));

c2a = resample(c1a, l(1), length(c1a));
c2b = resample(c1b, l(2), length(c1b));
c2c = resample(c1c, l(3), length(c1c));
c2d = resample(c1d, l(4), length(c1d));

X = waverec([c2a; c2b; c2c; c2d], l, 'db4');
err = norm(X-signal)

现在,错误err报告为

err = 20.26688

我可以做些什么来减少这个错误? 请帮忙:)

重采样和原始后小波变换的数据图为:

【问题讨论】:

  • 为什么必须将小波重新采样到 240。请解释一下我不熟悉 NN
  • @Katmal:实际上我有一个价格和需求数据。所以我做了价格的小波变换。现在小波变换后,我必须为小波变换得到的每个序列训练一个神经网络,它以需求为输入,以价格为输出。所以我需要将每个系列转换为 240 个元素的系列,因为我有一个 240 个元素的需求数组。
  • @Kamtal:我认为 waverec 接受行向量和列向量。我没有收到此错误。这是因为它们都是列向量。 X = waverec([c2a', c2b', c2c', c2d'], l, 'db4')';错误=规范(X-价格1)。这也会返回与 20.2668 相同的错误。
  • 我认为你的数据有很多高频成分。样品顺序对您来说重要吗?
  • 一个问题。您想将小波系数重新采样为 240,以便它们代表数据的一个特征,对吗?例如c1a(212)signal(212) 的功能?如果这就是你想要做的,那就不对了。

标签: matlab signal-processing wavelet-transform


【解决方案1】:

如果你想将所有小波系数重新采样到你的信号长度240,然后将它们用作分类的特征,据我所知,这是错误的,因为小波系数就像频率分量,你可以' t 将它们分配给时域样本。

我的建议是用不同的小波系数组合重构你的信号,这样你就会有一个时域的信号,然后你可以把它用作特征。

我提供了一个例子,

X = sin(rand(1,240)).*sin(5*linspace(0,2*pi,240));
subplot(5,1,1)
plot (X); title ('Original Signal');
[C, L] = wavedec(X, 3, 'db4');
C1 = C; C2 = C; C3 = C; C4 = C;
C1(L(1)+1:end) = 0;
X1 = waverec(C1, L, 'db4');
subplot(5,1,2)
plot(X1);title ('A3');
C2(1:L(1)) = 0;
C2(L(1)+L(2)+1:end) = 0;
X2 = waverec(C2, L, 'db4');
subplot(5,1,3)
plot(X2); title ('D3');
C3(1:L(1)+L(2)) = 0;
C3(L(1)+L(2)+L(3)+1:end) = 0;
X3 = waverec(C3, L, 'db4');
subplot(5,1,4)
plot(X3); title ('D2');
C4(1:L(1)+L(2)+L(3)) = 0;
C4(L(1)+L(2)+L(3)+L(4)+1:end) = 0;
X4 = waverec(C4, L, 'db4');
subplot(5,1,5)
plot(X4); title ('D1');

给出长度为2404信号可以用作特征。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-23
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多