function [symbols_for_lvl,avg_for_lvl] = 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 plot_shit = 1; if isa(eq_signal,'Signal') options.f_sym = eq_signal.fs; eq_signal = eq_signal.signal; assert(~isempty(options.f_sym),'No fsym given'); end if isa(ref_symbols,'Signal') ref_symbols = ref_symbols.signal; end if plot_shit % 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 end 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); symbols_for_lvl = NaN(numel(levels),length(correct_symbols)); start = 1; ende = length(correct_symbols); for l = 1:numel(levels) ccnt = ccnt+2; level_amplitude = levels(l); symbols_for_lvl(l,correct_symbols==level_amplitude) = rx_symbols(correct_symbols==level_amplitude); std_lvl(l) = std(symbols_for_lvl(l,:),'omitnan'); xax_in_sec = ((1:length(correct_symbols)) / f_sym) * 1e6; if plot_shit scatter(xax_in_sec(start:ende),symbols_for_lvl(l,start:ende),10,'.','MarkerFaceAlpha',0.5,'MarkerEdgeAlpha',0.5,'MarkerEdgeColor',col(ccnt,:)); hold on; end end std_lvl = round(std_lvl,2); ccnt = 0; avg_for_lvl = NaN(numel(levels),length(correct_symbols)); % Add the windowed/ smoothed curves for l = 1:numel(levels) ccnt = ccnt+2; level_amplitude = levels(l); movmean = 1/250 .* movsum(rx_symbols(correct_symbols==level_amplitude),[250/2,250/2], 'Endpoints', 'fill'); avg_for_lvl(l,correct_symbols==level_amplitude) = movmean; nanx = isnan(avg_for_lvl(l,:)); t = 1:numel(avg_for_lvl(l,:)); avg_for_lvl(l,nanx) = interp1(t(~nanx), avg_for_lvl(l,~nanx), t(nanx)); xax_in_sec = ((1:length(correct_symbols)) / f_sym) * 1e6; % xax_in_sec = 1:length(correct_symbols); if plot_shit plot(xax_in_sec(start:ende),avg_for_lvl(l,start:ende),'Color',col(ccnt,:)); end hold on end 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 if plot_shit yline(levels); xlabel('Time in $\mu$s'); ylabel('Normalized Amplitude'); ylim([-3 3]); end end