The periodogram is a function that estimates the power spectral density of a signal. It calculates the relative importance of different frequencies in explaining the oscillation pattern of the signal. The periodogram can be modified by multiplying the input signal by a window function, which helps to smooth discontinuities and reduce leakage. The periodogram is useful for identifying dominant cyclical behavior in a series. It requires an ID column and does not work with null values.
------

SET SCHEMA DM_PAL;

DROP TABLE PAL_PERIODOGRAM_DATA_TBL;
CREATE COLUMN TABLE PAL_PERIODOGRAM_DATA_TBL (
    "ID" INTEGER,
    "X" DOUBLE);
INSERT INTO PAL_PERIODOGRAM_DATA_TBL VALUES (1, -2.0);
INSERT INTO PAL_PERIODOGRAM_DATA_TBL VALUES (2, 8.0);
INSERT INTO PAL_PERIODOGRAM_DATA_TBL VALUES (3, 6.0);
INSERT INTO PAL_PERIODOGRAM_DATA_TBL VALUES (4, 4.0);
INSERT INTO PAL_PERIODOGRAM_DATA_TBL VALUES (5, 1.0);
INSERT INTO PAL_PERIODOGRAM_DATA_TBL VALUES (6, 0.0);
INSERT INTO PAL_PERIODOGRAM_DATA_TBL VALUES (7, 3.0);
INSERT INTO PAL_PERIODOGRAM_DATA_TBL VALUES (8, 5.0);

DROP TABLE PAL_PERIODOGRAM_PARAMETER_TBL;
CREATE COLUMN TABLE PAL_PERIODOGRAM_PARAMETER_TBL (
    "PARAM_NAME" NVARCHAR(256),
    "INT_VALUE" INTEGER,
    "DOUBLE_VALUE" DOUBLE,
    "STRING_VALUE" NVARCHAR (1000)
);
INSERT INTO PAL_PERIODOGRAM_PARAMETER_TBL VALUES ('SAMPLING_RATE', NULL, 100, NULL);
INSERT INTO PAL_PERIODOGRAM_PARAMETER_TBL VALUES ('FREQ_RANGE', 1, NULL, NULL);
INSERT INTO PAL_PERIODOGRAM_PARAMETER_TBL VALUES ('WINDOW', NULL, NULL, 'hamming');

DROP TABLE PAL_PERIODOGRAM_RESULT_TBL;
CREATE COLUMN TABLE PAL_PERIODOGRAM_RESULT_TBL (
    "ID" INTEGER,
    "FREQ" DOUBLE,
    "PXX" DOUBLE
);

DO BEGIN
  lt_data = SELECT * FROM PAL_PERIODOGRAM_DATA_TBL;
  lt_param = SELECT * FROM PAL_PERIODOGRAM_PARAMETER_TBL;
  CALL _SYS_AFL.PAL_PERIODOGRAM (:lt_data, :lt_param, lt_result);
  INSERT INTO PAL_PERIODOGRAM_RESULT_TBL SELECT * FROM :lt_result;
END;

SELECT * FROM PAL_PERIODOGRAM_RESULT_TBL;
