Этот пример показывает, как использовать коммуникацию. 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 на истину или путем нажатия соответствующей кнопки на панели инструментов. Отличные графические свойства могут быть присвоены с помощью Диалогового окна Стиля (Представление-> Стиль...). Голубая строка представляет синфазный компонент полученной траектории сигнала по сравнению с квадратурным компонентом на пробеле сигнала. Желтые точки представляют сигнал во время выборки символа. Красные кресты представляют переданные символы для данной схемы модуляции. Этот график показывает, что, даже при том, что сигнал перемещается на пробеле сигнала, его значение приближается к значению исходного сигнала, когда выбрано на контурах символа.
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