Nice, active sessions in ASH are able to include/exclude BACKGROUND processes. Here is my code checking AAS and Logic CPUs as below:
-- Active Sessions (in ASH) including BACKGROUND processes in Last 1 Hour.
SET LINESIZE 200
SET PAGESIZE 200
COLUMN sample_time FORMAT a19
COLUMN stat_name   FORMAT a15
ALTER SESSION SET nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
WITH ash AS
(
  SELECT TRUNC(sample_time, 'mi') sample_time
         -- TO_CHAR(CAST(sample_time AS DATE), 'yyyy-mm-dd hh24:mi') sample_time
       , 'Active Sessions' stat_name
       , ROUND(COUNT(*)/6e1, 2) stat_value
  FROM v$active_session_history
  WHERE session_type IN ('BACKGROUND', 'FOREGROUND')  -- including background processes
  GROUP BY TRUNC(sample_time, 'mi')
           -- TO_CHAR(CAST(sample_time AS DATE), 'yyyy-mm-dd hh24:mi')
  ORDER BY sample_time
)
SELECT * FROM ash
WHERE sample_time >= SYSDATE - INTERVAL '60' MINUTE
;
-- Active Sessions (in ASH) excluding BACKGROUND processes in Last 1 Hour.
SET LINESIZE 200
SET PAGESIZE 200
COLUMN sample_time FORMAT a19
COLUMN stat_name   FORMAT a15
ALTER SESSION SET nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
WITH ash AS
(
  SELECT TRUNC(sample_time, 'mi') sample_time
         -- TO_CHAR(CAST(sample_time AS DATE), 'yyyy-mm-dd hh24:mi') sample_time
       , 'Active Sessions' stat_name
       , ROUND(COUNT(*)/6e1, 2) stat_value
  FROM v$active_session_history
  WHERE session_type = 'FOREGROUND'  -- excluding background processes
  GROUP BY TRUNC(sample_time, 'mi')
           -- TO_CHAR(CAST(sample_time AS DATE), 'yyyy-mm-dd hh24:mi')
  ORDER BY sample_time
)
SELECT * FROM ash
WHERE sample_time >= SYSDATE - INTERVAL '60' MINUTE
;
By the way I can also check "type = 'USER'",
SQL> select distinct type from v$session;
TYPE
--------------------
USER
BACKGROUND
SQL> select count(*) from v$session where status = 'ACTIVE' and type = 'USER';
COUNT(*)
-----------
                2
Best Regards
Quanwen Zhao