Jump to content

    

Моделирование УКВ канала

Здравствуйте!

 

Необходимо сделать модель канала УКВ. Кто подскажет с чего лучше начать? Что почитать?

 

Заранее Спасибо!

Share this post


Link to post
Share on other sites

clear all; close all; clc;

% Коэффициент ослабления лучей
r    = [0.057662, 0.176809, 0.407163, 0.303585, 0.258782, ...
       0.061831, 0.150340, 0.051534, 0.185074, 0.400967, ...
       0.295723, 0.350825, 0.262909, 0.225894, 0.170996, ...
       0.149723, 0.240140, 0.116587, 0.221155, 0.259730;];

% Задержка лучей
tau  = [1.003019, 5.422091, 0.518650, 2.751772, 0.602895, ...
       1.016585, 0.143556, 0.153832, 3.324866, 1.935570, ...
       0.429948, 3.228872, 0.848831, 0.073883, 0.203952, ...
       0.194207, 0.924450, 1.381320, 0.640512, 1.368671;] * 1e-6;


SNR = 20;                   % Отношение сигнал шум в дБ   
NumBlock = 100;              % Колличество символов прошедших через канал
SamplesRate = (2.5e6/3)*8/5; % Частота передискретизированного сигнала
NumCarriers = 533;          % Колличество несущих
FFTLength = 3000;           % Колличество отсчетов полезной части сигнала
GuardLength = 375;          % Колличество отсчетов защитной части сигнала


% Расчет Доплеровского смещения
FreqCarrier = 108e6;        % Несущая сигнала
Speed = 200e3/3600;         % Скорость движения приемника относительно передатчика
c = 300e6;                  % Скорость света
DopplerShift = FreqCarrier*Speed/c; % Максимальный доплеровский сдвиг 

SampleTime = 1/SamplesRate; % Период дискретизации сигнала
DelayVector = tau; 
GainVector = 10*log10®;    % Коэффициент ослабления лучей в дБ
scale = 1./sqrt(sum(r.^2));

ChanObj = rayleighchan(SampleTime,DopplerShift,DelayVector,GainVector);   
ChanObj.ResetBeforeFiltering = 1;
ChanObj.NormalizePathGains = 1;
ChanObj.StorePathGains = 0;	
ChanObj.DopplerSpectrum = doppler.gaussian(DopplerShift/2);
ChanObj.StoreHistory = 1;

M=4; 
k=log2(M);
H_QAM4=modem.qammod('M',M,'PhaseOffset', 0, 'SymbolOrder',...
   'binary', 'InputType', 'bit'); 
hDeMod = modem.qamdemod(H_QAM4);

data = [];
for n = 1:NumBlock
   Input_Data = randint(k*NumCarriers,1,2);
   QAM_tx = modulate(H_QAM4,Input_Data);

   Symbol = ifft([QAM_tx(ceil(NumCarriers/2)+1:NumCarriers);complex(zeros(FFTLength-NumCarriers,1),zeros(FFTLength-NumCarriers,1));...
                 QAM_tx(1:ceil(NumCarriers/2))]);

   SymbolCP = [symbol(FFTLength-GuardLength+1:FFTLength);Symbol];   

   OutputBlock = filter(ChanObj, SymbolCP);
   OutputBlock = awgn(OutputBlock, SNR+10*log10(k)-10*log10(1),'measured');

   Symbol = fft(OutputBlock(GuardLength+1:FFTLength+GuardLength));
   QAM_rx(1,1:ceil(NumCarriers/2)) = Symbol(FFTLength - ceil(NumCarriers/2)+1:FFTLength);
   QAM_rx(1,ceil(NumCarriers/2):NumCarriers) = Symbol(1:ceil(NumCarriers/2));

end

plot(linspace(0,SamplesRate,3375), 20*log10(abs(fft(SymbolCP)))); grid on;
%plot(ChanObj);

 

Все ли я правильно сделал? SampleTime это период дискретизации сигнала или что то другое? как проверить правильность модели? Есть ли в матлабе какиенить теоретические расчеты ПХ канала?

Edited by Ivan55

Share this post


Link to post
Share on other sites
Все ли я правильно сделал?

Нет. Надо просто в Симулинке открыть подходящую модель и злобно её заюзать. Всё уже придумали до нас, причём по нескольку раз.

Share this post


Link to post
Share on other sites
Надо просто в Симулинке открыть подходящую модель и злобно её заюзать.

 

Например?

Share this post


Link to post
Share on other sites
Например?

 

Сорри, чего-то я вчера злой слишком был. А по моделям - пожалуйста: открываете Communication Systems/channels. Там вам пожалуйста, и просто AWGN и многолучёвый с замираниями и т.д. Готовые системы уже вместе с каналом есть, например, DVB целиком расписана (вроде ваш диапазон). Я вам советую, всё-таки, моделировать системы связи, ибо там важны вопросы синхронизации в симулинке: удобно и наглядно. Но дело ваше.

Share this post


Link to post
Share on other sites
Сорри, чего-то я вчера злой слишком был.

 

Ниче такого не заметил))

 

...DVB целиком расписана (вроде ваш диапазон). Я вам советую, всё-таки, моделировать системы связи, ибо там важны вопросы синхронизации в симулинке: удобно и наглядно. Но дело ваше.

 

Да это DVB-T. Спасибо за подсказку, буду смотреть разбираться)

Share this post


Link to post
Share on other sites
Готовые системы уже вместе с каналом есть, например, DVB целиком расписана

 

А где можно взять эту модельку с каналом, о которой вы говорите, у вас есть ссылка на нее, или подскажите где ее можно найти?

Share this post


Link to post
Share on other sites
А где можно взять эту модельку с каналом, о которой вы говорите, у вас есть ссылка на нее, или подскажите где ее можно найти?

Так в демосах к communication toolbox. Если он у вас стоит (и Симулинк, есстественно, тоже) просто наберите в командном окне матлаба commdvbc и сразу в модель нужную попадёте.

 

Ой, сорри, commdvbt, вам же terrestrial вроде нужен.

 

Edited by Kluwert

Share this post


Link to post
Share on other sites
Так в демосах к communication toolbox. Если он у вас стоит (и Симулинк, есстественно, тоже) просто наберите в командном окне матлаба commdvbc и сразу в модель нужную попадёте.

 

Ой, сорри, commdvbt, вам же terrestrial вроде нужен.

 

Так то да)) я ее и нашел) но там модель с AWGN, а я думал вы мне говорите про модель DVB c каналами Райса и Релея) Но все равно спасибо) вот только встроенные функции матлаба релея и райса не подойдут для моделирования, так как DVB стандарт оговаривает требования на канал с 20 лучами и 20 фиксированными фазами лучей, а встроенные матлабовские Райса и Релея эти фазы сами крутят, и стационарными их не задают)) Так что писать придется модель кканала ручками. Вопрос: "Как можно сделать задержку луча на дробное колл-во отсчетов?"

 

Кто нить делал модель канала DVB-T? подскажите хотябы)

Edited by Ivan55

Share this post


Link to post
Share on other sites
Кто нить делал модель канала DVB-T? подскажите хотябы)

 

Попробуйте посмотреть в ADS и SV.

Share this post


Link to post
Share on other sites
Попробуйте посмотреть в ADS и SV.

 

Что за ADS и SV?

Share this post


Link to post
Share on other sites
Вопрос: "Как можно сделать задержку луча на дробное колл-во отсчетов?"

Дробная задержку можно сделать с помощью фильтра Фэрроу (Farrow), только надо смотреть чтоб ширина спектра сигнала не сильно искажалась фильтром, который имеет завал на ВЧ и максимален при задержке 0.5 периода дискретизации. Т.е. надо что бы частота дискретизации была с запасом в несколько раз, а не в притык по Котельникову. АЧХ фильтра Фэрроу можно глянуть у Незами, ну или я могу выложить если нужно. Если реализация в Simulink то посмотрите модели по ссылке. Там реализуется дробная задержка в петле символьной синхронизации. Если вы работаете только с m-файлами, то смотрите в help матлаба, там есть какой-то Farrow filter.

Share this post


Link to post
Share on other sites
Дробная задержку можно сделать с помощью фильтра Фэрроу (Farrow), только надо смотреть чтоб ширина спектра сигнала не сильно искажалась фильтром, который имеет завал на ВЧ и максимален при задержке 0.5 периода дискретизации. Т.е. надо что бы частота дискретизации была с запасом в несколько раз, а не в притык по Котельникову. АЧХ фильтра Фэрроу можно глянуть у Незами, ну или я могу выложить если нужно. Если реализация в Simulink то посмотрите модели по ссылке. Там реализуется дробная задержка в петле символьной синхронизации. Если вы работаете только с m-файлами, то смотрите в help матлаба, там есть какой-то Farrow filter.

 

Да спасибо) я уже нашел, но там fracdelay который как раз и использует Farrow filter

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this