2014-11-10 2 views
1

Я работаю над подготовкой вывода вейвлет-преобразования сигнала с использованием нейронной сети в MATLAB. Поэтому я решил использовать фильтр 3db4 для его вейвлет-преобразования. Я использовал массив из 240 элементов и после преобразования Вейвлета, я получаю массив lВысокая ошибка из-за функции resample в MATLAB

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 

Что я могу сделать, чтобы уменьшить эту ошибку? Пожалуйста, помогите :)

Участок данных для вейвлет-преобразования после передискретизации как и оригинал: Image showing both the original and resampled signals

+0

Почему вы должны ресэмплировать вейвлетов 240. пожалуйста, объясните более я не знаком с Н. – Rashid

+0

@Katmal: На самом деле я имею данные о цене и спросе. Так что я сделал вейвлет-преобразование цены. Теперь, после вейвлет-преобразования, мне приходится обучать нейронную сеть для каждой серии, полученной вейвлет-преобразованием, которая требует спроса в качестве входного сигнала и дает цену как результат. Поэтому мне нужно преобразовать каждую серию в 240 серий элементов, так как у меня есть массив запросов из 240 элементов. –

+0

@ Kamtal: Я думаю, что waverec принимает как строку, так и векторный столбец. Я не получаю эту ошибку. Это потому, что все они являются векторами столбцов. X = waverec ([c2a ', c2b', c2c ', c2d'], l, 'db4') '; err = норма (X-цена1). Это также возвращает ту же ошибку, что и 20.2668. –

ответ

1

Если вы хотите ресэмплировать все вейвлет-коэффициентов к вашей длине сигнала, 240, а затем использовать их в качестве признаков для насколько мне известно, это неверно, потому что вейвлет-коэффициенты подобны частотным компонентам, и вы не можете назначить их для образцов временной области.

Я предлагаю восстановить сигнал с различными комбинациями вейвлет-коэффициентов, поэтому у вас будет сигнал во временной области, тогда вы можете использовать его как функцию.

Я привел пример,

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'); 

дает 4 сигналы все с длиной 240, которые могут быть использованы в качестве признаков.

enter image description here

+0

Большое спасибо за это исследование и этот ответ. Престижность вашей работы. Спасибо большое :) :) Возможно, я мог бы сделать еще несколько вариантов ответа для этого ответа. :) –

+0

@AbhinavAggarwal, приветствую вас, я рад, что это помогло. – Rashid