After some thinking I managed to create an answer that works for my problem. It does not center around the frequency f0 automatically but there is 4 design parameters that you can tinker with. My plan is to run the design parameters through an optimizer. So I can find the parameters that minimize the difference between the sum of the energy in each partition.
N_partition = 20; % number of partitions
N_switch = -2; % switches how how many partitions there are in
% the lower vs the upper part of the signal
N_lower = N_partition/2 + N_switch; % number of partitions in the lower part of the signal
N_upper = N_partition/2 - N_switch; % number of partitions in the upper part of the signal
diff_lower_upper = 0.05; % design value that decides how big the first partition in the signal is
a_upper = 25; % design value that decides the slope appearance for the lower part of the signal
a_lower = 2; % design value that decides the slope appearance for the upper part of the signal
vec_u = 0:1/N_upper:1; % vector for the lower part
vec_l = 0:1/N_lower:1; % vector for the upper part
part_upper = ((a_upper.^vec_u-1)/(a_upper-1)); % the change vector for the upper part of the vector, exponential
part_lower = ((a_lower.^vec_l-1)/(a_lower-1)); % the change vector for the lower part of the vector, exponential
part_lower = fliplr(part_lower).*diff_lower_upper; % the change vector but corrected for the diff_lower_upper design value
change_vec = [part_lower(1:end-1) part_upper(2:end)]; % the change vector, removes the zero value from part_upper and part_lower
nl = change_vec./sum(change_vec); % normalize the change vector, this is our normalized length vector
For my case, this creates the following accumulated frequency/partition. I wanted high "resolution" around my f0 that is 1000Hz and then the partitions should grow in size the farther away they come from f0 which they do. Thanks to everyone that commented!
