Work-in-progress repo for ambisonics extensions for OM-SoX
Alexander Nguyen
yesterday 0a4704ba0a72d9dd89168f2145df7d4fff4a3336
feat: remove unnecessary parameter "normalization"
1 files modified
133 ■■■■■ changed files
sources/classes/sox-hoadecode.lisp 133 ●●●●● patch | view | raw | blame | history
sources/classes/sox-hoadecode.lisp
@@ -428,18 +428,17 @@
        nil)
)
(defun allrad-ambisonics-matrix (virtual_positions truncation_order normalization decoder_flavor)
(defun allrad-ambisonics-matrix (virtual_positions truncation_order decoder_flavor)
"Returns a (list-length virtual_positions) times (expt (+ truncation_order 1) 2) matrix, which represents a higher-order Ambisonics sampling decoder.
In the case of AllRAD, the virtual_positons origin from a t-design. 
Parameters:
- truncation_order : 0, 1, ...
- normalization : :sn3d, :n3d
- truncation_order : 0, 1, ..., 7
- decoder_flavor : :maxre, :basic (otherwise)
    
Example:
    
(allrad-ambisonics-matrix  '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) 3 :sn3d :basic)
(allrad-ambisonics-matrix  '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) 3 :basic)
=>  #2A((0.06249999999999999d0 0.0d0 0.10825317547305481d0 0.0d0 0.0d0 0.0d0
        0.13975424859373684d0 0.0d0 0.0d0 0.0d0 0.0d0 0.0d0 0.1653594569415369d0
        0.0d0 0.0d0 0.0d0)
@@ -461,10 +460,10 @@
        0.13975424859373684d0 0.0d0 0.0d0 0.0d0 0.0d0 0.0d0 0.1653594569415369d0
        0.0d0 0.0d0 0.0d0))
    
(allrad-ambisonics-matrix (subseq (sox-hoadecode-t5200-spherical-positions) 0 3) 0 :sn3d :basic)
(allrad-ambisonics-matrix (subseq (sox-hoadecode-t5200-spherical-positions) 0 3) 0 :basic)
=> #2A((0.9999999999999999d0) (0.9999999999999999d0) (0.9999999999999999d0))
    
(allrad-ambisonics-matrix (subseq (sox-hoadecode-t5200-spherical-positions) 0 1) 3 :sn3d :basic)
(allrad-ambisonics-matrix (subseq (sox-hoadecode-t5200-spherical-positions) 0 1) 3 :basic)
=>  #2A((0.06249999999999999d0 0.09282971402842526d0 0.055684649696437986d0
        -7.83569770838977d-4 -0.0015024811881936859d0 0.10677433172348148d0
        -0.01440868160163194d0 -9.012754107422361d-4 -0.08899332689825591d0
@@ -482,13 +481,12 @@
                                (degree (- acn (expt order 2) order))
                                (j_azimuth    (first  (nth i virtual_positions)))
                                (j_colatitude (second (nth i virtual_positions)))
                                (azimuth_deg   (* -1 (sox-hoaencode-rad-to-deg j_azimuth)))
                                (azimuth_deg   (* -1d0 (sox-hoaencode-rad-to-deg j_azimuth)))
                                (elevation_deg (sox-hoaencode-rad-to-deg (- (/ pi 2) j_colatitude)))
                                ;(correction (if (eq normalization :sn3d) 1 (sqrt (+ (* 2 truncation_order) 1d0))))
                                (correction (* (sqrt (* 4 pi)) (/ 1 (expt (+ truncation_order 1) 2))))
                                (correction (* (sqrt (* 4 pi)) (/ 1d0 (expt (+ truncation_order 1) 2))))
                                (flavor-correction (if (eq decoder_flavor :maxre) 
                                    (* (allrad-maxre-energy-correction truncation_order) (allrad-maxre-factor order truncation_order)) 
                                    1))
                                    1d0))
                            )
                            (progn 
                                ;(print (list i acn order degree j_azimuth j_colatitude azimuth_deg elevation_deg correction (sox-hoaencode-gain-single-component order degree azimuth_deg elevation_deg :n3d)))
@@ -501,12 +499,12 @@
        js
    ))
(defun allrad-decoder-matrix (truncation_order loudspeakers loudspeakers_imaginary_idxs normalization decoder-flavor)
(defun allrad-decoder-matrix (truncation_order loudspeakers loudspeakers_imaginary_idxs decoder-flavor)
"Returns the (list-length loudspeakers) times (expt (+ truncation_order 1) 2) matrix to decode a truncation_order-th Ambisonics signal using AllRAD and the given loudspeakers layout.
    
Example:
(allrad-decoder-matrix 0 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :sn3d :basic)
(allrad-decoder-matrix 0 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :basic)
=>  #2A((0.4082521539974241d0)
        (0.4082497204809079d0)
        (0.408252153997083d0)
@@ -514,7 +512,7 @@
        (0.40824299685796434d0)
        (0.4082429968576299d0))
(allrad-decoder-matrix 1 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :n3d :basic)
(allrad-decoder-matrix 1 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :basic)
=>  #2A((0.26726180898030116d0 -4.121735356202743d-6 3.1176420689701896d-6 0.30860515455826876d0)
        (0.26726021588147736d0 0.30860530309758993d0 -5.841208957330852d-6 -4.5668569247884075d-6)
        (0.2672618089800778d0 -4.12173563713413d-6 3.1176426062467998d-6 -0.3086053865522143d0)
@@ -522,15 +520,15 @@
        (0.2672558142693533d0 3.0372719711827937d-6 0.30860537041237485d0 -1.5744514926730053d-6)
        (0.26725581426913414d0 3.0372717348746766d-6 -0.30860517069778515d0 -1.5744509553960298d-6))
(allrad-decoder-matrix 1 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :n3d :maxre)
=>  #2A((0.33964966990487044d0 -3.025221988304797d-6 2.2882496142125288d-6 0.22650631799273105d0)
        (0.33964764531523056d0 0.2265064270158442d0 -4.287260643603554d-6 -3.3519269900538543d-6)
        (0.3396496699045866d0 -3.025222194500096d-6 2.28825000855551d-6 -0.22650648826887057d0)
        (0.33964764531610314d0 -0.22650637924518757d0 -4.287260817050707d-6 -3.351927196251641d-6)
        (0.3396420515264632d0 2.2292605316972416d-6 0.22650647642274438d0 -1.155597063743201d-6)
        (0.33964205152618476d0 2.229260358254026d-6 -0.22650632983861987d0 -1.1555966693972261d-6))
(allrad-decoder-matrix 1 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :maxre)
=>  #2A((0.283595435059375d0 -2.5259531274232627d-6 1.9106073179720865d-6 0.1891247467216354d0)
        (0.28359374459878983d0 0.18912483775207045d0 -3.5797106700448802d-6 -2.798740223412633d-6)
        (0.28359543505913803d0 -2.5259532995890286d-6 1.9106076472344984d-6 -0.18912488889617626d0)
        (0.28359374459951836d0 -0.18912479786526545d0 -3.579710814867104d-6 -2.7987403955804756d-6)
        (0.28358907398344796d0 1.8613535250142968d-6 0.1891248790050808d0 -9.648825866292707d-7)
        (0.28358907398321553d0 1.8613533801953594d-6 -0.1891247566125327d0 -9.648822573643599d-7))
    
(allrad-decoder-matrix 3 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :sn3d :basic)
(allrad-decoder-matrix 3 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :basic)
=>  #2A((0.23132635066908433d0 -3.567535526350099d-6 2.698450501623429d-6
        0.26711075732820044d0 -4.678820125933257d-8 -9.537977397150688d-7
        -0.06466023863439527d0 -4.0231181660137245d-8 0.1119858835087529d0
@@ -567,11 +565,49 @@
        8.756409738692105d-7 3.379139033873876d-7 -2.46437191352441d-6
        -1.9828635214785303d-7 1.276874475867459d-6 2.7490369427357343d-8
        9.989259368678423d-6))
(allrad-decoder-matrix 3 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :maxre)
=>  #2A((0.2533230792043828d0 -3.365881543553514d-6 2.545921315295834d-6
        0.25201239385994545d0 -3.1429176720214764d-8 -6.406973747722899d-7
        -0.0434344132095367d0 -2.7024610563444778d-8 0.0752246085180212d0
        1.7714757177916963d-6 -7.433357521805747d-9 2.3733612939032d-6
        3.3865573258643063d-7 -1.2192837457997435d-7 -8.089130839958694d-7
        3.346211396024917d-9)
        (0.2533215691917811d0 0.2520125151597661d0 -4.770033911069408d-6
        -3.7293756407913646d-6 -6.688340503767247d-8 6.321831833648067d-8
        -0.043434338228481695d0 -4.187871124616957d-6 -0.07522584840913762d0
        8.863958110832968d-8 -5.2397495422314076d-8 -7.903969248136581d-8
        1.5037563611473955d-6 -1.2893036731883852d-6 -3.173044423357787d-6
        -9.523987184423471d-7)
        (0.253323079204171d0 -3.3658817729679996d-6 2.545921754046473d-6
        -0.2520125833102792d0 -3.1428426912745206d-8 -6.406973827726145d-7
        -0.043434413209577104d0 -2.702460517456628d-8 0.07522460851798046d0
        1.7714757507931543d-6 -7.43336542154508d-9 2.3733612652705326d-6
        3.386556161287278d-7 -1.2192832916888707d-7 -8.089128631529597d-7
        3.346085090992076d-9)
        (0.25332156919243193d0 -0.2520124620098247d0 -4.770034104041785d-6
        -3.7293758702085765d-6 -6.688350862493299d-8 6.321804314853169d-8
        -0.04343433822867709d0 -4.187871132620146d-6 -0.07522584840901597d0
        8.863946790007844d-8 -5.2397441414600685d-8 -7.903973107689815d-8
        1.5037563556160596d-6 -1.2893037018213535d-6 -3.1730443543304255d-6
        -9.523985425694625d-7)
        (0.2533173971406339d0 2.480289680698913d-6 0.25201257013020273d0
        -1.2857247645547573d-6 -2.9846150644703517d-6 -5.9609180882675075d-9
        0.08686753052552247d0 1.78407371880414d-7 -8.912552920180471d-7
        2.938387140949082d-7 1.1339386174519169d-7 -8.269688592188391d-7
        -6.653889359163557d-8 4.28480469006292d-7 9.225020307251684d-9
        3.352094528319654d-6)
        (0.2533173971404264d0 2.480289487726576d-6 -0.252012407039758d0
        -1.2857243258027554d-6 -2.9846150724722567d-6 -5.9606283270271324d-9
        0.08686753052547144d0 1.7840715759567418d-7 -8.912551517286949d-7
        2.9383873904887017d-7 1.1339372898272259d-7 -8.269689944009479d-7
        -6.653892796798569d-8 4.2848061832272384d-7 9.224940049908853d-9
        3.35209459642981d-6))
"
    (let*
        (
            (vbap-matrix        (allrad-vbap-matrix       (sox-hoadecode-t5200-spherical-positions) loudspeakers loudspeakers_imaginary_idxs))
            (ambisonics-matrix  (allrad-ambisonics-matrix (sox-hoadecode-t5200-spherical-positions) truncation_order normalization decoder-flavor))
            (ambisonics-matrix  (allrad-ambisonics-matrix (sox-hoadecode-t5200-spherical-positions) truncation_order decoder-flavor))
            (allrad-matrix      (lla:mm vbap-matrix ambisonics-matrix))
            (max-gains (loop for i from 0 to (1- (list-length loudspeakers))
                collect (if (find i loudspeakers_imaginary_idxs)
@@ -626,33 +662,23 @@
        )
    ))
(defun allrad-decode-signal-remix-parameters (signal_normalization truncation_order loudspeakers loudspeakers_imaginary_idxs normalization decoder-flavor)
(defun allrad-decode-signal-remix-parameters (signal_normalization truncation_order loudspeakers loudspeakers_imaginary_idxs decoder-flavor)
"Returns the parameters for SoX's remix effect.
    
Example:
(allrad-decode-signal-remix-parameters :sn3d 0 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :sn3d :basic)
=> 1v0.40825215 1v0.4082497 1v0.40825215 1v0.4082497 1v0.408243 1v0.408243
(allrad-decode-signal-remix-parameters :n3d 0 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :n3d :basic)
(allrad-decode-signal-remix-parameters :sn3d 0 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :basic)
=> 1v0.40825215 1v0.4082497 1v0.40825215 1v0.4082497 1v0.408243 1v0.408243
(allrad-decode-signal-remix-parameters :sn3d 1 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :sn3d :basic)
(allrad-decode-signal-remix-parameters :sn3d 1 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :basic)
=> 1v0.2672618,2v-7.139055e-6,3v5.3999142e-6,4v0.5345198 1v0.26726022,2v0.5345201,3v-1.0117271e-5,4v-7.910028e-6 1v0.2672618,2v-7.1390555e-6,3v5.3999156e-6,4v-0.5345202 1v0.26726022,2v-0.53452,3v-1.0117271e-5,4v-7.910029e-6 1v0.2672558,2v5.2607093e-6,3v0.5345202,4v-2.72703e-6 1v0.2672558,2v5.260709e-6,3v-0.53451985,4v-2.7270291e-6
(allrad-decode-signal-remix-parameters :n3d 1 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :n3d :basic)
=> 1v0.33964968,2v-5.239838e-6,3v3.9633646e-6,4v0.39232045 1v0.33964765,2v0.39232063,3v-7.425753e-6,4v-5.805708e-6 1v0.33964968,2v-5.2398386e-6,3v3.963365e-6,4v-0.39232075 1v0.33964765,2v-0.39232054,3v-7.4257537e-6,4v-5.805708e-6 1v0.33964205,2v3.8611925e-6,3v0.39232072,4v-2.0015527e-6 1v0.33964205,2v3.861192e-6,3v-0.39232048,4v-2.001552e-6
   
(allrad-decode-signal-remix-parameters :sn3d 1 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :sn3d :maxre)
=> 1v0.33964968,2v-5.239838e-6,3v3.9633646e-6,4v0.39232045 1v0.33964765,2v0.39232063,3v-7.425753e-6,4v-5.805708e-6 1v0.33964968,2v-5.2398386e-6,3v3.963365e-6,4v-0.39232075 1v0.33964765,2v-0.39232054,3v-7.4257537e-6,4v-5.805708e-6 1v0.33964205,2v3.8611925e-6,3v0.39232072,4v-2.0015527e-6 1v0.33964205,2v3.861192e-6,3v-0.39232048,4v-2.001552e-6
(allrad-decode-signal-remix-parameters :n3d 1 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :n3d :maxre)
=>  1v0.33964968,2v-3.025222e-6,3v2.2882496e-6,4v0.22650632 1v0.33964765,2v0.22650643,3v-4.2872607e-6,4v-3.351927e-6 1v0.33964968,2v-3.0252222e-6,3v2.28825e-6,4v-0.22650649 1v0.33964765,2v-0.22650638,3v-4.2872607e-6,4v-3.3519273e-6 1v0.33964205,2v2.2292606e-6,3v0.22650647,4v-1.155597e-6 1v0.33964205,2v2.2292604e-6,3v-0.22650632,4v-1.1555967e-6
(allrad-decode-signal-remix-parameters :sn3d 1 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :maxre)
=> 1v0.28359544,2v-4.3750792e-6,3v3.309269e-6,4v0.327573661v0.28359374,2v0.32757384,3v-6.200241e-6,4v-4.8475604e-61v0.28359544,2v-4.3750792e-6,3v3.3092695e-6,4v-0.327573931v0.28359374,2v-0.32757375,3v-6.200241e-6,4v-4.8475604e-61v0.28358907,2v3.2239589e-6,3v0.3275739,4v-1.6712256e-61v0.28358907,2v3.2239586e-6,3v-0.3275737,4v-1.671225e-6
"
    (let* 
        (
            (decoder-matrix (allrad-decoder-matrix truncation_order loudspeakers loudspeakers_imaginary_idxs normalization decoder-flavor))
            (decoder-matrix (allrad-decoder-matrix truncation_order loudspeakers loudspeakers_imaginary_idxs decoder-flavor))
            (signal-normalization-correction 
                (let*
                    (
@@ -680,7 +706,7 @@
            (
                (str "")
            )
            (progn
            (progn
                (loop for loudspeaker from 0 to (1- (aops:nrow signal-decoder-matrix)) do
                    (progn
                        (let*
@@ -694,11 +720,11 @@
                                    )
                                ))
                            )
                            (setf str (str:concat str (format nil "~{~A~^,~}" channel-to-gain-list)))
                            (setf str (str:concat str (format nil "~{~A~^,~} " channel-to-gain-list)))
                        )
                    )
                )
                str
                (subseq str 0 (1- (length str)))
            )
        )
    )
@@ -708,7 +734,9 @@
(defun sox-hoadecode-mut210-cartesian-positions-and-imaginary-idxs ()
"Returns a list of two lists: the first containing cartesian coordinates of the 61 real loudspeakers (of the 3D Sound Lab (room MUT 210) of the ComputerStudio at Karlsruhe University of Music), 
plus 1 virtual loudspeaker, the second list containing the index value of the virtual loudspeaker."
plus 1 virtual loudspeaker, the second list containing the index value of the virtual loudspeaker.
Note: The coordinates are taken from the IEM's exported json file; the loudspeaker positions there are slightly different (i.e., rounded) compared to what other documents report."
    (list 
        (mapcar #'sph2cart
            '((0.0d0 1.5707963267948966d0)
@@ -778,19 +806,18 @@
; TESTS
; (allrad-vbap-matrix (subseq (sox-hoadecode-t5200-spherical-positions) 0 4) (first (sox-hoadecode-mut210-cartesian-positions-and-imaginary-idxs)) (second (sox-hoadecode-mut210-cartesian-positions-and-imaginary-idxs)))
; (allrad-ambisonics-matrix (subseq (sox-hoadecode-t5200-spherical-positions) 0 4) 3 :sn3d :basic)
; (allrad-decoder-matrix 3 (first (sox-hoadecode-mut210-cartesian-positions-and-imaginary-idxs)) (second (sox-hoadecode-mut210-cartesian-positions-and-imaginary-idxs)) :sn3d :basic)
; (allrad-ambisonics-matrix (subseq (sox-hoadecode-t5200-spherical-positions) 0 4) 3 :basic)
; (allrad-decoder-matrix 3 (first (sox-hoadecode-mut210-cartesian-positions-and-imaginary-idxs)) (second (sox-hoadecode-mut210-cartesian-positions-and-imaginary-idxs)) :basic)
; 3rd-basic-mut210        : (print (allrad-decode-signal-remix-parameters :n3d 3 (first (sox-hoadecode-mut210-cartesian-positions-and-imaginary-idxs)) (second (sox-hoadecode-mut210-cartesian-positions-and-imaginary-idxs)) :sn3d :basic))
; 3rd-basic-octahedron    : (print (allrad-decode-signal-remix-parameters :n3d 3 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :sn3d :basic))
; 3rd-maxre-mut210        : (print (allrad-decode-signal-remix-parameters :n3d 3 (first (sox-hoadecode-mut210-cartesian-positions-and-imaginary-idxs)) (second (sox-hoadecode-mut210-cartesian-positions-and-imaginary-idxs)) :sn3d :maxre))
; 3rd-maxre-octahedron    : (print (allrad-decode-signal-remix-parameters :n3d 3 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :sn3d :maxre))
; 3rd-basic-mut210        : (print (allrad-decode-signal-remix-parameters :n3d 3 (first (sox-hoadecode-mut210-cartesian-positions-and-imaginary-idxs)) (second (sox-hoadecode-mut210-cartesian-positions-and-imaginary-idxs)) :basic))
; 3rd-basic-octahedron    : (print (allrad-decode-signal-remix-parameters :n3d 3 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :basic))
; 3rd-maxre-mut210        : (print (allrad-decode-signal-remix-parameters :n3d 3 (first (sox-hoadecode-mut210-cartesian-positions-and-imaginary-idxs)) (second (sox-hoadecode-mut210-cartesian-positions-and-imaginary-idxs)) :maxre))
; 3rd-maxre-octahedron    : (print (allrad-decode-signal-remix-parameters :n3d 3 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :maxre))
; TEST FILES
; ... using !!! SN3D !!! input ... 
; Use N3D if you want to reproduce IEM's matrix.
; 3rd-basic-mut210        : (print (allrad-decode-signal-remix-parameters :sn3d 3 (first (sox-hoadecode-mut210-cartesian-positions-and-imaginary-idxs)) (second (sox-hoadecode-mut210-cartesian-positions-and-imaginary-idxs)) :sn3d :basic))
; 3rd-basic-octahedron    : (print (allrad-decode-signal-remix-parameters :sn3d 3 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :sn3d :basic))
; 3rd-maxre-mut210        : (print (allrad-decode-signal-remix-parameters :sn3d 3 (first (sox-hoadecode-mut210-cartesian-positions-and-imaginary-idxs)) (second (sox-hoadecode-mut210-cartesian-positions-and-imaginary-idxs)) :sn3d :maxre))
; 3rd-maxre-octahedron    : (print (allrad-decode-signal-remix-parameters :sn3d 3 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :sn3d :maxre))
; 3rd-basic-mut210        : (print (allrad-decode-signal-remix-parameters :sn3d 3 (first (sox-hoadecode-mut210-cartesian-positions-and-imaginary-idxs)) (second (sox-hoadecode-mut210-cartesian-positions-and-imaginary-idxs)) :basic))
; 3rd-basic-octahedron    : (print (allrad-decode-signal-remix-parameters :sn3d 3 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :basic))
; 3rd-maxre-mut210        : (print (allrad-decode-signal-remix-parameters :sn3d 3 (first (sox-hoadecode-mut210-cartesian-positions-and-imaginary-idxs)) (second (sox-hoadecode-mut210-cartesian-positions-and-imaginary-idxs)) :maxre))
; 3rd-maxre-octahedron    : (print (allrad-decode-signal-remix-parameters :sn3d 3 '((1 0 0) (0 1 0) (-1 0 0) (0 -1 0) (0 0 1) (0 0 -1)) '() :maxre))