function [x, info] = generate_desired_signal_v1_1(N)

               % Version 1.1 (01052026)

if nargin < 1
    N = 1e5;
end

%% Parameters
fs = 2e9;        % baseband sampling rate
BW = 200e6;      % signal bandwidth
M  = 16;         % 16-QAM

OSR = fs / BW;   % = 5
assert(mod(N,OSR)==0, 'N must be multiple of OSR (5)');

%% QAM symbols
data = randi([0 M-1], N/OSR, 1);
symbols = qammod(data, M, 'UnitAveragePower', true);

%% Upsample
x_up = upsample(symbols, OSR);

%% RRC filter
rolloff = 0.25;
span = 20;
rrc = rcosdesign(rolloff, span, OSR);

x = conv(x_up, rrc, 'same');

%% Normalize
x = x / rms(x);
x = x(:); 
%% Info
info.fs = fs;
info.BW = BW;
info.OSR = OSR;

end