Перейти к содержанию
    

IDWT/DWT Simulink

Всем привет,

 

В Simulink собрал схему вейвлет-преобразования. Но есть нюанс: она не работает =) Значения на выходе связки idwt-dwt не соответствуют тому, что подается на вход.

Базис: добеши 6го порядка.

Сама схема:

scheme.thumb.jpg.3ef073ba06ed3642e4a5142d85b28b0f.jpg

Графики: Входные данные + два оба выхода DWT:

graphs.jpg.33638b1ed221f545e443a1f4b990abe8.jpg

Со снижением базиса вейвлет-преобразования выходные данные становятся более похожими на исходный сигнал. Но почему с базисами бОльшей длины (4-6-8) все ломается? По теории же это преобразование обратимо и не должно зависит от базиса?

При подачи константы на вход видно, что после выхода фильтров в режим (20 отсчетов) результат преобразования соответствует входным данным (константе = 1).

graphs_const.jpg.2ed3e07ed9b64b6e0ce9c382ece70857.jpg

Тогда почему в первом случае, после 20 отсчетов значения на выходе не соответствуют значениям на входе?

 

Знающие, подскажите, пожалуйста, что я делаю не так? Почему значения по выходу не соответствуют значениям по входу?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 часов назад, nice_vladi сказал:

Знающие, подскажите, пожалуйста, что я делаю не так?

Может быть не в той последовательности применяете блоки преобразования? Рекомендую попробовать связку dwt-idwt, это должно решить все проблемы:) 

 

18 часов назад, nice_vladi сказал:

Тогда почему в первом случае, после 20 отсчетов значения на выходе не соответствуют значениям на входе?

Банальное наложение спектров, ограничьте полосу входного сигнала до частоты хотя бы 0.1*Fs и будете приятно удивлены. И да, Вы уверены, что теория говорит про обратимость именно для связки idwt-dwt? У меня есть сомнения на этот счет...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 5/3/2019 at 7:44 AM, nice_vladi said:

Значения на выходе связки idwt-dwt не соответствуют тому, что подается на вход.

Базис: добеши 6го порядка.

 

 

По-моему в результате dwt сигнал делится по частоте на "ВЧ" и "НЧ" в базисе вавелет.

Не знаю что там может измениться от порядка...

 

Но подайте на НЧ вход  idwt в два раза медленную последовательность, а на ВЧ - 0.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 5/4/2019 at 6:22 AM, Самурай said:

Может быть не в той последовательности применяете блоки преобразования? Рекомендую попробовать связку dwt-idwt, это должно решить все проблемы:) 

 

Банальное наложение спектров, ограничьте полосу входного сигнала до частоты хотя бы 0.1*Fs и будете приятно удивлены. И да, Вы уверены, что теория говорит про обратимость именно для связки idwt-dwt? У меня есть сомнения на этот счет... 

Спасибо. Действительно, при соединении dwt-idwt - восстановление полное, это понятно. Однако такая штука - анализ сигнала (разложение на ВЧ и НЧ и восстановление по ним). Я же пытаюсь использовать вейвлет немного для других целей.

Хочу сделать в симулинк вот так:

Screenshot_2019-05-06_12-58-44.png.4dc26b55ee0fdd2eed0d45270622edcc.png

Для этого хочу примерно вот такую схему:

Screenshot_2019-05-06_13-02-18.png.9f4322b9518a6b979285bd3c6d5dc1bd.png

Обе картинки взял отсюда:

http://shodhganga.inflibnet.ac.in/bitstream/10603/141313/12/12_chapter 4.pdf

Считаю, раз люди публикуют статью - в ней более-менее достоверная информация = я что-то делаю не так. В матлабе (скриптом) такую модель собрал, описал, увидел, что работает. Интересно собрать именно в симулинке. И вот тут столкнулся с непониманием того, как это работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 5/4/2019 at 6:14 PM, _4afc_ said:

Но подайте на НЧ вход  idwt в два раза медленную последовательность, а на ВЧ - 0.

Я пытался изменять sample time источника данных, но пока не пришел к улучшению результата. Ощущение, что недопонимаю какую-то мелочь, которая определяющая =)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, nice_vladi said:

 В матлабе (скриптом) такую модель собрал, описал, увидел, что работает. Интересно собрать именно в симулинке. И вот тут столкнулся с непониманием того, как это работает.

Тогда я - пас. Думал алгоритм вообще не работает... С симулинком не дружу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

nice_vladi

Хочу сделать в симулинк вот так:

А для обычной OFDM так в симулинке уже сделано?

Считаю, раз люди публикуют статью - в ней более-менее достоверная информация

Слишком оптимистично, данная статья довольно сомнительная. ИМХО

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, petrov said:

nice_vladi

Хочу сделать в симулинк вот так:

А для обычной OFDM так в симулинке уже сделано?

Считаю, раз люди публикуют статью - в ней более-менее достоверная информация

Слишком оптимистично, данная статья довольно сомнительная. ИМХО

  

> А для обычной OFDM так в симулинке уже сделано?

Да, IFFT-FFT - без проблем.

> Слишком оптимистично, данная статья довольно сомнительная. ИМХО

Я просмотрел не одну (не один десяток) статей на подобные темы. В целом, везде структурная схема схожа. Опять же, в матлаб скриптах у меня получилось собрать дерево idwt-dwt, которое работает так, как мне надо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

nice_vladi

Да, IFFT-FFT - без проблем.

В конце-концов можно сделать на простых элементарных блоках, ведь DFT,DWT - всего лишь фильтры.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Upd:

Приложу кусок скрипта матлаба

dat = ones(1, 64);

res_idwt = idwt(dat(1, 1:2:end), dat(1, 2:2:end), 'db6');
res_dwt = dwt(res_idwt, 'db6');

hold on;
plot(dat(1, 1:end), 'x-r');
plot(res_dwt, 'o-b');
hold off;

В результате вижу:

photo_2019-05-06_19-26-45.jpg.08e46435a49f116b530b6c34c4faf743.jpg

По краям есть куски явно битые (выход фильтров в режим, наскольк я понимаю). Центр - восстанавливается верно.

Почему это не работает в симулинк?

1 minute ago, petrov said:

nice_vladi

Да, IFFT-FFT - без проблем.

В конце-концов можно сделать на простых элементарных блоках, ведь DFT,DWT - всего лишь фильтры.

Хочется же просто кубиков набросать - и все работает =))

Во всяком случае, я рассчитывал, что мне не придется собирать из кучи кубиков собственный вариант преобразования. Но, судя по всему, придется. Посмотрим, что выйдет из этого.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

38 minutes ago, nice_vladi said:

Upd:

Приложу кусок скрипта матлаба


dat = ones(1, 64);

res_idwt = idwt(dat(1, 1:2:end), dat(1, 2:2:end), 'db6');
res_dwt = dwt(res_idwt, 'db6');

hold on;
plot(dat(1, 1:end), 'x-r');
plot(res_dwt, 'o-b');
hold off;

 

 

А результат с   dat = rand(1, 64);  вас точно устраивает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 hours ago, _4afc_ said:

 

А результат с   dat = rand(1, 64);  вас точно устраивает?

Да, я что-то спутал. Попозже разберусь и выложу правильный кусок.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

21 hours ago, _4afc_ said:

 

А результат с   dat = rand(1, 64);  вас точно устраивает?

Действительно, немного поспешил, извиняюсь. Забыл про децимацию, после прямого преобразования. Правильно смотреть вот так:

dat = rand(1, 64);

res_idwt = idwt(dat(1, 1:2:end), dat(1, 2:2:end), 'db6');
[res_dwt0, res_dwt1] = dwt(res_idwt, 'db6');

hold on;
plot(dat(1, 1:2:end), 'x-r');
plot(res_dwt0(1, 1:end), 'o-b');
hold off;

Тогда получаем:

res.jpg.26693f2f9a58550039e3b46c8e82f1c1.jpg
То, о чем я говорил: есть битые куски данных в начале/конце массива, но центральные элементы восставнавливаются правильно.

От симулинка подобного графика добиться не получается. На текущий момент убрал симулинковские idwt-dwt блоки и попробовал Two-Channel Synthesis Subband Filter, прописал ИХ фильтров руками, в соответствии со скриптовыми. Тоже ничего хорошего не увидел. Постепенно спускаюсь ниже - скоро действительно самопальные модельки в симулинке буду делать =))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Был не совсем прав, связка idwt-dwt вполне обратима и обеспечивает полное восстановление сигнала. Но, нужно выполнение нескольких условий... Одно из них: суммарная задержка фильтров idwt-dwt должна быть кратна низкой входной/выходной частоте, иначе наложения спектров таки есть. Для вейвлетов Добеши это условие не выполняется. Решение тривиально – дополнительная задержка между блоками:

image.png.68104b330ab54259d58a74504f7cc16f.png

 

К слову, в функции Matlab-а dwt эта задержка неявно присутствует (похоже всегда), отсюда расхождения результатов.

Прикрепил еще статью, где этот вопрос немного рассматривается.

Perfect Transmultiplexers, Vetterli, 1986 (Vetterli86a).pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 hours ago, Самурай said:

Решение тривиально ...

Спасибо. Внес задержку между преобразованиями - все восстанавливается, проблема закрыта. Решение, действительно, тривиально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...