Визуализация ослаблений РФ

Примените различные искажения RF к сигналу QAM. Наблюдайте эффекты с помощью созвездий, изменяющихся во времени векторных величин ошибок (EVM) и спектральных графиков. Оцените эквивалентное отношение сигнал/шум (ОСШ).

Инициализация

Установите частоту дискретизации, порядок модуляции и ОСШ. Вычислите ссылочные точки созвездия.

fs = 1000;
M = 16;
snrdB = 30;
refConst = qammod(0:M-1,M,'UnitAveragePower',true);

Создайте сигнальное созвездие и объекты временных возможностей для визуализации эффектов нарушения.

constDiagram = comm.ConstellationDiagram('ReferenceConstellation',refConst);
timeScope = timescope('YLimits',[0 40],'SampleRate',fs,'TimeSpanSource','property','TimeSpan',1, ...
    'ShowGrid',true,'YLabel','EVM (%)');

Белый шум

Сгенерируйте сигнал 16-QAM и передайте его через канал AWGN. Постройте график его созвездия.

data = randi([0 M-1],1000,1);
modSig = qammod(data,M,'UnitAveragePower',true);
noisySig = awgn(modSig,snrdB);

constDiagram(noisySig)

Figure Constellation Diagram contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes contains 2 objects of type line. This object represents Channel 1.

Оцените EVM сигнала с шумом от ссылочных точек созвездия.

evm = comm.EVM('ReferenceSignalSource','Estimated from reference constellation', ...
    'ReferenceConstellation',refConst, ...
    'Normalization','Average constellation power');

rmsEVM = evm(noisySig)
rmsEVM = 3.1768

Вероятность ошибки модуляции (MER) тесно соответствует ОСШ. Создайте объект MER и оцените ОСШ.

mer = comm.MER('ReferenceSignalSource','Estimated from reference constellation', ...
    'ReferenceConstellation',refConst);
snrEst = mer(noisySig)
snrEst = 30.1071

Оценка довольно близка к заданному ОСШ 30 дБ.

Искажение усилителя

Создайте усилитель, используя незапоминающийся объект нелинейности.

amp = comm.MemorylessNonlinearity('IIP3',38,'AMPMConversion',0);

Пропустите модулированный сигнал через нелинейный усилитель и постройте его сигнальное созвездие.

txSig = amp(modSig);
constDiagram(txSig)

Figure Constellation Diagram contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes contains 2 objects of type line. This object represents Channel 1.

Угловые точки созвездия сдвинулись к источнику из-за сжатия усилителя.

Введите небольшое преобразование AM/PM и отобразите полученные сигнальные созвездия.

amp.AMPMConversion = 1;
txSig = amp(modSig);
constDiagram(txSig)

Figure Constellation Diagram contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes contains 2 objects of type line. This object represents Channel 1.

Созвездие повернуто из-за преобразования AM/PM. Чтобы вычислить изменяющийся во времени EVM, отпустите объект EVM и установите AveragingDimensions свойство для 2. Чтобы оценить EVM по входному сигналу, опускайте ReferenceSignalSource определение свойства. Этот метод дает более точные результаты.

evm = comm.EVM('AveragingDimensions',2);
evmTime = evm(modSig,txSig);

Постройте график изменяющегося во времени EVM искаженного сигнала.

timeScope(evmTime)

Вычислите RMS EVM.

evmRMS = sqrt(mean(evmTime.^2))
evmRMS = 35.5919

Вычислите MER.

mer = comm.MER;
snrEst = mer(modSig,txSig)
snrEst = 8.1392

ОСШ (≈ 8 дБ) уменьшается с его начального значения (∞) из-за искажения усилителя.

Задайте входы степени в диапазоне от 0 до 40 дБм. Преобразуйте эти уровни в их линейный эквивалент в W. Инициализируйте выход степени.

powerIn = 0:40;
pin = 10.^((powerIn-30)/10);
powerOut = zeros(length(powerIn),1);

Измерьте выходную степень усилителя для области значений входных уровней степени.

for k = 1:length(powerIn)
    data = randi([0 15],1000,1);
    txSig = qammod(data,16,'UnitAveragePower',true)*sqrt(pin(k));
    ampSig = amp(txSig);
    powerOut(k) = 10*log10(var(ampSig))+30;
end

Постройте график зависимости степени выхода от степени входа кривой.

figure
plot(powerIn,powerOut,powerIn,powerIn,'--')
legend('Amplifier Output','Ideal Output','location','se')
xlabel('Power In (dBm)')
ylabel('Power Out (dBm)')
grid

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Amplifier Output, Ideal Output.

Уровни выходной степени отключены на уровне 30 дБм. Усилитель демонстрирует нелинейное поведение для уровней входной степени, больше 25 дБм.

Разбаланс I/Q

Примените амплитуду и разбаланс фазы к модулированному сигналу с помощью iqimbal функция.

ampImb = 3;
phImb = 10;
rxSig = iqimbal(modSig,ampImb,phImb);

Постройте график полученного созвездия.

constDiagram(rxSig)

Figure Constellation Diagram contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes contains 2 objects of type line. This object represents Channel 1.

Величина и фаза созвездия изменились в результате разбаланса I/Q.

Вычислите и постройте график изменяющегося во времени EVM.

evmTime = evm(modSig,rxSig);
timeScope(evmTime)

EVM показывает поведение, которое подобно тому, которое испытывается с нелинейным усилителем, хотя отклонение меньше.

Создайте 100 Гц синусоиды, имеющую 1000 Гц частоту дискретизации.

sinewave = dsp.SineWave('Frequency',100,'SampleRate',1000, ...
    'SamplesPerFrame',1e4,'ComplexOutput',true);

x = sinewave();

Применить те же 3 дБ и 10 степени разбаланса I/Q.

ampImb = 3;
phImb = 10;
y = iqimbal(x,ampImb,phImb);

Постройте график спектра несбалансированного сигнала.

spectrum = dsp.SpectrumAnalyzer('SampleRate',1000,'PowerUnits','dBW');

spectrum(y)

Figure Spectrum Analyzer contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes contains an object of type line. This object represents Channel 1.

В разбаланс I/Q вводится второй тональный сигнал с частотой -100 Гц, который является обратной частотой входа тонального сигнала.

Фазовый шум

Примените фазовый шум к переданному сигналу. Постройте график получившейся сигнализации созвездия.

pnoise = comm.PhaseNoise('Level',-50,'FrequencyOffset',20,'SampleRate',fs);
pnoiseSig = pnoise(modSig);
constDiagram(pnoiseSig)

Figure Constellation Diagram contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes contains 2 objects of type line. This object represents Channel 1.

Фазовый шум вводит вращательный дрожь.

Вычислите и постройте график EVM принятого сигнала.

evmTime = evm(modSig,pnoiseSig);
timeScope(evmTime)

Определите RMS EVM.

evmRMS = sqrt(mean(evmTime.^2))
evmRMS = 6.1989

Фильтрация эффектов

Задайте выборки по параметру символа. Создайте пару приподнятых согласованных фильтров косинуса.

sps = 4;
txfilter = comm.RaisedCosineTransmitFilter('RolloffFactor',0.2,'FilterSpanInSymbols',8, ...
    'OutputSamplesPerSymbol',sps,'Gain',sqrt(sps));

rxfilter = comm.RaisedCosineReceiveFilter('RolloffFactor',0.2,'FilterSpanInSymbols',8, ...
    'InputSamplesPerSymbol',sps,'Gain',1/sqrt(sps), ...
    'DecimationFactor',sps);

Определите задержку через согласованные фильтры.

fltDelay = 0.5*(txfilter.FilterSpanInSymbols + rxfilter.FilterSpanInSymbols);

Пропустите модулированный сигнал через согласованные фильтры.

filtSig = txfilter(modSig);
rxSig = rxfilter(filtSig);

Чтобы учесть задержку через фильтры, сбросьте первый fltDelay выборки.

rxSig = rxSig(fltDelay+1:end);

Чтобы учесть изменение количества принятых выборок сигнала, создайте новое созвездие схему и объекты временных возможностей.

constDiagram = comm.ConstellationDiagram('ReferenceConstellation',refConst);
timeScope = timescope('YLimits',[0 40],'SampleRate',fs,'TimeSpanSource','property','TimeSpan',1, ...
    'ShowGrid',true,'YLabel','EVM (%)');

Оценка EVM. Постройте график принятого сигнального созвездия и изменяющегося во времени EVM.

evm = comm.EVM('ReferenceSignalSource','Estimated from reference constellation', ...
    'ReferenceConstellation',refConst, ...
    'Normalization','Average constellation power','AveragingDimensions',2);
evmTime = evm(rxSig);
constDiagram(rxSig)

Figure Constellation Diagram contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes contains 2 objects of type line. This object represents Channel 1.

timeScope(evmTime)

Определите RMS EVM.

evmRMS = sqrt(mean(evmTime.^2))
evmRMS = 2.7199

Определите эквивалентный ОСШ.

mer = comm.MER;
snrEst = mer(modSig(1:end-fltDelay),rxSig)
snrEst = 31.4603

Комбинированные эффекты

Объедините эффекты фильтров, нелинейного усилителя, AWGN и фазового шума. Отображение сигнальных и EVM-схем.

Создайте объекты EVM, временных возможностей и созвездия.

evm = comm.EVM('ReferenceSignalSource','Estimated from reference constellation', ...
    'ReferenceConstellation',refConst, ...
    'Normalization','Average constellation power','AveragingDimensions',2);
timeScope = timescope('YLimits',[0 40],'SampleRate',fs,'TimeSpanSource','property','TimeSpan',1, ...
    'ShowGrid',true,'YLabel','EVM (%)');
constDiagram = comm.ConstellationDiagram('ReferenceConstellation',refConst);

Задайте нелинейный усилитель и объекты фазового шума.

amp = comm.MemorylessNonlinearity('IIP3',45,'AMPMConversion',0);
pnoise = comm.PhaseNoise('Level',-55,'FrequencyOffset',20,'SampleRate',fs);

Фильтруйте и затем усиливайте модулируемый сигнал.

txfiltOut = txfilter(modSig);
txSig = amp(txfiltOut);

Добавьте фазовый шум. Передайте ослабленный сигнал через канал AWGN. Постройте график созвездия.

rxSig = awgn(txSig,snrdB);
iqImbalSig = iqimbal(rxSig,ampImb,phImb);
pnoiseSig = pnoise(iqImbalSig);
rxfiltOut = rxfilter(pnoiseSig);
constDiagram(rxfiltOut)

Figure Constellation Diagram contains an axes and other objects of type uiflowcontainer, uimenu, uitoolbar. The axes contains 2 objects of type line. This object represents Channel 1.

Вычислите изменяющуюся во времени EVM. Постройте график результата.

evmTime = evm(rxfiltOut);
timeScope(evmTime)

Определите RMS EVM.

evmRMS = sqrt(mean(evmTime.^2))
evmRMS = 19.4992

Оцените ОСШ.

mer = comm.MER('ReferenceSignalSource','Estimated from reference constellation', ...
    'ReferenceConstellation',refConst);
snrEst = mer(rxfiltOut)
snrEst = 14.1996

Это значение примерно на 6 дБ хуже заданного значения в 30 дБ, что означает, что эффекты других нарушений значительны и будут ухудшать эффективность частоты битовой ошибки.

См. также

|

Для просмотра документации необходимо авторизоваться на сайте