Примените различные искажения 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)
Оцените 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)
Угловые точки созвездия сдвинулись к источнику из-за сжатия усилителя.
Введите небольшое преобразование 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
ОСШ (≈ 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
Определите эквивалентный ОСШ.
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
Оцените ОСШ.
mer = comm.MER('ReferenceSignalSource','Estimated from reference constellation', ... 'ReferenceConstellation',refConst); snrEst = mer(rxfiltOut)
snrEst = 14.1996
Это значение примерно на 6 дБ хуже заданного значения в 30 дБ, что означает, что эффекты других нарушений значительны и будут ухудшать эффективность частоты битовой ошибки.
Затухающие каналы | Влияние эффектов РФ на производительность системы связи