|
Синхра по методу Park |
|
|
|
Nov 2 2016, 04:53
|
Местный
  
Группа: Участник
Сообщений: 212
Регистрация: 17-01-12
Пользователь №: 69 640

|
Добрый день! Кто знаком с синхрой ОФДМ по тренировочной последовательности Park? Я написал код но он выдает ерунду, в графике метрики нету явно выраженного пика, как по теории... подскажите что я делаю не так CODE 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;
Сообщение отредактировал Ivan55 - Nov 2 2016, 05:11
|
|
|
|
|
Nov 2 2016, 09:33
|
Местный
  
Группа: Участник
Сообщений: 212
Регистрация: 17-01-12
Пользователь №: 69 640

|
Цитата(KalashKS @ Nov 2 2016, 11:45)  CODE 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
|
|
|
|
|
Nov 23 2016, 08:11
|
Местный
  
Группа: Участник
Сообщений: 236
Регистрация: 7-02-11
Пользователь №: 62 755

|
Цитата(Ivan55 @ Nov 23 2016, 11:03)  Добрый день всем! Подскажите пожалуйста как правильно измерить СКО оценки в многолучевом канале? например двух лучевой СКО оценки чего, если не секрет?
|
|
|
|
|
Nov 23 2016, 08:16
|
Местный
  
Группа: Участник
Сообщений: 212
Регистрация: 17-01-12
Пользователь №: 69 640

|
Цитата(KalashKS @ Nov 23 2016, 11:11)  СКО оценки чего, если не секрет? СКО оценки начала OFDM символа, т.е. временная синхра, нужно оценить ее эффективность в многолучевом канале
Сообщение отредактировал Ivan55 - Nov 23 2016, 08:22
|
|
|
|
|
Nov 23 2016, 10:01
|
Местный
  
Группа: Участник
Сообщений: 212
Регистрация: 17-01-12
Пользователь №: 69 640

|
Цитата(KalashKS @ Nov 23 2016, 12:38)  а потом доучесть помехи по боковым лепесткам от побочных пиков как дополнительную дисперсию шума. вот я тоже про это думаю, а как это сделать чет не соображу к примеру у нас есть два луча сигнал переходит с луча на луч и время начала символа соответсвено скачет в зависимости от того какой щас луч преобладает Получается что измеряется СКО оценки+ СКО перехода с луча на луч, но ведь это не корректно... прием ведь мы ведем по тому лучу который щас преобладает
|
|
|
|
|
Nov 23 2016, 10:53
|
Местный
  
Группа: Участник
Сообщений: 212
Регистрация: 17-01-12
Пользователь №: 69 640

|
Цитата(petrov @ Nov 23 2016, 13:48)  Не ведём, не должно ничего скакать, канал никогда резко не меняется, никаких привязок к преобладающим лучам. ну да резко он не меняется, но вот максимум метрики меняется резко, т.е. в 2х лучевом метрика имеет два пика, по максимуму определяют начало символа, эти два пика медленно плавают по амплитуде и то один становится максимальным то другой... таким образом у меня максимум то 100 отсчет то 196 отсчет, СКО уже под сотню получается плавности нету, например 100 101 102 ... и уплыл на 196
Сообщение отредактировал Ivan55 - Nov 23 2016, 10:54
|
|
|
|
|
Nov 23 2016, 11:20
|
Местный
  
Группа: Участник
Сообщений: 212
Регистрация: 17-01-12
Пользователь №: 69 640

|
Цитата(petrov @ Nov 23 2016, 14:18)  Синхра негодная. ИМХО да все они не айс))))))))
|
|
|
|
|
Dec 14 2016, 15:18
|
Местный
  
Группа: Участник
Сообщений: 212
Регистрация: 17-01-12
Пользователь №: 69 640

|
кто знает как в методе Parka правильно делается оценка сдвига частоты вот мой код: CODE 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) но правильного результата что то что это не дает
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|