В этом примере показано, как использовать коммуникацию. EyeDiagram и коммуникация. ConstellationDiagram в анализе систем связи.
Графический вывод модулируемого, отфильтрованного сигнала с помощью ГРАФИКА не отображает характеристики модуляции так же ясно как схема созвездия и глаз. Глазковая диаграмма накладывает много коротких сегментов, названных трассировками, чтобы показать характеристики сигнала. Схема созвездия производит сигнал во время символа и отображает его в сигнале (т.е. I/Q) пробел. Параметры симуляции (частота дискретизации, выборки на символ) обеспечивают высокое разрешение для анализа.
% Initialize system parameters Fs = 10000; % Sample rate Rs = 100; % Symbol rate sps = Fs/Rs; % Samples per symbol rolloff = 0.5; % Rolloff factor M = 4; % Modulation order (QPSK) % Square root raised cosine filters. filterSpan = 6; filterGainTx = 9.9121; transmitFilter = comm.RaisedCosineTransmitFilter('RolloffFactor', rolloff, ... 'OutputSamplesPerSymbol', sps, ... 'FilterSpanInSymbols', filterSpan, ... 'Gain', filterGainTx); receiveFilter = comm.RaisedCosineReceiveFilter('RolloffFactor', rolloff, ... 'InputSamplesPerSymbol', sps, ... 'FilterSpanInSymbols', filterSpan, ... 'DecimationFactor', 1, ... 'Gain', 1/filterGainTx); % Generate modulated and pulse shaped signal frameLen = 1000; message = randi([0 M-1], frameLen, 1); modulated = pskmod(message, M, pi/4); filteredTx = transmitFilter(modulated); t = 0:1/Fs:50/Rs-1/Fs; idx = round(t*Fs+1); hFig = figure; plot(t, real(filteredTx(idx))); title('Modulated, filtered in-phase signal'); xlabel('Time (sec)'); ylabel('Amplitude'); grid on; % Manage the figures hFig.Position = [50 400 hFig.Position(3:4)];
Системный объект Глазковой диаграммы используется, чтобы построить несколько трассировок модулируемого, сигнала импульсной формы анализировать характеристики системы. В следующем рисунке 2D цветная глазковая диаграмма построена; интенсивность цвета пропорциональна функции плотности вероятности (PDF) амплитуды входного сигнала в установленный срок. Верхний график для синфазного компонента анализируемого сигнала и более низкого графика для квадратурного компонента. Поскольку значение по умолчанию свойства SymbolsPerTrace равняется двум, глазковая диаграмма охватывает два символа. В следующем примере анализируется переданный сигнал. Интерференция межсимвола (ISI), введенный квадратным корнем, повышенным косинусом, импульсный формирующий фильтр может быть ясно замечен.
% Create an eye diagram object eyeObj = comm.EyeDiagram(... 'SampleRate', Fs, ... 'SamplesPerSymbol', sps, ... 'DisplayMode', '2D color histogram', ... 'ShowImaginaryEye', true, ... 'YLimits', [-0.7 0.7]) %#ok<NOPTS> % Update the eye diagram object with the transmitted signal eyeObj(0.5*filteredTx); % Manage the figures: eyeObj.Position = [hFig.Position(1)+hFig.Position(3) hFig.Position(2) .... eyeObj.Position(3)*0.75 eyeObj.Position(4)]; hFig.Visible = 'off';
eyeObj = comm.EyeDiagram with properties: Name: 'Eye Diagram' Trace configuration SampleRate: 10000 SamplesPerSymbol: 100 SampleOffset: 0 SymbolsPerTrace: 2 Display configuration DisplayMode: '2D color histogram' EnableMeasurements: 0 ShowImaginaryEye: 1 YLimits: [-0.7000 0.7000] ShowGrid: 1 Position: [320 282 640 460] Use get to show all properties
Теперь полученный сигнал будет исследован. Это принято, что полученный сигнал повреждается AWGN с энергией символа к шумовой степени, спектральное отношение плотности (Es/No) 20 дБ и получатель использует согласованный фильтр. Поэтому объединенный фильтр, замеченный получателем, является аппроксимированным повышенным фильтром косинуса с минимальным ISI. Одна проблема, которая наблюдается с этой глазковой диаграммой, состоит в том, что сигнал превышает амплитудные пределы объекта. Как видно из предупреждения командной строки объект глазковой диаграммы игнорирует значения из области значений.
EsNo = 20; SNR = EsNo - 10*log10(sps); % Create an comm.AWGNChannel System object and set its NoiseMethod property % to 'Signal to noise ratio (SNR)'. Set the 'SignalPower' property to the % calculated input signal power. channel = comm.AWGNChannel('NoiseMethod', 'Signal to noise ratio (SNR)',... 'SNR', SNR); channel.SignalPower = var(filteredTx); received = channel(filteredTx); filteredRx = receiveFilter(received); % Discard the existing eye diagram data reset(eyeObj); % Step the eye diagram object with the received signal eyeObj(filteredRx); figure(hFig); plot(t, real(filteredRx(idx))); title(['Modulated, filtered noisy in-phase signal, Es/No = ' ... num2str(EsNo) ' dB']); xlabel('Time (sec)'); ylabel('Amplitude'); grid on;
Warning: An input value is outside the specified Y limits and is ignored.
Амплитудные пределы могут быть настроены, чтобы включать целый сигнал в анализ. Начиная с изменения амплитудных пределов сбрасывает объект глазковой диаграммы, глазковая диаграмма должна быть обновлена с теми же входными параметрами снова. С новыми амплитудными пределами больше не выдается предупреждение из области значений.
eyeObj.YLimits = [-1.5 1.5]; eyeObj(filteredRx);
Цветовая шкала может собираться в логарифмический получить лучшее представление маленьких значений PDF в глазковой диаграмме. Линии, которые проходят через глаз, открывающийся вокруг нулевого уровня, больше отображаются в этом представлении. Эти линии происходят из-за начальных переходных процессов входного сигнала.
eyeObj.ColorScale = 'Logarithmic';
Точность аналитических увеличений глазковой диаграммы как количество символов прошла через увеличения объекта глазковой диаграммы. В следующем примере объект глазковой диаграммы продвинут в цикле и собирает 2 000 символов данных. Заметьте, что самое широкое амплитудное открытие глаза происходит приблизительно 10 мс. Это соответствует лучшему времени выборки.
eyeObj.ColorScale = 'Linear'; release(channel); release(transmitFilter); release(receiveFilter); release(eyeObj); frameLen = 50; nFrames = 40; for p = 1:nFrames message = randi([0 M-1],frameLen,1); modulated = pskmod(message, M, pi/4); filteredTx = transmitFilter(modulated); channel.SignalPower = var(filteredTx); received = channel(filteredTx); filteredRx = receiveFilter(received); eyeObj(filteredRx); end
Смещение времени глазковой диаграммы может быть, конфигурируют, чтобы переместить открытую часть глаза вдоль оси времени. Смещение времени 5 мс применяется к глазковой диаграмме для следующей фигуры. Смещение времени только для графического вывода целей и не влияет на собранные данные.
eyeObj.SampleOffset = 5e-3*Fs;
Различная палитра может быть задана для глазковой диаграммы с помощью Диалогового окна Стиля (Представление-> Стиль...). Следующий пример выбирает 'струйную' палитру, которой предоставляют MATLAB®. Любая пользовательская палитра может также быть задана.
hide(eyeObj);
Цвет фона глазковой диаграммы может быть настроен путем определения карты пользовательского цвета. Поскольку цвет фона является также цветом, который соответствует нулевому PDF, первый элемент карты цветов соответствует цвету фона. В следующем цвет фона выбран к черному цвету.
cmap = jet(64); cmap(1,:) = [0 0 0];
Объект глазковой диаграммы может также построить полученный сигнал с помощью отдельных трассировок вместо значений PDF. Такая возможность полезна для того, чтобы быстро получить краткосрочное представление канала. Свойство TracesToDisplay объекта глазковой диаграммы определяет количество трассировок, построенных по объекту. Поскольку только десять трассировок построены, глазковая диаграмма не полностью представляет область значений значений сигналов.
eyeObj.SampleOffset = 0;
eyeObj.DisplayMode = 'Line plot';
eyeObj.TracesToDisplay = 10;
show(eyeObj);
TracesToDisplay увеличен, чтобы получить лучшую глазковую диаграмму линейного графика.
eyeObj.TracesToDisplay = 100;
коммуникация. ConstellationDiagram генерирует схему созвездия (также известный как график рассеивания), который является графиком синфазного компонента сигнала по сравнению с его квадратурным компонентом, подкошенным коэффициентом, который обычно устанавливается на количество выборок на символ, NSAMPS. Получившийся график показывает совпадающий отфильтрованный сигнал, произведенный на уровне символа. Начиная с объединенной передачи и получают фильтры, только приближение к идеальному фильтру повышенного косинуса, полученные символы не являются точно тем же самым как переданными символами; они могут быть визуально сравнены с помощью свойств ShowReferenceConstellation и ReferenceConstellation.
% Close figures close(hFig(ishghandle(hFig))); % Pass the noiseless transmitted signal through a matched filter filteredRx = receiveFilter(filteredTx); % Create the constellation diagram delay = 6*Fs/Rs; filteredRxDelayed = filteredRx(delay+1:end); cdObj = comm.ConstellationDiagram('SamplesPerSymbol', sps, ... 'ShowReferenceConstellation', true, ... 'ReferenceConstellation', qammod(0:3, 4, 'UnitAveragePower', 1)); cdObj(filteredRxDelayed); % Manage the figures cdObj.Position = [eyeObj.Position(1)+eyeObj.Position(3) eyeObj.Position(2) .... cdObj.Position(3)*0.75 cdObj.Position(4)*0.75];
Траектория сигнала может также быть построена путем устанавливания ShowTrajectory свойство на true или путем нажатия соответствующей кнопки на панели инструментов. Отличные графические свойства могут быть присвоены с помощью Диалогового окна Стиля (Представление-> Стиль...). Голубая линия представляет синфазный компонент полученной траектории сигнала по сравнению с квадратурным компонентом на пробеле сигнала. Желтые точки представляют сигнал во время выборки символа. Красные кресты представляют переданные символы для данной схемы модуляции. Этот график показывает, что, даже при том, что сигнал перемещается на пробеле сигнала, его значение приближается к значению исходного сигнала, когда произведено на контурах символа.
cdObj.ShowTrajectory = true;
Свойство ColorFading может использоваться, чтобы исчезнуть более старые символы, как аппаратный осциллограф делает:
cdObj.ColorFading = true;
Следующий код строит сигнал, который передается через канал AWGN и соответствующий отфильтрованный в получателе (красная линия). Даже при том, что сигнал с шумом может дифференцироваться от бесшумного совпадающего отфильтрованного сигнала (синяя линия), это все еще затрудняет, чтобы определить влияние, которое шум оказывает на сигнал. Es/No для сигнала с шумом составляет 10 дБ, который соответствует отношению сигнал-шум (SNR)-10 дБ.
% Create the plot EsNo = 10; SNR = EsNo - 10*log10(sps); frameLen = 1000; release(channel); release(transmitFilter); release(receiveFilter); channel.SNR = SNR; message = randi([0 M-1],frameLen,1); modulated = pskmod(message, M, pi/4); filteredTx = transmitFilter(modulated); filteredRxPerfect = receiveFilter(filteredTx); channel.SignalPower = var(filteredTx); received = channel(filteredTx); filteredRx = receiveFilter(received); t = 6/Rs:1/Fs:40/Rs-1/Fs; idx = round(t*Fs+1); hFig = figure; plot(t,real(filteredRxPerfect(idx)),'b-',t,real(filteredRx(idx)),'r-'); title('Modulated, filtered in-phase signal and noisy signal'); xlabel('Time (sec)'); ylabel('Amplitude'); grid on; legend('Modulated, filtered signal', ... ['Noisy, filtered signal, Es/No=' num2str(EsNo) ' dB'], ... 'Location', 'SouthWest'); % Manage the figures hFig.Position = [50 400 hFig.Position(3:4)];
Следующие фигуры являются глазковыми диаграммами для совпадающего отфильтрованного бесшумного полученного сигнала и сигнала с шумом. Глазковые диаграммы ясно показывают изменение полученного сигнала от переданного сигнала из-за канала AWGN и получить фильтра.
% Create the eye diagrams eyeObj.YLimits = [-2 2]; release(eyeObj); eyeObj(filteredRxPerfect); eyeObj.Name = 'Noiseless Eye Diagram'; eyeObj.Position = [hFig.Position(1)+hFig.Position(3) eyeObj.Position(2) .... eyeObj.Position(3) eyeObj.Position(4)]; % Make an independent copy of the eye diagram object eyeObjNoise = clone(eyeObj); eyeObjNoise.Name = 'Noisy Eye Diagram, Es/No = 10 dB'; reset(eyeObjNoise); eyeObjNoise(filteredRx); % Manage the figures close(hFig(ishghandle(hFig))); eyeObjNoise.Position = [eyeObjNoise.Position(1)+eyeObjNoise.Position(3) eyeObjNoise.Position(2) ... eyeObjNoise.Position(3) eyeObjNoise.Position(4)];
Следующие фигуры являются схемами созвездия совпадающего отфильтрованного бесшумного полученного сигнала и сигнала с шумом. Они ясно показывают изменение от переданного сигнала в полученном сигнале в идеальное время выборки.
% Create the constellation diagrams delay = 6/Rs * Fs; cdObj = comm.ConstellationDiagram('SamplesPerSymbol', sps); cdObj.Name = 'Noiseless Constellation Diagram'; cdObjNoise = comm.ConstellationDiagram('SamplesPerSymbol', sps); cdObjNoise.Name = 'Noisy Constellation Diagram, Es/No = 10 dB'; cdObj(filteredRxPerfect(delay+1:end)); cdObjNoise(filteredRx(delay+1:end)); % Manage the figures hide(eyeObj); hide(eyeObjNoise); cdObj.Position = [eyeObj.Position(1) eyeObj.Position(2) .... cdObj.Position(3)*0.75 cdObj.Position(4)*0.75]; cdObjNoise.Position = cdObj.Position + [cdObj.Position(3) 0 0 0];
Следующее является графиком того же переданного сигнала, полученного в Es/No 20 дБ (пурпурная линия). Изменения, вызванные шумом, меньше, чем с предыдущим сигналом (Es/No = 10 дБ). В этом случае глаз и схемы созвездия необходимы еще больше, чтобы определить характеристики системы.
% Close all open figures hide(eyeObj);hide(eyeObjNoise); hide(cdObj);hide(cdObjNoise); % Plot the transmitted signal EsNo2 = 20; SNR2 = EsNo2 - 10*log10(sps); channel.SNR = SNR2; channel.SignalPower = var(filteredTx); received = channel(filteredTx); filteredRx = receiveFilter(received); hFig = figure; plot(t, real(filteredRxPerfect(idx)),'b-', t, real(filteredRx(idx)), 'm-'); title('Modulated, filtered signal and noisy signal'); xlabel('Time (sec)'); ylabel('Amplitude'); grid on; legend('Modulated, filtered signal', ... ['Noisy signal, Es/No=' num2str(EsNo2) ' dB'], ... 'Location', 'SouthWest'); % Manage the figures hFig.Position = [50 400 hFig.Position(3:4)];
Следующие фигуры являются глазковыми диаграммами для первого сигнала с шумом и второго сигнала с шумом. Они ясно показывают, что изменение второго полученного сигнала меньше первого полученного сигнала.
% Close figures close(hFig(ishghandle(hFig))); % Create the eye diagram plots eyeObjNoise2 = clone(eyeObj); eyeObjNoise.Name = 'Noisy Eye Diagram, Es/No = 20 dB'; eyeObjNoise2(filteredRx); % Manage the figures eyeObjNoise2.Position = eyeObjNoise.Position; eyeObjNoise.Position = eyeObj.Position; show(eyeObjNoise); show(eyeObjNoise2);
Следующие фигуры являются схемами созвездия первого сигнала с шумом и второго сигнала с шумом. Они ясно показывают, что изменение от второго полученного сигнала меньше первого полученного сигнала в точках выборки.
% Create constellation diagrams cdObjNoise2 = clone(cdObj); cdObjNoise2.Name = 'Noisy Constellation Diagram, Es/No = 20 dB'; release(cdObjNoise2); cdObjNoise2(filteredRx); % Manage the figures cdObjNoise2.Position = cdObjNoise.Position; cdObjNoise.Position = cdObj.Position; show(cdObjNoise); show(cdObjNoise2); hide(eyeObjNoise); hide(eyeObjNoise2);
Мы можем визуализировать удар синхронизации ошибок схема созвездия и глаз. Эта анимация также показывает, что созвездие и глазковая диаграмма могут быть построены с любым смещением. Мы используем второй шумный совпадающий отфильтрованный сигнал в этой анимации. Синяя линия в глазковой диаграмме показывает время выборки. Красные точки в схеме созвездия показывают выборки в лучшее время выборки, в то время как голубые звезды показывают выборки со смещением времени выборки.
% Prepare scopes hide(cdObjNoise); cdObjNoise2.ShowTrajectory = true; eyeObjNoise2.DisplayMode = '2D color histogram'; reset(eyeObjNoise2); release(eyeObjNoise2); release(cdObjNoise2); eyeObjNoise2(filteredRx(idx)); cdObjNoise2(filteredRx(idx)); helperPrepareScatterEyeAnimation(cdObjNoise2, eyeObjNoise2); % Create and animate the plots for offset = (0:1:Fs/Rs-1) eyeObjNoise2.SampleOffset = offset; cdObjNoise2.SampleOffset = offset; pause(0.1); end