function plot_eye(signal, fs, fsym) histpoints = 512; %% verticale resolution histpoints = floor(histpoints/2)*2+1; %% to have the eye digram centered around one point make the vertical resolution uneven histpoints_horizontal = 256; %% horizontal resolution hist_data=zeros(histpoints,histpoints_horizontal ); %% initilize eye diagram x = real(signal); %% make input signal real x = resample(x,fsym*histpoints_horizontal/2,fs); %% down sample to original fsym rate if mod(length(x),2)==1 %% if the signal lenght is not divisible by 2 (symbols displayed in the eye diagram are 2) remove last symbol x = x(1:end-1); end %x = resample(x,histpoints_horizontal/2,1); %% reshape signal to high resolution eye diagram in this case 2 symbols are upsampled to 512 values eye_mat = reshape(x(1:end-mod(length(x),histpoints_horizontal)),histpoints_horizontal,floor(length(x)/histpoints_horizontal)); %% reshape signal into 256 rows each row has the histogram(eye data of all symbols) %defult value case maxA = max(eye_mat(:))*1.1; minA = min(eye_mat(:))*1.1; maxA = max(x); minA =min(x); difference= maxA-minA; data_ind_y=round((eye_mat-minA)/difference*(histpoints-1)) +1; for n=1:size(data_ind_y,1) [nn,cc] = hist(data_ind_y(n,:),1:histpoints); hist_data(:,n)=hist_data(:,n)+nn.'; end image(hist_data); colormap(cbrewer2("Reds",92)); y = string(linspace(minA,maxA,16)); yticks(linspace(0,histpoints,16)); yticklabels(y); end