130 lines
3.6 KiB
Matlab
130 lines
3.6 KiB
Matlab
function showLevelScatter(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.f_sym = [];
|
|
end
|
|
|
|
if isa(eq_signal,'Signal')
|
|
options.f_sym = eq_signal.fs;
|
|
eq_signal = eq_signal.signal;
|
|
end
|
|
if isa(ref_symbols,'Signal')
|
|
ref_symbols = ref_symbols.signal;
|
|
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
|
|
clf;
|
|
end
|
|
|
|
assert(~isempty(options.f_sym),'No fsym given');
|
|
|
|
rx_symbols = eq_signal ./ rms(eq_signal);
|
|
correct_symbols = ref_symbols;
|
|
f_sym = options.f_sym;
|
|
|
|
col = cbrewer2('Paired',numel(unique(correct_symbols))*2);
|
|
ccnt = -1;
|
|
|
|
levels = unique(correct_symbols);
|
|
|
|
start = 1;
|
|
ende = length(correct_symbols);
|
|
|
|
% start = 30000;
|
|
% ende = 40000;
|
|
|
|
for l = 1:numel(levels)
|
|
ccnt = ccnt+2;
|
|
|
|
level_amplitude = levels(l);
|
|
|
|
symbols_for_lvl = NaN(1,length(correct_symbols));
|
|
symbols_for_lvl(correct_symbols==level_amplitude) = rx_symbols(correct_symbols==level_amplitude);
|
|
std_lvl(l) = std(symbols_for_lvl,'omitnan');
|
|
xax_in_sec = ((1:length(correct_symbols)) / f_sym) * 1e6;
|
|
% xax_in_sec = 1:length(correct_symbols);
|
|
|
|
scatter(xax_in_sec(start:ende),symbols_for_lvl(start:ende),10,'.','MarkerFaceAlpha',0.5,'MarkerEdgeAlpha',0.5,'MarkerEdgeColor',col(ccnt,:));
|
|
hold on;
|
|
end
|
|
|
|
std_lvl = round(std_lvl,2);
|
|
|
|
ccnt = 0;
|
|
|
|
% Add the windowed/ smoothed curves
|
|
for l = 1:numel(levels)
|
|
ccnt = ccnt+2;
|
|
level_amplitude = levels(l);
|
|
|
|
symbols_for_lvl = NaN(1,length(correct_symbols));
|
|
|
|
movmean = 1/250 .* movsum(rx_symbols(correct_symbols==level_amplitude),[250/2,250/2]);
|
|
|
|
symbols_for_lvl(correct_symbols==level_amplitude) = movmean;
|
|
|
|
nanx = isnan(symbols_for_lvl);
|
|
t = 1:numel(symbols_for_lvl);
|
|
symbols_for_lvl(nanx) = interp1(t(~nanx), symbols_for_lvl(~nanx), t(nanx));
|
|
|
|
xax_in_sec = ((1:length(correct_symbols)) / f_sym) * 1e6;
|
|
% xax_in_sec = 1:length(correct_symbols);
|
|
|
|
plot(xax_in_sec(start:ende),symbols_for_lvl(start:ende),'Color',col(ccnt,:));
|
|
hold on
|
|
end
|
|
|
|
%yline(max(rx_symbols(correct_symbols==levels(2))))
|
|
yline(levels);
|
|
|
|
if 0
|
|
annotation(fig,'textbox',...
|
|
[0.660523809523809 0.844444444444448 0.133523809523809 0.0603174603174607],...
|
|
'String',['\sigma = ',num2str(std_lvl(4))],...
|
|
'LineWidth',1.8,...
|
|
'LineStyle','none',...
|
|
'FontSize',12,...
|
|
'FitBoxToText','off');
|
|
|
|
% Create textbox
|
|
annotation(fig,'textbox',...
|
|
[0.667666666666665 0.642857142857147 0.133523809523809 0.0603174603174607],...
|
|
'String',['\sigma = ',num2str(std_lvl(3))],...
|
|
'LineWidth',1.8,...
|
|
'LineStyle','none',...
|
|
'FontSize',12,...
|
|
'FitBoxToText','off');
|
|
|
|
% Create textbox
|
|
annotation(fig,'textbox',...
|
|
[0.671238095238093 0.442857142857148 0.133523809523809 0.0603174603174608],...
|
|
'String',['\sigma = ',num2str(std_lvl(2))],...
|
|
'LineWidth',1.8,...
|
|
'LineStyle','none',...
|
|
'FontSize',12,...
|
|
'FitBoxToText','off');
|
|
|
|
% Create textbox
|
|
annotation(fig,'textbox',...
|
|
[0.670047619047616 0.265079365079371 0.133523809523809 0.0603174603174608],...
|
|
'String',['\sigma = ',num2str(std_lvl(1))],...
|
|
'LineWidth',1.8,...
|
|
'LineStyle','none',...
|
|
'FontSize',12,...
|
|
'FitBoxToText','off');
|
|
end
|
|
|
|
% xlim([0, 2.6])
|
|
% ylim([-2 2])
|
|
xlabel('Time in $\mu$s');
|
|
ylabel('Normalized Amplitude');
|
|
|
|
end
|