exponenta event banner

Визуализация нарушений RF

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

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

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

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) близко соответствует SNR. Создайте объект MER и оцените SNR.

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

Оценка довольно близка к указанному SNR 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

SNR (≈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 дБм.

Дисбаланс ввода/вывода

Применить амплитудный и фазовый дисбаланс к модулированному сигналу с помощью 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

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

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

Оцените SNR.

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

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

См. также

|