restructure and organize
This commit is contained in:
@@ -462,6 +462,44 @@ classdef PAMmapper
|
||||
|
||||
end
|
||||
|
||||
function [out, levels] = splitByReferenceLevels(obj, data_in, reference_in, options)
|
||||
% Split received samples by the transmitted/reference PAM level.
|
||||
% Unlike separate_pamlevels, this does not decide the RX level.
|
||||
arguments
|
||||
obj
|
||||
data_in
|
||||
reference_in
|
||||
options.levels = []
|
||||
options.tolerance (1,1) double {mustBeNonnegative} = 0
|
||||
end
|
||||
|
||||
data = obj.toNumericVector(data_in);
|
||||
reference = obj.toNumericVector(reference_in);
|
||||
|
||||
if numel(data) ~= numel(reference)
|
||||
error("PAMmapper:LengthMismatch", ...
|
||||
"data_in and reference_in must have the same number of samples.");
|
||||
end
|
||||
|
||||
if isempty(options.levels)
|
||||
levels = unique(reference);
|
||||
else
|
||||
levels = options.levels(:).';
|
||||
end
|
||||
|
||||
out = NaN(numel(levels), numel(reference));
|
||||
|
||||
for levelIdx = 1:numel(levels)
|
||||
if options.tolerance == 0
|
||||
levelMask = reference == levels(levelIdx);
|
||||
else
|
||||
levelMask = abs(reference - levels(levelIdx)) <= options.tolerance;
|
||||
end
|
||||
|
||||
out(levelIdx, levelMask) = data(levelMask);
|
||||
end
|
||||
end
|
||||
|
||||
function [Signal_out] = quantize(obj,Signal_in,options)
|
||||
arguments
|
||||
obj
|
||||
@@ -621,5 +659,19 @@ classdef PAMmapper
|
||||
|
||||
end
|
||||
|
||||
methods (Access = private)
|
||||
|
||||
function values = toNumericVector(~, signalLike)
|
||||
if isa(signalLike, "Signal")
|
||||
values = signalLike.signal;
|
||||
else
|
||||
values = signalLike;
|
||||
end
|
||||
|
||||
values = values(:).';
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user