55 lines
2.1 KiB
Matlab
55 lines
2.1 KiB
Matlab
function showEQTimeSignal(eq_signal,ref_symbols,options)
|
|
|
|
arguments
|
|
eq_signal
|
|
ref_symbols
|
|
options.fignum (1,1) double = NaN % Default to NaN if not provided
|
|
options.displayname (1,:) char = '' % Default to an empty string if not provided
|
|
options.color = [0.2157 0.4941 0.7216];
|
|
end
|
|
% Determine the figure number to use or create a new figure
|
|
if isnan(options.fignum)
|
|
fig = figure; % Create a new figure and get its handle
|
|
else
|
|
fig = figure(options.fignum); % Use the specified figure number
|
|
end
|
|
|
|
|
|
M = numel(unique(ref_symbols.signal));
|
|
lvlcol = cbrewer2('Set1',M);
|
|
col = cbrewer2('paired',2);
|
|
|
|
eq_decisions = PAMmapper(M,0).quantize(eq_signal);
|
|
rx_bits = PAMmapper(M,0).demap(eq_signal);
|
|
ref_bits = PAMmapper(M,0).demap(ref_symbols);
|
|
|
|
%%% Separate Classes
|
|
constellation = unique(ref_symbols.signal);
|
|
received_sd = NaN(numel(constellation),length(ref_symbols));
|
|
received_hd = NaN(numel(constellation),length(ref_symbols));
|
|
lvlcol = cbrewer2('Set1',numel(constellation));
|
|
for lvl = 1:numel(constellation)
|
|
%Separate the equalized signal into the
|
|
%respective levels based on the actually
|
|
%transmitted level!
|
|
received_sd(lvl,ref_symbols.signal==constellation(lvl)) = eq_signal.signal(ref_symbols.signal==constellation(lvl));
|
|
received_hd(lvl,ref_symbols.signal==constellation(lvl)) = eq_decisions.signal(ref_symbols.signal==constellation(lvl));
|
|
end
|
|
|
|
[~,numerr,ber_sd,errpos] = calc_ber(rx_bits.signal,ref_bits.signal,"skip_front",100,"skip_end",150,"returnErrorLocation",1);
|
|
|
|
%%% EQ Time Series %210
|
|
eq_signal.plot("fignum",fig.Number,"displayname",'Equalized Signal','color',col(1,:),'clear',1);
|
|
hold on
|
|
|
|
try
|
|
yline(PAMmapper(M,0).get_demodulation_thresholds,'HandleVisibility','off','LineStyle','--');
|
|
|
|
for c = 1:M
|
|
scatter(errpos./eq_signal.fs,received_sd(c,errpos),1,'x','MarkerEdgeColor',lvlcol(c,:),'LineWidth',2,'DisplayName',sprintf('Tx Lvl: %d',c));
|
|
end
|
|
end
|
|
|
|
end
|
|
|