Ivan55 0 22 апреля, 2014 Опубликовано 22 апреля, 2014 (изменено) · Жалоба Всем здрасти! Проблема вот в чем... Осуществил корреляцию префикса определил по положению пика смещение во временной области, по фазе оценил смещение по частоте. Решил сначала провести временную синхронизацию, взял полученную оценку и последующие входные отсчеты сместил(точнее взял больше отсчетов сигнала и подвинул) на ее величину... Но после этого посыпалась корреляция префикса Кто знает в чем может быть проблема? Изменено 22 апреля, 2014 пользователем Ivan55 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KalashKS 0 22 апреля, 2014 Опубликовано 22 апреля, 2014 · Жалоба Всем здрасти! Проблема вот в чем... Осуществил корреляцию префикса определил по положению пика смещение во временной области, по фазе оценил смещение по частоте. Решил сначала провести временную синхронизацию, взял полученную оценку и последующие входные отсчеты сместил(точнее взял больше отсчетов сигнала и подвинул) на ее величину... Но после этого посыпалась корреляция префикса Кто знает в чем может быть проблема? Из вашего описания не совсем ясно, что и как вы сделали. Покажите свою модель, если есть возможность. Или более подробно распишите что и куда вы двигали. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan55 0 22 апреля, 2014 Опубликовано 22 апреля, 2014 (изменено) · Жалоба Из вашего описания не совсем ясно, что и как вы сделали. Покажите свою модель, если есть возможность. Или более подробно распишите что и куда вы двигали. [inSignal Fs] = wavread('Signal.wav'); % Запись OFDM сигнала NumInSamples = length(InSignal); % Колличество отсчетов входного сигнала NumBlocks = floor(NumInSamples/Ns); % Колличество блоков OFDM DetectiontBuffer = zeros(1, 2*Ns); for n = 1:NumBlocks DetectiontBuffer(1:end-Ns) = DetectiontBuffer(Ns+1:end); % Сдвигаем входной буфер DetectiontBuffer(end-Ns+1:end) = InSignal(((n-1)*Ns+1:n*Ns) - shiftTime); % Записываем следующий OFDM символ ...... ...... end; shiftTime - это оценка смещения пика корреляции префикса в отсчетах DetectiontBuffer размером двух OFDM символов поиск корреляции осуществляется в первой половине буфера ну так вот... когда не добавляю shiftTime при записи в буфер корреляция работает и производит оценку смещения времени, а когда добавляю shiftTime при записи в буфер пик постоянно уплывает... По идее он же должен сдвинуться и в последующем оставаться на месте Изменено 22 апреля, 2014 пользователем Ivan55 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KalashKS 0 22 апреля, 2014 Опубликовано 22 апреля, 2014 · Жалоба [inSignal Fs] = wavread('Signal.wav'); % Запись OFDM сигнала NumInSamples = length(InSignal); % Колличество отсчетов входного сигнала NumBlocks = floor(NumInSamples/Ns); % Колличество блоков OFDM DetectiontBuffer = zeros(1, 2*Ns); for n = 1:NumBlocks DetectiontBuffer(1:end-Ns) = DetectiontBuffer(Ns+1:end); % Сдвигаем входной буфер DetectiontBuffer(end-Ns+1:end) = InSignal(((n-1)*Ns+1:n*Ns) - shiftTime); % Записываем следующий OFDM символ ...... ...... end; shiftTime - это оценка смещения пика корреляции префикса в отсчетах DetectiontBuffer размером двух OFDM символов поиск корреляции осуществляется в первой половине буфера ну так вот... когда не добавляю shiftTime при записи в буфер корреляция работает и производит оценку смещения времени, а когда добавляю shiftTime при записи в буфер пик постоянно уплывает... По идее он же должен сдвинуться и в последующем оставаться на месте Так, как написано у вас, может быть и заработает. Проверьте знак обратной связи (знак перед shift_time). И сам расчет необходимого сдвига. Еще мне не нравится то, что при изменении shift_time у вас произойдет повторение, или пропуск отсчетов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan55 0 25 апреля, 2014 Опубликовано 25 апреля, 2014 (изменено) · Жалоба Так, как написано у вас, может быть и заработает. Проверьте знак обратной связи (знак перед shift_time). Ну чет с изменением знака не помогло... ...И сам расчет необходимого сдвига. ну это же поиск индекса максимума корреляции защитного интервала(без shift_time то работает, а когда его добавляю уровень пиков падает) в соответствии с тем на сколько отсчетов сдвинут максимум пика на столько и сдвигаем входной буфер, или там не все так просто? много где пишут как считать сдвиг а как проводить синхру не пишут, останавливаются на том что типо вот "положение пика это смещение во временной области, а его фаза это смещение по частоте." Еще мне не нравится то, что при изменении shift_time у вас произойдет повторение, или пропуск отсчетов. а как же без этого? если есть варианты скажите, мне было бы интересно промоделить:) Изменено 25 апреля, 2014 пользователем Ivan55 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ASN 0 26 апреля, 2014 Опубликовано 26 апреля, 2014 · Жалоба Ivan55 Не совсем понятно как у Вас сделано. IMHO, входные отсчёты во буфере сдвига (символьном) должны двигаться всегда на одинаковое количество отсчётов. А вот копировать из буфера нужно в демодулятор с границы интервала интегрирования. Может возникнуть проблема из-за разности тактовых генераторов передатчика и приёмника, когда пики начнут плавно двигаться (появляться раньше относительно предыдущего или позже), но это отдельная тема. Выделения границ интервала ортогональности лучше определять по нескольким символам. В простейшем случае обыкновенным усреднением. Автокорреляционная функция, естественно, комплексная. И по ней можно отследить рассинхронизацию по частоте. Но только в достаточно узком диапазоне. Для увеличения диапазона и более быстрой подстройки систем АПЧ и АПТЧ используйте или пилоты (символы или каналы), или итеративную обработку (если целостность сообщения контролируется CRC). Всё вышеизложенное - это только самые-самые основы. Дальше будет гораздо интереснее. :) Вообще, литературы по OFDM - море. Удачи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KalashKS 0 28 апреля, 2014 Опубликовано 28 апреля, 2014 · Жалоба Есть подозрение, что вы что-то двигаете неправильно и у вас коррелированный отрезок выпадает из усреднения. Когда я был совсем маленький, писал на эту тему статью в меру своего студенческого понимания. Может быть поможет http://dsol.ru/uploads/pdf/dspa_2.pdf. Знатокам просьба сильно не пинать. Общее пожелание - считайте КФ потоком без разрывов на умножителе и скользящем усреднителе, а на выходе ищите пики. Если рассинхронизации по клоку нет, то пик будет всегда в окрестности нужной точки. Если клоки разные - пик будет плыть и за ним надо будет следить. Но пока сделайте поиск постоянного пика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan55 0 28 апреля, 2014 Опубликовано 28 апреля, 2014 · Жалоба Есть подозрение, что вы что-то двигаете неправильно и у вас коррелированный отрезок выпадает из усреднения. ну да чет я затупил... Когда я был совсем маленький, писал на эту тему статью в меру своего студенческого понимания. Может быть поможет http://dsol.ru/uploads/pdf/dspa_2.pdf. Спасибо) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться