nice_vladi 2 3 мая, 2019 Опубликовано 3 мая, 2019 · Жалоба Всем привет, В Simulink собрал схему вейвлет-преобразования. Но есть нюанс: она не работает =) Значения на выходе связки idwt-dwt не соответствуют тому, что подается на вход. Базис: добеши 6го порядка. Сама схема: Графики: Входные данные + два оба выхода DWT: Со снижением базиса вейвлет-преобразования выходные данные становятся более похожими на исходный сигнал. Но почему с базисами бОльшей длины (4-6-8) все ломается? По теории же это преобразование обратимо и не должно зависит от базиса? При подачи константы на вход видно, что после выхода фильтров в режим (20 отсчетов) результат преобразования соответствует входным данным (константе = 1). Тогда почему в первом случае, после 20 отсчетов значения на выходе не соответствуют значениям на входе? Знающие, подскажите, пожалуйста, что я делаю не так? Почему значения по выходу не соответствуют значениям по входу? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Самурай 12 3 мая, 2019 Опубликовано 3 мая, 2019 · Жалоба 18 часов назад, nice_vladi сказал: Знающие, подскажите, пожалуйста, что я делаю не так? Может быть не в той последовательности применяете блоки преобразования? Рекомендую попробовать связку dwt-idwt, это должно решить все проблемы:) 18 часов назад, nice_vladi сказал: Тогда почему в первом случае, после 20 отсчетов значения на выходе не соответствуют значениям на входе? Банальное наложение спектров, ограничьте полосу входного сигнала до частоты хотя бы 0.1*Fs и будете приятно удивлены. И да, Вы уверены, что теория говорит про обратимость именно для связки idwt-dwt? У меня есть сомнения на этот счет... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 26 4 мая, 2019 Опубликовано 4 мая, 2019 · Жалоба On 5/3/2019 at 7:44 AM, nice_vladi said: Значения на выходе связки idwt-dwt не соответствуют тому, что подается на вход. Базис: добеши 6го порядка. По-моему в результате dwt сигнал делится по частоте на "ВЧ" и "НЧ" в базисе вавелет. Не знаю что там может измениться от порядка... Но подайте на НЧ вход idwt в два раза медленную последовательность, а на ВЧ - 0. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nice_vladi 2 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба On 5/4/2019 at 6:22 AM, Самурай said: Может быть не в той последовательности применяете блоки преобразования? Рекомендую попробовать связку dwt-idwt, это должно решить все проблемы:) Банальное наложение спектров, ограничьте полосу входного сигнала до частоты хотя бы 0.1*Fs и будете приятно удивлены. И да, Вы уверены, что теория говорит про обратимость именно для связки idwt-dwt? У меня есть сомнения на этот счет... Спасибо. Действительно, при соединении dwt-idwt - восстановление полное, это понятно. Однако такая штука - анализ сигнала (разложение на ВЧ и НЧ и восстановление по ним). Я же пытаюсь использовать вейвлет немного для других целей. Хочу сделать в симулинк вот так: Для этого хочу примерно вот такую схему: Обе картинки взял отсюда: http://shodhganga.inflibnet.ac.in/bitstream/10603/141313/12/12_chapter 4.pdf Считаю, раз люди публикуют статью - в ней более-менее достоверная информация = я что-то делаю не так. В матлабе (скриптом) такую модель собрал, описал, увидел, что работает. Интересно собрать именно в симулинке. И вот тут столкнулся с непониманием того, как это работает. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nice_vladi 2 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба On 5/4/2019 at 6:14 PM, _4afc_ said: Но подайте на НЧ вход idwt в два раза медленную последовательность, а на ВЧ - 0. Я пытался изменять sample time источника данных, но пока не пришел к улучшению результата. Ощущение, что недопонимаю какую-то мелочь, которая определяющая =) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 26 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба 1 hour ago, nice_vladi said: В матлабе (скриптом) такую модель собрал, описал, увидел, что работает. Интересно собрать именно в симулинке. И вот тут столкнулся с непониманием того, как это работает. Тогда я - пас. Думал алгоритм вообще не работает... С симулинком не дружу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 7 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба nice_vladi Хочу сделать в симулинк вот так: А для обычной OFDM так в симулинке уже сделано? Считаю, раз люди публикуют статью - в ней более-менее достоверная информация Слишком оптимистично, данная статья довольно сомнительная. ИМХО Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nice_vladi 2 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба 1 hour ago, petrov said: nice_vladi Хочу сделать в симулинк вот так: А для обычной OFDM так в симулинке уже сделано? Считаю, раз люди публикуют статью - в ней более-менее достоверная информация Слишком оптимистично, данная статья довольно сомнительная. ИМХО > А для обычной OFDM так в симулинке уже сделано? Да, IFFT-FFT - без проблем. > Слишком оптимистично, данная статья довольно сомнительная. ИМХО Я просмотрел не одну (не один десяток) статей на подобные темы. В целом, везде структурная схема схожа. Опять же, в матлаб скриптах у меня получилось собрать дерево idwt-dwt, которое работает так, как мне надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 7 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба nice_vladi Да, IFFT-FFT - без проблем. В конце-концов можно сделать на простых элементарных блоках, ведь DFT,DWT - всего лишь фильтры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nice_vladi 2 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба 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; В результате вижу: По краям есть куски явно битые (выход фильтров в режим, наскольк я понимаю). Центр - восстанавливается верно. Почему это не работает в симулинк? 1 minute ago, petrov said: nice_vladi Да, IFFT-FFT - без проблем. В конце-концов можно сделать на простых элементарных блоках, ведь DFT,DWT - всего лишь фильтры. Хочется же просто кубиков набросать - и все работает =)) Во всяком случае, я рассчитывал, что мне не придется собирать из кучи кубиков собственный вариант преобразования. Но, судя по всему, придется. Посмотрим, что выйдет из этого. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 26 6 мая, 2019 Опубликовано 6 мая, 2019 · Жалоба 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); вас точно устраивает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nice_vladi 2 7 мая, 2019 Опубликовано 7 мая, 2019 · Жалоба 15 hours ago, _4afc_ said: А результат с dat = rand(1, 64); вас точно устраивает? Да, я что-то спутал. Попозже разберусь и выложу правильный кусок. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nice_vladi 2 7 мая, 2019 Опубликовано 7 мая, 2019 · Жалоба 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; Тогда получаем: То, о чем я говорил: есть битые куски данных в начале/конце массива, но центральные элементы восставнавливаются правильно. От симулинка подобного графика добиться не получается. На текущий момент убрал симулинковские idwt-dwt блоки и попробовал Two-Channel Synthesis Subband Filter, прописал ИХ фильтров руками, в соответствии со скриптовыми. Тоже ничего хорошего не увидел. Постепенно спускаюсь ниже - скоро действительно самопальные модельки в симулинке буду делать =)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Самурай 12 13 мая, 2019 Опубликовано 13 мая, 2019 · Жалоба Был не совсем прав, связка idwt-dwt вполне обратима и обеспечивает полное восстановление сигнала. Но, нужно выполнение нескольких условий... Одно из них: суммарная задержка фильтров idwt-dwt должна быть кратна низкой входной/выходной частоте, иначе наложения спектров таки есть. Для вейвлетов Добеши это условие не выполняется. Решение тривиально – дополнительная задержка между блоками: К слову, в функции Matlab-а dwt эта задержка неявно присутствует (похоже всегда), отсюда расхождения результатов. Прикрепил еще статью, где этот вопрос немного рассматривается. Perfect Transmultiplexers, Vetterli, 1986 (Vetterli86a).pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nice_vladi 2 14 мая, 2019 Опубликовано 14 мая, 2019 · Жалоба 18 hours ago, Самурай said: Решение тривиально ... Спасибо. Внес задержку между преобразованиями - все восстанавливается, проблема закрыта. Решение, действительно, тривиально. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться