Kinda finished analysis and figure for Log-HP invariance (WIP).

This commit is contained in:
j-hartling
2026-03-03 16:23:17 +01:00
parent 4b76478408
commit 933d28b5f8
13 changed files with 484 additions and 349 deletions

Binary file not shown.

View File

@@ -248,15 +248,17 @@
\newlabel{eq:toy_log}{{12}{11}{}{}{}} \newlabel{eq:toy_log}{{12}{11}{}{}{}}
\newlabel{eq:toy_highpass}{{13}{11}{}{}{}} \newlabel{eq:toy_highpass}{{13}{11}{}{}{}}
\newlabel{eq:toy_snr}{{14}{11}{}{}{}} \newlabel{eq:toy_snr}{{14}{11}{}{}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Thresholding nonlinearity \& temporal averaging}{11}{}\protected@file@percent } \@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces \textbf {Intensity invariance by logarithmic compression and adaptation.} \textbf {a}:~Synthetic envelopes resulting from the mixture of song component $s(t)$ with scale $\alpha $ and noise component $\eta (t)$ with fixed scale. \textbf {b}:~Corresponding logarithmically scaled envelopes. \textbf {c}:~Corresponding intensity-adapted envelopes. \textbf {d}:~Absolute SNRs of each representation relative to the representation without song component ($\alpha =0$). \textbf {e}:~Same SNRs as in \textbf {d} but normalized to the maximum SNR for each representation. \textbf {f}:~Relative amplification of normalized SNRs relative to the normalized SNRs of the initial envelope. }}{12}{}\protected@file@percent }
\newlabel{eq:pdf_split}{{15}{12}{}{}{}} \newlabel{fig:inv_log-hp}{{4}{12}{}{}{}}
\newlabel{eq:feat_avg}{{16}{12}{}{}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Thresholding nonlinearity \& temporal averaging}{12}{}\protected@file@percent }
\newlabel{eq:feat_prop}{{17}{12}{}{}{}} \newlabel{eq:pdf_split}{{15}{13}{}{}{}}
\newlabel{eq:feat_avg}{{16}{13}{}{}{}}
\newlabel{eq:feat_prop}{{17}{13}{}{}{}}
\abx@aux@cite{0}{stumpner1991auditory} \abx@aux@cite{0}{stumpner1991auditory}
\abx@aux@segm{0}{0}{stumpner1991auditory} \abx@aux@segm{0}{0}{stumpner1991auditory}
\@writefile{toc}{\contentsline {section}{\numberline {4}Discriminating species-specific song\\patterns in feature space}{13}{}\protected@file@percent } \@writefile{toc}{\contentsline {section}{\numberline {4}Discriminating species-specific song\\patterns in feature space}{14}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {5}Conclusions \& outlook}{13}{}\protected@file@percent } \@writefile{toc}{\contentsline {section}{\numberline {5}Conclusions \& outlook}{14}{}\protected@file@percent }
\abx@aux@page{73}{13} \abx@aux@page{73}{14}
\gdef\svg@ink@ver@settings{{\m@ne }{inkscape}{\m@ne }} \gdef\svg@ink@ver@settings{{\m@ne }{inkscape}{\m@ne }}
\abx@aux@read@bbl@mdfivesum{1380DC8C93D2855FDB132CC5A40AD52F} \abx@aux@read@bbl@mdfivesum{1380DC8C93D2855FDB132CC5A40AD52F}
\gdef \@abspage@last{14} \gdef \@abspage@last{15}

138
main.blg
View File

@@ -1,71 +1,71 @@
[0] Config.pm:307> INFO - This is Biber 2.19 [0] Config.pm:307> INFO - This is Biber 2.19
[0] Config.pm:310> INFO - Logfile is 'main.blg' [0] Config.pm:310> INFO - Logfile is 'main.blg'
[36] biber:340> INFO - === Fr Feb 27, 2026, 16:08:08 [38] biber:340> INFO - === Di Mär 3, 2026, 16:21:37
[42] Biber.pm:419> INFO - Reading 'main.bcf' [45] Biber.pm:419> INFO - Reading 'main.bcf'
[70] Biber.pm:979> INFO - Found 55 citekeys in bib section 0 [75] Biber.pm:979> INFO - Found 55 citekeys in bib section 0
[75] Biber.pm:4419> INFO - Processing section 0 [82] Biber.pm:4419> INFO - Processing section 0
[80] Biber.pm:4610> INFO - Looking for bibtex file 'cite.bib' for section 0 [87] Biber.pm:4610> INFO - Looking for bibtex file 'cite.bib' for section 0
[81] bibtex.pm:1713> INFO - LaTeX decoding ... [88] bibtex.pm:1713> INFO - LaTeX decoding ...
[110] bibtex.pm:1519> INFO - Found BibTeX data source 'cite.bib' [120] bibtex.pm:1519> INFO - Found BibTeX data source 'cite.bib'
[276] UCollate.pm:68> INFO - Overriding locale 'en-US' defaults 'normalization = NFD' with 'normalization = prenormalized' [303] UCollate.pm:68> INFO - Overriding locale 'en-US' defaults 'normalization = NFD' with 'normalization = prenormalized'
[276] UCollate.pm:68> INFO - Overriding locale 'en-US' defaults 'variable = shifted' with 'variable = non-ignorable' [303] UCollate.pm:68> INFO - Overriding locale 'en-US' defaults 'variable = shifted' with 'variable = non-ignorable'
[276] Biber.pm:4239> INFO - Sorting list 'nyt/global//global/global' of type 'entry' with template 'nyt' and locale 'en-US' [303] Biber.pm:4239> INFO - Sorting list 'nyt/global//global/global' of type 'entry' with template 'nyt' and locale 'en-US'
[276] Biber.pm:4245> INFO - No sort tailoring available for locale 'en-US' [303] Biber.pm:4245> INFO - No sort tailoring available for locale 'en-US'
[297] bbl.pm:660> INFO - Writing 'main.bbl' with encoding 'UTF-8' [327] bbl.pm:660> INFO - Writing 'main.bbl' with encoding 'UTF-8'
[307] bbl.pm:763> INFO - Output to main.bbl [337] bbl.pm:763> INFO - Output to main.bbl
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 10, warning: 6 characters of junk seen at toplevel [337] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 10, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 21, warning: 6 characters of junk seen at toplevel [337] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 21, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 38, warning: 6 characters of junk seen at toplevel [337] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 38, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 49, warning: 6 characters of junk seen at toplevel [337] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 49, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 58, warning: 6 characters of junk seen at toplevel [337] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 58, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 73, warning: 6 characters of junk seen at toplevel [337] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 73, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 82, warning: 6 characters of junk seen at toplevel [337] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 82, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 91, warning: 6 characters of junk seen at toplevel [337] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 91, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 100, warning: 6 characters of junk seen at toplevel [337] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 100, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 109, warning: 6 characters of junk seen at toplevel [337] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 109, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 118, warning: 6 characters of junk seen at toplevel [337] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 118, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 127, warning: 6 characters of junk seen at toplevel [337] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 127, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 136, warning: 6 characters of junk seen at toplevel [337] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 136, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 157, warning: 6 characters of junk seen at toplevel [337] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 157, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 178, warning: 6 characters of junk seen at toplevel [337] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 178, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 187, warning: 6 characters of junk seen at toplevel [337] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 187, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 196, warning: 6 characters of junk seen at toplevel [337] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 196, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 207, warning: 6 characters of junk seen at toplevel [337] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 207, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 218, warning: 6 characters of junk seen at toplevel [337] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 218, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 229, warning: 6 characters of junk seen at toplevel [337] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 229, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 240, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 240, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 249, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 249, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 258, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 258, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 269, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 269, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 278, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 278, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 289, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 289, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 300, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 300, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 309, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 309, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 328, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 328, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 337, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 337, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 400, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 400, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 419, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 419, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 428, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 428, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 437, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 437, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 456, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 456, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 491, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 491, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 526, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 526, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 535, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 535, warning: 6 characters of junk seen at toplevel
[307] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 556, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 556, warning: 6 characters of junk seen at toplevel
[308] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 565, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 565, warning: 6 characters of junk seen at toplevel
[308] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 576, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 576, warning: 6 characters of junk seen at toplevel
[308] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 587, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 587, warning: 6 characters of junk seen at toplevel
[308] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 619, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 619, warning: 6 characters of junk seen at toplevel
[308] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 648, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 648, warning: 6 characters of junk seen at toplevel
[308] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 658, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 658, warning: 6 characters of junk seen at toplevel
[308] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 667, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 667, warning: 6 characters of junk seen at toplevel
[308] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 688, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 688, warning: 6 characters of junk seen at toplevel
[308] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 709, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 709, warning: 6 characters of junk seen at toplevel
[308] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 720, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 720, warning: 6 characters of junk seen at toplevel
[308] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 729, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 729, warning: 6 characters of junk seen at toplevel
[308] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 749, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 749, warning: 6 characters of junk seen at toplevel
[308] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 766, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 766, warning: 6 characters of junk seen at toplevel
[308] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 775, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 775, warning: 6 characters of junk seen at toplevel
[308] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 800, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 800, warning: 6 characters of junk seen at toplevel
[308] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_Q3WE/347c261ec4135a5723bef5c751f5078f_25304.utf8, line 817, warning: 6 characters of junk seen at toplevel [338] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_rB4F/347c261ec4135a5723bef5c751f5078f_81147.utf8, line 817, warning: 6 characters of junk seen at toplevel
[308] Biber.pm:133> INFO - WARNINGS: 55 [338] Biber.pm:133> INFO - WARNINGS: 55

View File

@@ -1,14 +1,14 @@
# Fdb version 4 # Fdb version 4
["biber main"] 1772204888.14684 "main.bcf" "main.bbl" "main" 1772204926.70326 0 ["biber main"] 1772551296.80409 "main.bcf" "main.bbl" "main" 1772551360.62635 0
"cite.bib" 1770904753.08918 27483 4290db0c91f7b5055e25472ef913f6b4 "" "cite.bib" 1770904753.08918 27483 4290db0c91f7b5055e25472ef913f6b4 ""
"main.bcf" 1772204926.65235 112931 2a478116d80ebb1ada7083a24facd6e3 "pdflatex" "main.bcf" 1772551360.57805 112931 2a478116d80ebb1ada7083a24facd6e3 "pdflatex"
(generated) (generated)
"main.bbl" "main.bbl"
"main.blg" "main.blg"
(rewritten before read) (rewritten before read)
["pdflatex"] 1772204925.84696 "/home/hartling/phd/paper/paper_2025/main.tex" "main.pdf" "main" 1772204926.70347 0 ["pdflatex"] 1772551359.77359 "/home/hartling/phd/paper/paper_2025/main.tex" "main.pdf" "main" 1772551360.62655 0
"/etc/texmf/web2c/texmf.cnf" 1761560044.43676 475 c0e671620eb5563b2130f56340a5fde8 "" "/etc/texmf/web2c/texmf.cnf" 1761560044.43676 475 c0e671620eb5563b2130f56340a5fde8 ""
"/home/hartling/phd/paper/paper_2025/main.tex" 1772204925.75836 43610 64fc0d2095542fc0b26831f03534a80f "" "/home/hartling/phd/paper/paper_2025/main.tex" 1772551358.81608 44727 89099053313a739a124eef0ebf096cbe ""
"/usr/share/texlive/texmf-dist/fonts/map/fontname/texfonts.map" 1577235249 3524 cb3e574dea2d1052e39280babc910dc8 "" "/usr/share/texlive/texmf-dist/fonts/map/fontname/texfonts.map" 1577235249 3524 cb3e574dea2d1052e39280babc910dc8 ""
"/usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm" 1246382020 1004 54797486969f23fa377b128694d548df "" "/usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex7.tfm" 1246382020 1004 54797486969f23fa377b128694d548df ""
"/usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex8.tfm" 1246382020 988 bdf658c3bfc2d96d3c8b02cfc1c94c20 "" "/usr/share/texlive/texmf-dist/fonts/tfm/public/amsfonts/cmextra/cmex8.tfm" 1246382020 988 bdf658c3bfc2d96d3c8b02cfc1c94c20 ""
@@ -153,11 +153,12 @@
"/var/lib/texmf/web2c/pdftex/pdflatex.fmt" 1761648508 8213325 7fd20752ab46ff9aa583e4973d7433df "" "/var/lib/texmf/web2c/pdftex/pdflatex.fmt" 1761648508 8213325 7fd20752ab46ff9aa583e4973d7433df ""
"figures/fig_auditory_pathway.pdf" 1771593904.14638 1153923 3df8539421fd21dc866cc8d320bd9b1d "" "figures/fig_auditory_pathway.pdf" 1771593904.14638 1153923 3df8539421fd21dc866cc8d320bd9b1d ""
"figures/fig_feat_stages.pdf" 1771841347.81651 8600157 89f9276167cc096f9adce052152edd70 "" "figures/fig_feat_stages.pdf" 1771841347.81651 8600157 89f9276167cc096f9adce052152edd70 ""
"figures/fig_invariance_log_hp.pdf" 1772550242.81975 596132 199b6299bddb7a18add3f3c606c26c68 ""
"figures/fig_pre_stages.pdf" 1771841345.77353 440442 263f9bd4a3bca8e0653ac0a4c4a8da2c "" "figures/fig_pre_stages.pdf" 1771841345.77353 440442 263f9bd4a3bca8e0653ac0a4c4a8da2c ""
"main.aux" 1772204926.64635 11791 7489be3296a12717c20b24d84cde4ae1 "pdflatex" "main.aux" 1772551360.57305 12621 fd60ae2568ab59c6c47a0013f596c4ce "pdflatex"
"main.bbl" 1772204888.74085 91039 1380dc8c93d2855fdb132cc5a40ad52f "biber main" "main.bbl" 1772551297.4309 91039 1380dc8c93d2855fdb132cc5a40ad52f "biber main"
"main.run.xml" 1772204926.65235 2335 a049bc26a7f032e842ce55de5bc38328 "pdflatex" "main.run.xml" 1772551360.57905 2335 a049bc26a7f032e842ce55de5bc38328 "pdflatex"
"main.tex" 1772204925.75836 43610 64fc0d2095542fc0b26831f03534a80f "" "main.tex" 1772551358.81608 44727 89099053313a739a124eef0ebf096cbe ""
(generated) (generated)
"main.aux" "main.aux"
"main.bcf" "main.bcf"

View File

@@ -288,6 +288,11 @@ INPUT ./figures/fig_feat_stages.pdf
INPUT ./figures/fig_feat_stages.pdf INPUT ./figures/fig_feat_stages.pdf
INPUT ./figures/fig_feat_stages.pdf INPUT ./figures/fig_feat_stages.pdf
INPUT ./figures/fig_feat_stages.pdf INPUT ./figures/fig_feat_stages.pdf
INPUT ./figures/fig_invariance_log_hp.pdf
INPUT ./figures/fig_invariance_log_hp.pdf
INPUT ./figures/fig_invariance_log_hp.pdf
INPUT ./figures/fig_invariance_log_hp.pdf
INPUT ./figures/fig_invariance_log_hp.pdf
INPUT main.aux INPUT main.aux
INPUT main.run.xml INPUT main.run.xml
OUTPUT main.run.xml OUTPUT main.run.xml

View File

@@ -1,4 +1,4 @@
This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/Debian) (preloaded format=pdflatex 2025.10.28) 27 FEB 2026 16:08 This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/Debian) (preloaded format=pdflatex 2025.10.28) 3 MAR 2026 16:22
entering extended mode entering extended mode
restricted \write18 enabled. restricted \write18 enabled.
file:line:error style messages enabled. file:line:error style messages enabled.
@@ -762,7 +762,13 @@ File: figures/fig_feat_stages.pdf Graphic file (type pdf)
<use figures/fig_feat_stages.pdf> <use figures/fig_feat_stages.pdf>
Package pdftex.def Info: figures/fig_feat_stages.pdf used on input line 535. Package pdftex.def Info: figures/fig_feat_stages.pdf used on input line 535.
(pdftex.def) Requested size: 483.69687pt x 181.38585pt. (pdftex.def) Requested size: 483.69687pt x 181.38585pt.
[9] [10 <./figures/fig_feat_stages.pdf>] [11] [12] [13] [14] (./main.aux) [9] [10 <./figures/fig_feat_stages.pdf>]
<figures/fig_invariance_log_hp.pdf, id=1141, 910.48819pt x 455.2441pt>
File: figures/fig_invariance_log_hp.pdf Graphic file (type pdf)
<use figures/fig_invariance_log_hp.pdf>
Package pdftex.def Info: figures/fig_invariance_log_hp.pdf used on input line 625.
(pdftex.def) Requested size: 483.69687pt x 241.84782pt.
[11] [12 <./figures/fig_invariance_log_hp.pdf>] [13] [14] [15] (./main.aux)
*********** ***********
LaTeX2e <2023-11-01> patch level 1 LaTeX2e <2023-11-01> patch level 1
L3 programming layer <2024-01-22> L3 programming layer <2024-01-22>
@@ -772,18 +778,18 @@ Package logreq Info: Writing requests to 'main.run.xml'.
) )
Here is how much of TeX's memory you used: Here is how much of TeX's memory you used:
20717 strings out of 474222 20725 strings out of 474222
446212 string characters out of 5748732 446531 string characters out of 5748732
1937975 words of memory out of 5000000 1937975 words of memory out of 5000000
42707 multiletter control sequences out of 15000+600000 42715 multiletter control sequences out of 15000+600000
569394 words of font info for 79 fonts, out of 8000000 for 9000 569394 words of font info for 79 fonts, out of 8000000 for 9000
1143 hyphenation exceptions out of 8191 1143 hyphenation exceptions out of 8191
94i,19n,93p,955b,1732s stack positions out of 10000i,1000n,20000p,200000b,200000s 94i,19n,93p,955b,1732s stack positions out of 10000i,1000n,20000p,200000b,200000s
</usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx12.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbxti10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi12.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi6.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi8.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr12.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr17.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr6.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr8.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy8.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmti12.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/symbols/msbm10.pfb> </usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx12.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbxti10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi12.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi6.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmmi8.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr12.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr17.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr6.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr8.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy10.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmsy8.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/cm/cmti12.pfb></usr/share/texlive/texmf-dist/fonts/type1/public/amsfonts/symbols/msbm10.pfb>
Output written on main.pdf (14 pages, 10363062 bytes). Output written on main.pdf (15 pages, 10953973 bytes).
PDF statistics: PDF statistics:
1226 PDF objects out of 1440 (max. 8388607) 1299 PDF objects out of 1440 (max. 8388607)
745 compressed objects within 8 object streams 764 compressed objects within 8 object streams
0 named destinations out of 1000 (max. 500000) 0 named destinations out of 1000 (max. 500000)
28 words of extra memory for PDF output out of 10000 (max. 10000000) 33 words of extra memory for PDF output out of 10000 (max. 10000000)

BIN
main.pdf

Binary file not shown.

Binary file not shown.

View File

@@ -620,6 +620,27 @@ to recover songs that have already sunken below the noise floor, which
emphasizes the importance of a sufficiently high SNR at the intial reception of emphasizes the importance of a sufficiently high SNR at the intial reception of
the signal for reliable song recognition. the signal for reliable song recognition.
\begin{figure}[!ht]
\centering
\includegraphics[width=\textwidth]{figures/fig_invariance_log_hp.pdf}
\caption{\textbf{Intensity invariance by logarithmic compression and
adaptation.}
\textbf{a}:~Synthetic envelopes resulting from the
mixture of song component $\soc(t)$ with scale $\sca$ and
noise component $\noc(t)$ with fixed scale.
\textbf{b}:~Corresponding logarithmically scaled envelopes.
\textbf{c}:~Corresponding intensity-adapted envelopes.
\textbf{d}:~Absolute SNRs of each representation relative
to the representation without song component ($\sca=0$).
\textbf{e}:~Same SNRs as in \textbf{d} but normalized to
the maximum SNR for each representation.
\textbf{f}:~Relative amplification of normalized SNRs
relative to the normalized SNRs of the initial envelope.
}
\label{fig:inv_log-hp}
\end{figure}
\FloatBarrier
\subsection{Thresholding nonlinearity \& temporal averaging} \subsection{Thresholding nonlinearity \& temporal averaging}
The second key mechanism for the emergence of intensity invariance along the The second key mechanism for the emergence of intensity invariance along the

View File

@@ -1,133 +1,227 @@
import plotstyle_plt
import glob
import numpy as np import numpy as np
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from itertools import product from itertools import product
from thunderhopper.modeltools import load_data
from color_functions import load_colors
from plot_functions import hide_axis, letter_subplots, ylimits, ylabel, super_xlabel, plot_line
from IPython import embed
def prepare_fig(nrows, ncols, width=8, height=None, rheight=2, def strip_zeros(num, right_digits=5):
left=0.01, right=0.95, bottom=0.01, top=0.95, if isinstance(num, int):
wspace=0.4, hspace=0.4): return num
if height is None: num = f'{num:.{right_digits}f}'
height = rheight * nrows left, right = num.split('.')
fig = plt.figure(figsize=(width, height)) right = right.rstrip('0')
grid = fig.add_gridspec(nrows=nrows, ncols=ncols, wspace=wspace, hspace=hspace, if right:
left=left, right=right, top=top, bottom=bottom) return f'{left}.{right}'
axes = np.zeros((nrows, ncols), dtype=object) return left
for i, j in product(range(nrows), range(ncols)):
axes[i, j] = fig.add_subplot(grid[i, j])
axes[i, j].set_facecolor('none')
return fig, axes
def xlimits(ax, time, minval=None, maxval=None, pad=0.05): def plot_snippets(axes, time, snippets, label, scales=None,
limits = [minval, maxval] ymin=None, ymax=None, **kwargs):
if minval is None: ymin, ymax = ylimits(snippets, minval=ymin, maxval=ymax, pad=0.05)
limits[0] = time[0] ylabel(axes[0], label, x=-0.7, rotation=0, ha='left', va='center')
if maxval is None: for i, (ax, snippet) in enumerate(zip(axes, snippets.T)):
limits[1] = time[-1] plot_line(ax, time, snippet, ymin=ymin, ymax=ymax, **kwargs)
if pad is not None and minval is None: if scales is not None:
limits[0] -= (limits[1] - limits[0]) * pad ax.set_title(f'$\\alpha={strip_zeros(scales[i])}$')
if pad is not None and maxval is None:
limits[1] += (limits[1] - limits[0]) * pad
return ax.set_xlim(limits)
def ylimits(ax, signal, minval=None, maxval=None, pad=0.05):
limits = [minval, maxval]
if minval is None:
limits[0] = signal.min()
if maxval is None:
limits[1] = signal.max()
if pad is not None and minval is None:
limits[0] -= (limits[1] - limits[0]) * pad
if pad is not None and maxval is None:
limits[1] += (limits[1] - limits[0]) * pad
return ax.set_ylim(limits)
def ylabel(ax, label, x=-0.23, fontsize=20):
ax.set_ylabel(label, fontsize=fontsize, rotation=0, ha='left', va='center')
ax.yaxis.set_label_coords(x, 0.5)
return None return None
def super_xlabel(label, fig, high_ax, low_ax, y=0.005, **kwargs): # GENERAL SETTINGS:
x = (low_ax.get_position().x0 + high_ax.get_position().x1) / 2 target = 'Omocestus_rufipes'
fig.supxlabel(label, x=x, y=y, **kwargs) data_paths = glob.glob(f'../data/inv/log_hp/{target}*.npz')
return None stages = ['env', 'log', 'inv']
files = stages + ['scales', 'plot_scales', 'snr_env', 'snr_log', 'snr_inv']
save_path = '../figures/fig_invariance_log_hp.pdf'
def super_ylabel(label, fig, high_ax, low_ax, x=0.005, **kwargs): # PLOT SETTINGS:
y = (low_ax.get_position().y0 + high_ax.get_position().y1) / 2 fig_kwargs = dict(
fig.supylabel(label, x=x, y=y, **kwargs) figsize=(32/2.54, 16/2.54),
return None )
grid1_kwargs = dict(
nrows=len(stages),
ncols=None,
wspace=0.05,
hspace=0.3,
left=0.1,
right=0.985,
bottom=0.17,
top=0.9
)
grid2_kwargs = dict(
nrows=1,
ncols=3,
wspace=0.35,
hspace=0,
left=0.1,
right=0.985,
bottom=0.18,
top=0.95
)
colors = load_colors('../data/stage_colors.npz')
lw_snippets = 0.25
lw_analysis = 3
ylabels = dict(
env=r'$x_{\text{env}}$',
log=r'$x_{\text{dB}}$',
inv=r'$x_{\text{adapt}}$',
abs='abs. SNR',#'abs. ' + r'$\text{SNR}$',
norm='norm. SNR',#'norm. ' + r'$\text{SNR}$',
gain='rel. SNR gain'
)
xloc = dict(
abs=5,
)
yloc = dict(
env=100,
log=10,
inv=5,
abs=50,
)
letter_kwargs = dict(
x=0.03,
y=0.99,
ha='left',
va='top'
)
fit_kwargs = dict(
c='darkred',
ls='--',
zorder=1.9
)
fit_lw = dict(
abs=6,
norm=3,
gain=3
)
text_kwargs = dict(
abs=dict(s='$\\alpha^2+1$', fontsize=16, c=fit_kwargs['c'],
x=0.85, y=0.9, ha='right', va='center'),
norm=dict(s='$\\alpha^2+1$', fontsize=16, c=fit_kwargs['c'],
x=0.85, y=0.9, ha='right', va='center'),
gain=dict(s='$\\frac{1}{\\alpha}$', fontsize=24, c=fit_kwargs['c'],
x=0.75, y=0.8, ha='left', va='center')
)
calculated_floor = False
floor_kwargs = dict(
xmin=0,
color=3 * (0.85,),
zorder=0,
lw=0
)
def hide_axis(ax, side='bottom'): # EXECUTION:
ax.spines[side].set_visible(False) for data_path in data_paths:
params = {side: False, 'label' + side: False} print(f'Processing {data_path}')
ax.tick_params(axis='x' if side in ['top', 'bottom'] else 'y',
which='both', **params)
return None
def plot_line(ax, time, signal, ymin=None, ymax=None, xmin=None, xmax=None, # Load invariance data:
xpad=None, ypad=0.05, yloc=None, **kwargs): data, config = load_data(data_path, files)
handles = ax.plot(time, signal, **kwargs) t_full = np.arange(data['env'].shape[0]) / config['env_rate']
xlimits(ax, time, minval=xmin, maxval=xmax, pad=xpad) nonzero_scales = data['scales'][data['scales'] > 0]
ylimits(ax, signal, minval=ymin, maxval=ymax, pad=ypad) floor_kwargs['xmax'] = data['floor_scale'] if calculated_floor else 1
ax.yaxis.set_major_locator(plt.MultipleLocator(yloc))
return handles
def plot_barcode(ax, time, binary, offset=0.5, xmin=None, xmax=None, **kwargs): # Prepare overall graph:
if xmin is None: fig = plt.figure(**fig_kwargs)
xmin = time[0] super_grid = fig.add_gridspec(2, 1, wspace=0, hspace=1,
if xmax is None: left=0, right=1, bottom=0, top=1)
xmax = time[-1]
lower, upper, handles = 0, 1, []
for i in range(binary.shape[1]):
h = ax.fill_between(time, lower, upper, where=binary[:, i], **kwargs)
handles.append(h)
if i < binary.shape[1] - 1:
lower += offset + 1
upper += offset + 1
xlimits(ax, time, minval=xmin, maxval=xmax)
ax.set_ylim(0, upper)
hide_axis(ax, 'bottom')
hide_axis(ax, 'left')
return handles
def indicate_zoom(fig, high_ax, low_ax, zoom_abs, **kwargs): # Prepare snippet axes:
y0 = low_ax.get_position().y0 subfig1 = fig.add_subfigure(super_grid[0, :])
y1 = high_ax.get_position().y1 grid1_kwargs['ncols'] = data['plot_scales'].size
transform = low_ax.transData + fig.transFigure.inverted() grid1 = subfig1.add_gridspec(**grid1_kwargs)
x0 = transform.transform((zoom_abs[0], 0))[0] axes = np.zeros((grid1.nrows, grid1.ncols), dtype=object)
x1 = transform.transform((zoom_abs[1], 0))[0] for i, j in product(range(grid1.nrows), range(grid1.ncols)):
rect = plt.Rectangle((x0, y0), x1 - x0, y1 - y0, axes[i, j] = subfig1.add_subplot(grid1[i, j])
transform=fig.transFigure, **kwargs) [hide_axis(ax, 'bottom') for ax in axes[:-1, :].flatten()]
fig.add_artist(rect) [hide_axis(ax, 'left') for ax in axes[:, 1:].flatten()]
return None super_xlabel('time [s]', subfig1, axes[-1, 0], axes[-1, -1], y=0)
letter_subplots(axes[:, 0], labels='abc', **letter_kwargs)
def assign_colors(handles, types, colors): # Prepare analysis axes:
for handle, type_id in zip(handles, types): subfig2 = fig.add_subfigure(super_grid[1, :])
handle.set_color(colors[str(int(type_id))]) grid2 = subfig2.add_gridspec(**grid2_kwargs)
return None symlog_kwargs = dict(linthresh=nonzero_scales.min(), linscale=0.2)
def reorder_traces(handles, signal, zlow=2, zhigh=2.5): ax_abs_snr = subfig2.add_subplot(grid2[:, 0])
inds = np.argsort(signal.std(axis=0)) ax_abs_snr.set_ylabel(ylabels['abs'])
zorders = np.linspace(zlow, zhigh, len(inds))[::-1]
for ind, z in zip(inds, zorders):
handles[ind].set_zorder(z)
return None
def choose_kernels(kern_specs, features, kern_types, per_type=2, thresh=0.01): ax_norm_snr = subfig2.add_subplot(grid2[:, 1])
mean_feat = features.mean(axis=0) ax_norm_snr.set_ylabel(ylabels['norm'])
feat_diff = np.abs(mean_feat[:, None] - mean_feat[None, :]) ax_norm_snr.set_xscale('symlog', **symlog_kwargs)
feat_diff[features.max(axis=0) < thresh, :] = np.nan ax_norm_snr.set_yscale('log')
feat_diff = np.nanmean(feat_diff, axis=0)
ranking = np.argsort(feat_diff) ax_gain = subfig2.add_subplot(grid2[:, 2])
kern_inds = [] ax_gain.set_ylabel(ylabels['gain'])
for type_id in kern_types: ax_gain.set_xscale('symlog', **symlog_kwargs)
type_inds = np.nonzero(kern_specs[:, 0] == type_id)[0] ax_gain.set_yscale('log')
rank_inds = np.nonzero(np.isin(ranking, type_inds))[0][-per_type:] super_xlabel('song scale $\\alpha$', subfig2, ax_abs_snr, ax_gain)
kern_inds.extend(ranking[rank_inds]) letter_subplots([ax_abs_snr, ax_norm_snr, ax_gain], labels='def', **letter_kwargs)
return np.array(kern_inds)
def letter_subplots(axes, labels='abcd', x=0.02, y=1, ha='left', va='bottom', # Plot envelope snippets:
fontsize=16, fontweight='bold', **kwargs): plot_snippets(axes[0, :], t_full, data['env'], ylabels['env'], ymin=0,
for ax, label in zip(axes, labels): scales=data['plot_scales'], c=colors['env'], lw=lw_snippets)
ax.text(x, y, label, transform=ax.transAxes, ha=ha, va=va, axes[0, 0].yaxis.set_major_locator(plt.MultipleLocator(yloc['env']))
fontsize=fontsize, fontweight=fontweight, **kwargs)
return None # Plot logarithmic snippets:
plot_snippets(axes[1, :], t_full, data['log'], ylabels['log'], ymax=0,
c=colors['log'], lw=lw_snippets)
axes[1, 0].yaxis.set_major_locator(plt.MultipleLocator(yloc['log']))
# Plot invariant snippets:
plot_snippets(axes[2, :], t_full, data['inv'], ylabels['inv'],
c=colors['inv'], lw=lw_snippets)
axes[2, 0].yaxis.set_major_locator(plt.MultipleLocator(yloc['inv']))
# Plot in-representation SNRs (absolute):
ax_abs_snr.plot(data['scales'], data['snr_env'], c=colors['env'], lw=lw_analysis)
ax_abs_snr.plot(data['scales'], data['snr_log'], c=colors['log'], lw=lw_analysis)
ax_abs_snr.plot(data['scales'], data['snr_inv'], c=colors['inv'], lw=lw_analysis)
ax_abs_snr.axvspan(**floor_kwargs)
ax_abs_snr.xaxis.set_major_locator(plt.MultipleLocator(xloc['abs']))
ax_abs_snr.yaxis.set_major_locator(plt.MultipleLocator(yloc['abs']))
ax_abs_snr.set_ylim(0, data['snr_env'].max())
# Plot envelope SNR fit:
ax_abs_snr.plot(data['scales'], data['scales'] ** 2 + 1,
lw=fit_lw['abs'], **fit_kwargs)
ax_abs_snr.text(transform=ax_abs_snr.transAxes, **text_kwargs['abs'])
# Get normalized SNRs:
norm_snr_env = data['snr_env'] / data['snr_env'].max()
norm_snr_log = data['snr_log'] / data['snr_log'].max()
norm_snr_inv = data['snr_inv'] / data['snr_inv'].max()
# Plot in-representation SNRs (normalized):
ax_norm_snr.plot(data['scales'], norm_snr_env, c=colors['env'], lw=lw_analysis)
ax_norm_snr.plot(data['scales'], norm_snr_log, c=colors['log'], lw=lw_analysis)
ax_norm_snr.plot(data['scales'], norm_snr_inv, c=colors['inv'], lw=lw_analysis)
ax_norm_snr.axvspan(**floor_kwargs)
ax_norm_snr.set_ylim(norm_snr_env.min(), 1)
# # Plot envelope SNR fit:
# ax_norm_snr.plot(nonzero_scales, nonzero_scales / nonzero_scales.max(),
# lw=fit_lw['norm'], **fit_kwargs)
# ax_norm_snr.text(transform=ax_norm_snr.transAxes, **text_kwargs['norm'])
# Get relative SNR gain:
gain_log = norm_snr_log / norm_snr_env
gain_inv = norm_snr_inv / norm_snr_env
# Plot across-representation gain:
ax_gain.plot(data['scales'], gain_log, c=colors['log'], lw=lw_analysis)
ax_gain.plot(data['scales'], gain_inv, c=colors['inv'], lw=lw_analysis)
ax_gain.axvspan(**floor_kwargs)
ax_gain.set_ylim(1, 10)
# Plot amplification fit:
ax_gain.plot(nonzero_scales, nonzero_scales.max() / nonzero_scales,
lw=fit_lw['gain'], **fit_kwargs)
ax_gain.text(transform=ax_gain.transAxes, **text_kwargs['gain'])
if save_path is not None:
fig.savefig(save_path)
plt.show()
print('Done.')
embed()

View File

@@ -9,142 +9,11 @@ from plot_functions import prepare_fig, hide_axis, letter_subplots,\
indicate_zoom, assign_colors, reorder_traces indicate_zoom, assign_colors, reorder_traces
from IPython import embed from IPython import embed
# def prepare_fig(nrows, ncols, width=8, height=None, rheight=2,
# left=0.01, right=0.95, bottom=0.01, top=0.95,
# wspace=0.4, hspace=0.4):
# if height is None:
# height = rheight * nrows
# fig = plt.figure(figsize=(width, height))
# grid = fig.add_gridspec(nrows=nrows, ncols=ncols, wspace=wspace, hspace=hspace,
# left=left, right=right, top=top, bottom=bottom)
# axes = np.zeros((nrows, ncols), dtype=object)
# for i, j in product(range(nrows), range(ncols)):
# axes[i, j] = fig.add_subplot(grid[i, j])
# axes[i, j].set_facecolor('none')
# return fig, axes
# def xlimits(ax, time, minval=None, maxval=None, pad=0.05):
# limits = [minval, maxval]
# if minval is None:
# limits[0] = time[0]
# if maxval is None:
# limits[1] = time[-1]
# if pad is not None and minval is None:
# limits[0] -= (limits[1] - limits[0]) * pad
# if pad is not None and maxval is None:
# limits[1] += (limits[1] - limits[0]) * pad
# return ax.set_xlim(limits)
# def ylimits(ax, signal, minval=None, maxval=None, pad=0.05):
# limits = [minval, maxval]
# if minval is None:
# limits[0] = signal.min()
# if maxval is None:
# limits[1] = signal.max()
# if pad is not None and minval is None:
# limits[0] -= (limits[1] - limits[0]) * pad
# if pad is not None and maxval is None:
# limits[1] += (limits[1] - limits[0]) * pad
# return ax.set_ylim(limits)
# def ylabel(ax, label, x=-0.23, fontsize=20):
# ax.set_ylabel(label, fontsize=fontsize, rotation=0, ha='left', va='center')
# ax.yaxis.set_label_coords(x, 0.5)
# return None
# def super_xlabel(label, fig, high_ax, low_ax, y=0.005, **kwargs):
# x = (low_ax.get_position().x0 + high_ax.get_position().x1) / 2
# fig.supxlabel(label, x=x, y=y, **kwargs)
# return None
# def super_ylabel(label, fig, high_ax, low_ax, x=0.005, **kwargs):
# y = (low_ax.get_position().y0 + high_ax.get_position().y1) / 2
# fig.supylabel(label, x=x, y=y, **kwargs)
# return None
# def hide_axis(ax, side='bottom'):
# ax.spines[side].set_visible(False)
# params = {side: False, 'label' + side: False}
# ax.tick_params(axis='x' if side in ['top', 'bottom'] else 'y',
# which='both', **params)
# return None
# def plot_line(ax, time, signal, ymin=None, ymax=None, xmin=None, xmax=None,
# xpad=None, ypad=0.05, yloc=None, **kwargs):
# handles = ax.plot(time, signal, **kwargs)
# xlimits(ax, time, minval=xmin, maxval=xmax, pad=xpad)
# ylimits(ax, signal, minval=ymin, maxval=ymax, pad=ypad)
# ax.yaxis.set_major_locator(plt.MultipleLocator(yloc))
# return handles
# def plot_barcode(ax, time, binary, offset=0.5, xmin=None, xmax=None, **kwargs):
# if xmin is None:
# xmin = time[0]
# if xmax is None:
# xmax = time[-1]
# lower, upper, handles = 0, 1, []
# for i in range(binary.shape[1]):
# h = ax.fill_between(time, lower, upper, where=binary[:, i], **kwargs)
# handles.append(h)
# if i < binary.shape[1] - 1:
# lower += offset + 1
# upper += offset + 1
# xlimits(ax, time, minval=xmin, maxval=xmax)
# ax.set_ylim(0, upper)
# hide_axis(ax, 'bottom')
# hide_axis(ax, 'left')
# return handles
# def indicate_zoom(fig, high_ax, low_ax, zoom_abs, **kwargs):
# y0 = low_ax.get_position().y0
# y1 = high_ax.get_position().y1
# transform = low_ax.transData + fig.transFigure.inverted()
# x0 = transform.transform((zoom_abs[0], 0))[0]
# x1 = transform.transform((zoom_abs[1], 0))[0]
# rect = plt.Rectangle((x0, y0), x1 - x0, y1 - y0,
# transform=fig.transFigure, **kwargs)
# fig.add_artist(rect)
# return None
# def assign_colors(handles, types, colors):
# for handle, type_id in zip(handles, types):
# handle.set_color(colors[str(int(type_id))])
# return None
# def reorder_traces(handles, signal, zlow=2, zhigh=2.5):
# inds = np.argsort(signal.std(axis=0))
# zorders = np.linspace(zlow, zhigh, len(inds))[::-1]
# for ind, z in zip(inds, zorders):
# handles[ind].set_zorder(z)
# return None
# def choose_kernels(kern_specs, features, kern_types, per_type=2, thresh=0.01):
# mean_feat = features.mean(axis=0)
# feat_diff = np.abs(mean_feat[:, None] - mean_feat[None, :])
# feat_diff[features.max(axis=0) < thresh, :] = np.nan
# feat_diff = np.nanmean(feat_diff, axis=0)
# ranking = np.argsort(feat_diff)
# kern_inds = []
# for type_id in kern_types:
# type_inds = np.nonzero(kern_specs[:, 0] == type_id)[0]
# rank_inds = np.nonzero(np.isin(ranking, type_inds))[0][-per_type:]
# kern_inds.extend(ranking[rank_inds])
# return np.array(kern_inds)
# def letter_subplots(axes, labels='abcd', x=0.02, y=1, ha='left', va='bottom',
# fontsize=16, fontweight='bold', **kwargs):
# for ax, label in zip(axes, labels):
# ax.text(x, y, label, transform=ax.transAxes, ha=ha, va=va,
# fontsize=fontsize, fontweight=fontweight, **kwargs)
# return None
# GENERAL SETTINGS: # GENERAL SETTINGS:
target = 'Omocestus_rufipes' target = 'Omocestus_rufipes'
data_paths = glob.glob(f'../data/processed/{target}*.npz') data_paths = glob.glob(f'../data/processed/{target}*.npz')
stages = ['filt', 'env', 'log', 'inv', 'conv', 'bi', 'feat'] stages = ['filt', 'env', 'log', 'inv', 'conv', 'bi', 'feat']
save_path = None#'../figures/' save_path = '../figures/'
# PLOT SETTINGS: # PLOT SETTINGS:
fig_kwargs = dict( fig_kwargs = dict(
@@ -348,3 +217,6 @@ for data_path in data_paths:
if save_path is not None: if save_path is not None:
fig.savefig(f'{save_path}fig_feat_stages.pdf') fig.savefig(f'{save_path}fig_feat_stages.pdf')
plt.show() plt.show()
print('Done.')
embed()

View File

@@ -17,6 +17,12 @@ def prepare_fig(nrows, ncols, width=8, height=None, rheight=2, unit=1/2.54,
axes[i, j].set_facecolor('none') axes[i, j].set_facecolor('none')
return fig, axes return fig, axes
def hide_ticks(ax, side='bottom', ticks=True):
axis = 'x' if side in ['top', 'bottom'] else 'y'
params = {side: ticks, 'label' + side: False}
ax.tick_params(axis=axis, which='both', **params)
return None
def hide_axis(ax, side='bottom'): def hide_axis(ax, side='bottom'):
ax.spines[side].set_visible(False) ax.spines[side].set_visible(False)
params = {side: False, 'label' + side: False} params = {side: False, 'label' + side: False}
@@ -33,7 +39,7 @@ def letter_subplots(axes, labels=None, x=0.02, y=1, ha='left', va='bottom',
fontsize=fontsize, fontweight=fontweight, **kwargs) fontsize=fontsize, fontweight=fontweight, **kwargs)
return None return None
def xlimits(ax, time, minval=None, maxval=None, pad=0.05): def xlimits(time, ax=None, minval=None, maxval=None, pad=0.05):
limits = [minval, maxval] limits = [minval, maxval]
if minval is None: if minval is None:
limits[0] = time[0] limits[0] = time[0]
@@ -44,9 +50,11 @@ def xlimits(ax, time, minval=None, maxval=None, pad=0.05):
limits[0] -= span * pad limits[0] -= span * pad
if pad and maxval is None: if pad and maxval is None:
limits[1] += span * pad limits[1] += span * pad
return ax.set_xlim(limits) if ax is not None:
return ax.set_xlim(limits)
return limits
def ylimits(ax, signal, minval=None, maxval=None, pad=0.05): def ylimits(signal, ax=None, minval=None, maxval=None, pad=0.05):
limits = [minval, maxval] limits = [minval, maxval]
if minval is None: if minval is None:
limits[0] = signal.min() limits[0] = signal.min()
@@ -57,7 +65,9 @@ def ylimits(ax, signal, minval=None, maxval=None, pad=0.05):
limits[0] -= span * pad limits[0] -= span * pad
if pad and maxval is None: if pad and maxval is None:
limits[1] += span * pad limits[1] += span * pad
return ax.set_ylim(limits) if ax is not None:
return ax.set_ylim(limits)
return limits
def xlabel(ax, label, y=-0.1, fontsize=20, **kwargs): def xlabel(ax, label, y=-0.1, fontsize=20, **kwargs):
ax.set_xlabel(label, fontsize=fontsize, **kwargs) ax.set_xlabel(label, fontsize=fontsize, **kwargs)
@@ -82,8 +92,8 @@ def super_ylabel(label, fig, high_ax, low_ax, x=0.005, **kwargs):
def plot_line(ax, time, signal, ymin=None, ymax=None, xmin=None, xmax=None, def plot_line(ax, time, signal, ymin=None, ymax=None, xmin=None, xmax=None,
xpad=None, ypad=0.05, yloc=None, xloc=None, **kwargs): xpad=None, ypad=0.05, yloc=None, xloc=None, **kwargs):
handles = ax.plot(time, signal, **kwargs) handles = ax.plot(time, signal, **kwargs)
xlimits(ax, time, minval=xmin, maxval=xmax, pad=xpad) xlimits(time, ax=ax, minval=xmin, maxval=xmax, pad=xpad)
ylimits(ax, signal, minval=ymin, maxval=ymax, pad=ypad) ylimits(signal, ax=ax, minval=ymin, maxval=ymax, pad=ypad)
if xloc is not None: if xloc is not None:
ax.xaxis.set_major_locator(plt.MultipleLocator(xloc)) ax.xaxis.set_major_locator(plt.MultipleLocator(xloc))
if yloc is not None: if yloc is not None:
@@ -98,7 +108,7 @@ def plot_barcode(ax, time, binary, offset=0.5, xmin=None, xmax=None, **kwargs):
if i < binary.shape[1] - 1: if i < binary.shape[1] - 1:
lower += offset + 1 lower += offset + 1
upper += offset + 1 upper += offset + 1
xlimits(ax, time, minval=xmin, maxval=xmax, pad=0) xlimits(time, ax=ax, minval=xmin, maxval=xmax, pad=0)
ax.set_ylim(0, upper) ax.set_ylim(0, upper)
hide_axis(ax, 'bottom') hide_axis(ax, 'bottom')
hide_axis(ax, 'left') hide_axis(ax, 'left')

View File

@@ -0,0 +1,124 @@
import plotstyle_plt
import glob
import numpy as np
import matplotlib.pyplot as plt
from thunderhopper.modeltools import load_data, save_data
from thunderhopper.filetools import crop_paths
from thunderhopper.filters import decibel, sosfilter
from thunderhopper.model import extract_env
from IPython import embed
# GENERAL SETTINGS:
target = 'Omocestus_rufipes'
data_paths = glob.glob(f'../data/processed/{target}*.npz')
save_path = '../data/inv/log_hp/'
# ANALYSIS SETTINGS:
scales = np.arange(0, 10.1, 0.1)
save_scales = np.array([0, 0.5, 1, 2, 5, 10])
floor_percents = dict(song=100, noise=99)
single_db_ref = True
plot_redundant = False
# EXECUTION:
for data_path, name in zip(data_paths, crop_paths(data_paths)):
print(f'Processing {name}')
# Load song envelope:
data, config = load_data(data_path, files='env')
song, rate = data['env'], config['env_rate']
t_full = np.arange(song.shape[0]) / rate
# Generate noise envelope:
rng = np.random.default_rng()
noise = rng.normal(size=song.shape)
noise = extract_env(noise, rate, config=config)
# Normalize each:
song /= song.std()
noise /= noise.std()
# Mix song component and noise component:
scaled = song[:, None] * scales[None, :]
mix = scaled + noise[:, None]
# Find noise floor (experimental):
song_percent = np.percentile(scaled, floor_percents['song'], axis=0)
noise_percent = np.percentile(noise, floor_percents['noise'])
floor_scale = scales[np.nonzero(song_percent <= noise_percent)[0][-1]]
# Process mixture:
mix_log = decibel(mix, axis=None if single_db_ref else 0)
mix_inv = sosfilter(mix_log, rate, config['inv_fcut'], 'hp',
padtype='constant', padlen=config['padlen'])
# Get variances per stage:
var_env = mix.var(axis=0)
var_log = mix_log.var(axis=0)
var_inv = mix_inv.var(axis=0)
# Get SNRs against pure noise per stage:
base_ind = np.nonzero(scales == 0)[0][0]
snr_env = var_env / var_env[base_ind]
snr_log = var_log / var_log[base_ind]
snr_inv = var_inv / var_inv[base_ind]
if plot_redundant:
# Normalize SNRs:
norm_snr_env = snr_env / snr_env.max()
norm_snr_log = snr_log / snr_log.max()
norm_snr_inv = snr_inv / snr_inv.max()
# Get SNR gain against env:
gain_log = snr_log / snr_env
gain_inv = snr_inv / snr_env
# Plot results:
fig, axes = plt.subplots(6, 1, sharex=True, layout='constrained')
axes[0].set_title('variance')
axes[0].plot(scales, var_env)
axes[0].plot(scales, var_log)
axes[0].plot(scales, var_inv)
axes[1].set_title('normalized variance')
axes[1].plot(scales, var_env / var_env.max())
axes[1].plot(scales, var_log / var_log.max())
axes[1].plot(scales, var_inv / var_inv.max())
axes[2].set_title('SNR')
axes[2].plot(scales, snr_env)
axes[2].plot(scales, snr_log)
axes[2].plot(scales, snr_inv)
axes[3].set_title('normalized SNR')
axes[3].plot(scales, norm_snr_env)
axes[3].plot(scales, norm_snr_log)
axes[3].plot(scales, norm_snr_inv)
axes[4].set_title('gain (absolute SNR)')
axes[4].plot(scales, gain_log)
axes[4].plot(scales, gain_inv)
axes[5].set_title('gain (normalized SNR)')
axes[5].plot(scales, norm_snr_log / norm_snr_env)
axes[5].plot(scales, norm_snr_inv / norm_snr_env)
plt.show()
# Save analysis results:
save_inds = np.isin(scales, save_scales)
if save_path is not None:
data = dict(
scales=scales,
plot_scales=scales[save_inds],
floor_scale=floor_scale,
env=mix[:, save_inds],
log=mix_log[:, save_inds],
inv=mix_inv[:, save_inds],
snr_env=snr_env,
snr_log=snr_log,
snr_inv=snr_inv,
)
save_data(save_path + name, data, config, overwrite=True)
print('Done.')
embed()