Применение различных радиочастотных нарушений к сигналу 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)
Оцените 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)

Угловые точки созвездия сдвинулись к началу из-за сжатия усиления усилителя.
Введите небольшое преобразование AM/PM и просмотрите совокупность принятых сигналов.
amp.AMPMConversion = 1; txSig = amp(modSig); constDiagram(txSig)

Созвездие повернулось из-за преобразования 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

Выходная мощность выключается на уровне 30 дБм. Усилитель проявляет нелинейное поведение для уровней входной мощности более 25 дБм.
Применить амплитудный и фазовый дисбаланс к модулированному сигналу с помощью iqimbal функция.
ampImb = 3; phImb = 10; rxSig = iqimbal(modSig,ampImb,phImb);
Постройте график принятого созвездия.
constDiagram(rxSig)

Величина и фаза созвездия изменились в результате 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)

Дисбаланс I/Q вводит второй тональный сигнал на частоте -100 Гц, что является обратным входному тональному сигналу.
Примените фазовый шум к передаваемому сигналу. Постройте график результирующей совокупности.
pnoise = comm.PhaseNoise('Level',-50,'FrequencyOffset',20,'SampleRate',fs); pnoiseSig = pnoise(modSig); constDiagram(pnoiseSig)

Фазовый шум создает дрожание вращения.
Вычислите и постройте график 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)

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)

Вычислите изменяющийся во времени 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 дБ, что означает, что влияние других нарушений является значительным и ухудшит эффективность частоты битовых ошибок.
Замирание каналов | Влияние влияния радиочастот на производительность системы связи