Ivan55 0 2 ноября, 2016 Опубликовано 2 ноября, 2016 (изменено) · Жалоба Добрый день! Кто знаком с синхрой ОФДМ по тренировочной последовательности Park? Я написал код но он выдает ерунду, в графике метрики нету явно выраженного пика, как по теории... подскажите что я делаю не так clear all; clc; close all; %choose SNR level in dB SNR=100; %choose FFT length N_FFT=1024; %choose guard interval length as a percentage of N_FFT NGI=1/4; %choose number of used carriers N_used=N_FFT/2; N_GI=round(NGI*N_FFT); N=N_FFT+N_GI; Nsym = 100; %frequency offset nSTOs=-100; CFO=0; %% preamble Minn B=4; reS=(-1).^round(rand(1,round(N_FFT/B))); imS=(-1).^round(rand(1,round(N_FFT/B))); s1=reS+1i.*imS; s2=fliplr(s1); tx_signal_noGI=[s1 s2 conj(s1) conj(s2)]; %tx_signal=[tx_signal_noGI(:,N_FFT-N_GI+1:N_FFT) tx_signal_noGI]; tx_signal=tx_signal_noGI; N=N_FFT+N_GI; %% Time and frequency shift signal if nSTOs>=0, y_STO=[tx_signal(1,nSTOs+1:end) zeros(1,nSTOs)]; else y_STO=[zeros(1,-nSTOs) tx_signal(1,1:end+nSTOs)]; end nn=0:length(y_STO)-1; y_CFO_STO = y_STO.*exp(j*2*pi*CFO*nn/N_FFT); %% AWGN channel recvd_signal=awgn(y_CFO_STO, SNR, 'measured', 'dB'); %% Minn Len_all=N_FFT; %N_FFT or length(recvd_signal); recvd_signal_zeropad=[zeros(1,Len_all) recvd_signal zeros(1,Len_all) zeros(1,Len_all)]; for d=1:2*Len_all+Len_all/2+1, P_Park(d)=sum((recvd_signal_zeropad(d:d+Len_all/4)).*fliplr(recvd_signal_zeropad(d+Len_all/4:d+Len_all/2))); E_Park(d)=sum(abs(recvd_signal_zeropad(d:d+Len_all/2)).^2); end; Park_metric=(abs(P_Park).^2)./(E_Park).^2; plot(Park_metric) %timing estimation is [~, maxipos1]=max(Park_metric); t_est_Park=maxipos1-Len_all; Изменено 2 ноября, 2016 пользователем Ivan55 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
quato_a 3 2 ноября, 2016 Опубликовано 2 ноября, 2016 · Жалоба Как я понимаю, маппером должена быть сформировна преамбула в частотной области с наличием только четных поднесущих. Таким образом, после ifft во временой области получим символ с 2-мя повторяющимися частями [A B A B]. Затем уже преобразовать его в [A B -B* A*]. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KalashKS 0 2 ноября, 2016 Опубликовано 2 ноября, 2016 · Жалоба for d=1:2*Len_all+Len_all/2+1, P_Park(d)=sum(recvd_signal_zeropad(d+(1:Len_all/2)).*fliplr(recvd_signal_zeropad(d+Len_all/2+(1:Len_all/2)))); E_Park(d)=sum(abs(recvd_signal_zeropad(d+(1:Len_all))).^2); end; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan55 0 2 ноября, 2016 Опубликовано 2 ноября, 2016 · Жалоба for d=1:2*Len_all+Len_all/2+1, P_Park(d)=sum(recvd_signal_zeropad(d+(1:Len_all/2)).*fliplr(recvd_signal_zeropad(d+Len_all/2+(1:Len_all/2)))); E_Park(d)=sum(abs(recvd_signal_zeropad(d+(1:Len_all))).^2); end; Спасибо! Что то получилось) тока for d=1:2*Len_all+1 лишняя Len_all/2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan55 0 23 ноября, 2016 Опубликовано 23 ноября, 2016 (изменено) · Жалоба Добрый день всем! Подскажите пожалуйста как правильно измерить СКО оценки в многолучевом канале? например двух лучевом Изменено 23 ноября, 2016 пользователем Ivan55 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KalashKS 0 23 ноября, 2016 Опубликовано 23 ноября, 2016 · Жалоба Добрый день всем! Подскажите пожалуйста как правильно измерить СКО оценки в многолучевом канале? например двух лучевой СКО оценки чего, если не секрет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan55 0 23 ноября, 2016 Опубликовано 23 ноября, 2016 (изменено) · Жалоба СКО оценки чего, если не секрет? СКО оценки начала OFDM символа, т.е. временная синхра, нужно оценить ее эффективность в многолучевом канале Изменено 23 ноября, 2016 пользователем Ivan55 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KalashKS 0 23 ноября, 2016 Опубликовано 23 ноября, 2016 (изменено) · Жалоба Если оценивать только моделированием, то нужно обеспечить достаточный набор реализаций, чтобы учесть случайный характер канала. Если нужна аналитическая оценка, то точно не подскажу. Можно попробовать оценить СКО для канала с АГБШ, а потом доучесть помехи по боковым лепесткам от побочных пиков как дополнительную дисперсию шума. Изменено 23 ноября, 2016 пользователем KalashKS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan55 0 23 ноября, 2016 Опубликовано 23 ноября, 2016 · Жалоба а потом доучесть помехи по боковым лепесткам от побочных пиков как дополнительную дисперсию шума. вот я тоже про это думаю, а как это сделать чет не соображу к примеру у нас есть два луча сигнал переходит с луча на луч и время начала символа соответсвено скачет в зависимости от того какой щас луч преобладает Получается что измеряется СКО оценки+ СКО перехода с луча на луч, но ведь это не корректно... прием ведь мы ведем по тому лучу который щас преобладает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 8 23 ноября, 2016 Опубликовано 23 ноября, 2016 · Жалоба к примеру у нас есть два луча сигнал переходит с луча на луч и время начала символа соответсвено скачет в зависимости от того какой щас луч преобладает Получается что измеряется СКО оценки+ СКО перехода с луча на луч, но ведь это не корректно... прием ведь мы ведем по тому лучу который щас преобладает Не ведём, не должно ничего скакать, канал никогда резко не меняется, никаких привязок к преобладающим лучам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan55 0 23 ноября, 2016 Опубликовано 23 ноября, 2016 (изменено) · Жалоба Не ведём, не должно ничего скакать, канал никогда резко не меняется, никаких привязок к преобладающим лучам. ну да резко он не меняется, но вот максимум метрики меняется резко, т.е. в 2х лучевом метрика имеет два пика, по максимуму определяют начало символа, эти два пика медленно плавают по амплитуде и то один становится максимальным то другой... таким образом у меня максимум то 100 отсчет то 196 отсчет, СКО уже под сотню получается плавности нету, например 100 101 102 ... и уплыл на 196 Изменено 23 ноября, 2016 пользователем Ivan55 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 8 23 ноября, 2016 Опубликовано 23 ноября, 2016 · Жалоба ну да резко он не меняется, но вот максимум метрики меняется резко, т.е. в 2х лучевом метрика имеет два пика, по максимуму определяют начало символа, эти два пика медленно плавают по амплитуде и то один становится максимальным то другой... таким образом у меня максимум то 100 отсчет то 196 отсчет, СКО уже под сотню получается плавности нету, например 100 101 102 ... и уплыл на 196 Синхра негодная. ИМХО Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan55 0 23 ноября, 2016 Опубликовано 23 ноября, 2016 · Жалоба Синхра негодная. ИМХО да все они не айс)))))))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
petrov 8 23 ноября, 2016 Опубликовано 23 ноября, 2016 · Жалоба да все они не айс)))))))) Берите центр масс, в многолучёвом канале нет смысла в какой-то точной синхронизации по какому-то лучу, важно чтобы не скакало и все наложения символов оставались в пределах циклического префикса. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan55 0 14 декабря, 2016 Опубликовано 14 декабря, 2016 · Жалоба кто знает как в методе Parka правильно делается оценка сдвига частоты вот мой код: clear all; clc; close all; %choose SNR level in dB SNR=50:50; %choose FFT length N_FFT=1024; %choose guard interval length as a percentage of N_FFT NGI=1/4; %choose number of used carriers N_used=N_FFT/2; N_GI=round(NGI*N_FFT); Nofdm=N_FFT+N_GI; Nsym = 100; %frequency offset nSTOs=0; CFO=0.4; %% preamble Park B=2; reS=(-1).^round(rand(1,round(N_used/B))); imS=1i.*(-1).^round(rand(1,round(N_used/B))); s1=reS+imS; s2=fliplr(s1); tx_signal_noGI=[s1 s2 conj(s1) conj(s2)]; tx_signal = zeros(1,Nsym*N_FFT); tx_signal=repmat(tx_signal_noGI,1,Nsym); %% if nSTOs>=0, y_STO=[tx_signal(1,nSTOs+1:end) zeros(1,nSTOs)]; else y_STO=[zeros(1,-nSTOs) tx_signal(1,1:end+nSTOs)]; end nn=0:length(y_STO)-1; y_CFO_STO = y_STO.*exp(1i*2*pi*CFO*nn/N_FFT); %% AWGN channel for k = 1:length(SNR) recvd_signal=awgn(y_CFO_STO, SNR(k), 'measured', 'dB'); for n = 1:Nsym %% Minn Len_all=N_FFT; %N_FFT or length(recvd_signal); recvd_signal_zeropad=[zeros(1,Len_all) recvd_signal(1,(n-1)*Len_all+1:n*Len_all) zeros(1,Len_all) zeros(1,Len_all)]; for d=1:2*Len_all+1 P_Park(d)=sum(recvd_signal_zeropad(d+(1:Len_all/2)).*fliplr(recvd_signal_zeropad(d+Len_all/2+(1:Len_all/2)))); E_Park(d)=sum(abs(recvd_signal_zeropad(d+(1:Len_all))).^2); Q_Park(d)=sum(conj(recvd_signal_zeropad(d+(1:Len_all/2))).*(recvd_signal_zeropad(d+Len_all/2+(1:Len_all/2)))); end Park_metric=(abs(P_Park).^2)./(E_Park).^2; plot(Park_metric/max(Park_metric)) %timing estimation is [~, maxipos1]=max(Park_metric); t_est_Park(1,n)=Len_all - maxipos1; FreqOffset = angle(Q_Park(maxipos1))/pi; end end считается корреляция Q_Park(d)=sum(conj(recvd_signal_zeropad(d+(1:Len_all/2))).*(recvd_signal_zeropad(d+Len_all/2+(1:Len_all/2)))); и берется фаза в точке максимума Park_metric=(abs(P_Park).^2)./(E_Park).^2; следующим образом FreqOffset = angle(Q_Park(maxipos1))/pi; но выдает почему то ерунду, фаза по всем точка и близко не подходит под заданное CFO=0.4; причем в формуле Q_Park(d) в разных источниках пишут по разному то (1:Len_all/2) там то (1:Len_all/4) но правильного результата что то что это не дает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться