Added and described two single-kernel Thresh-LP invariance figures in main.tex.

This commit is contained in:
j-hartling
2026-03-11 15:21:22 +01:00
parent 4494bc7783
commit 4f5054c8fd
16 changed files with 4958 additions and 274 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -248,17 +248,21 @@
\newlabel{eq:toy_log}{{12}{11}{}{}{}}
\newlabel{eq:toy_highpass}{{13}{11}{}{}{}}
\newlabel{eq:toy_snr}{{14}{11}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces \textbf {Intensity invariance by logarithmic compression and adaptation is restricted by the noise floor.} Synthetic envelope $x_{\text {env}}(t)$ is transformed into logarihmically compressed envelope $x_{\text {dB}}(t)$ and further into intensity-adapted envelope $x_{\text {adapt}}(t)$. Indicated time scale is $5\,$s for both \textbf {a} and \textbf {b} (black bars). \textbf {a}:~Ideally, if $x_{\text {env}}(t)$ consists only of song component $s(t)$ rescaled by $\alpha $, then $x_{\text {adapt}}(t)$ is fully intensity-invariant across all $\alpha $. \textbf {b}:~In practice, $x_{\text {env}}(t)$ also contains fixed-scale noise component $\eta (t)$, which limits the effective intensity invariance of $x_{\text {adapt}}(t)$ to sufficiently large $\alpha $. \textbf {c}:~Ratios of the SD of each representation in \textbf {b} at a given $\alpha $ relative to the SD of the representation for $\alpha =0$ (solid lines). The same ratios for the ideal $x_{\text {adapt}}(t)$ in \textbf {a} are shown for comparison (dashed line). }}{12}{}\protected@file@percent }
\@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces \textbf {Intensity invariance by logarithmic compression and adaptation is restricted by the noise floor.} Envelope $x_{\text {env}}(t)$ is transformed into logarihmically compressed envelope $x_{\text {dB}}(t)$ and further into intensity-adapted envelope $x_{\text {adapt}}(t)$. Indicated time scale is $5\,$s for both \textbf {a} and \textbf {b} (black bars). \textbf {a}:~Ideally, if $x_{\text {env}}(t)$ consists only of song component $s(t)$ rescaled by $\alpha $, then $x_{\text {adapt}}(t)$ is fully intensity-invariant across all $\alpha $. \textbf {b}:~In practice, $x_{\text {env}}(t)$ also contains fixed-scale noise component $\eta (t)$, which limits the effective intensity invariance of $x_{\text {adapt}}(t)$ to sufficiently large $\alpha $. \textbf {c}:~Ratios of the SD of each representation in \textbf {b} at a given $\alpha $ relative to the SD of the representation for $\alpha =0$ (solid lines). The same ratios for the ideal $x_{\text {adapt}}(t)$ in \textbf {a} are shown for comparison (dashed line). }}{12}{}\protected@file@percent }
\newlabel{fig:inv_log-hp}{{4}{12}{}{}{}}
\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Thresholding nonlinearity \& temporal averaging}{12}{}\protected@file@percent }
\newlabel{eq:pdf_split}{{15}{13}{}{}{}}
\newlabel{eq:feat_avg}{{16}{13}{}{}{}}
\newlabel{eq:feat_prop}{{17}{13}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {5}{\ignorespaces \textbf {Intensity invariance by thresholding and temporal averaging depends on the threshold value.} Kernel response $c_i(t)$ is rescaled by $\alpha $ and transformed into binary response $b_i(t)$ and further into feature $f_i(t)$. Threshold value $\Theta _i$ is set to different percentiles of the the distribution of $c_i(t)$ at $\alpha =1$. Darker colors indicate higher values of $\Theta _i$. Indicated time scale of $500\,$ms is the same for \textbf {a}-\textbf {c} (black bar). \textbf {a}:~50th percentile. \textbf {b}:~75th percentile. \textbf {c}:~100th percentile. \textbf {d}:~Average value of $f_i(t)$ during the song for the different $\Theta _i$ in \textbf {a}-\textbf {c}. }}{13}{}\protected@file@percent }
\newlabel{fig:inv_thresh-lp_single}{{5}{13}{}{}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {6}{\ignorespaces \textbf {Intensity invariance by thresholding and temporal averaging depends on noise.} Kernel response $c_i(t)$ is rescaled by $\alpha $, mixed with fixed-scale noise component $\eta (t)$, and transformed into binary response $b_i(t)$ and further into feature $f_i(t)$. Threshold value $\Theta _i$ is set to different percentiles of the the distribution of $c_i(t)$ at $\alpha =1$. Darker colors indicate higher values of $\Theta _i$. Indicated time scale of $500\,$ms is the same for \textbf {a}-\textbf {c} (black bar). \textbf {a}:~50th percentile. \textbf {b}:~75th percentile. \textbf {c}:~100th percentile. \textbf {d}:~Average value of $f_i(t)$ during the song for the different $\Theta _i$ in \textbf {a}-\textbf {c}. }}{14}{}\protected@file@percent }
\newlabel{fig:inv_thresh-lp_single_noise}{{6}{14}{}{}{}}
\newlabel{eq:pdf_split}{{15}{15}{}{}{}}
\newlabel{eq:feat_avg}{{16}{15}{}{}{}}
\newlabel{eq:feat_prop}{{17}{15}{}{}{}}
\abx@aux@cite{0}{stumpner1991auditory}
\abx@aux@segm{0}{0}{stumpner1991auditory}
\@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}{14}{}\protected@file@percent }
\abx@aux@page{73}{14}
\@writefile{toc}{\contentsline {section}{\numberline {4}Discriminating species-specific song\\patterns in feature space}{16}{}\protected@file@percent }
\@writefile{toc}{\contentsline {section}{\numberline {5}Conclusions \& outlook}{16}{}\protected@file@percent }
\abx@aux@page{73}{16}
\gdef\svg@ink@ver@settings{{\m@ne }{inkscape}{\m@ne }}
\abx@aux@read@bbl@mdfivesum{1380DC8C93D2855FDB132CC5A40AD52F}
\gdef \@abspage@last{15}
\gdef \@abspage@last{17}

2207
main.bbl-SAVE-ERROR Normal file

File diff suppressed because it is too large Load Diff

2436
main.bcf-SAVE-ERROR Normal file

File diff suppressed because it is too large Load Diff

138
main.blg
View File

@@ -1,71 +1,71 @@
[0] Config.pm:307> INFO - This is Biber 2.19
[0] Config.pm:310> INFO - Logfile is 'main.blg'
[35] biber:340> INFO - === Fr Mär 6, 2026, 10:37:34
[43] Biber.pm:419> INFO - Reading 'main.bcf'
[71] Biber.pm:979> INFO - Found 55 citekeys in bib section 0
[76] Biber.pm:4419> INFO - Processing section 0
[81] Biber.pm:4610> INFO - Looking for bibtex file 'cite.bib' for section 0
[82] bibtex.pm:1713> INFO - LaTeX decoding ...
[111] bibtex.pm:1519> INFO - Found BibTeX data source 'cite.bib'
[280] UCollate.pm:68> INFO - Overriding locale 'en-US' defaults 'normalization = NFD' with 'normalization = prenormalized'
[280] UCollate.pm:68> INFO - Overriding locale 'en-US' defaults 'variable = shifted' with 'variable = non-ignorable'
[280] Biber.pm:4239> INFO - Sorting list 'nyt/global//global/global' of type 'entry' with template 'nyt' and locale 'en-US'
[280] Biber.pm:4245> INFO - No sort tailoring available for locale 'en-US'
[303] bbl.pm:660> INFO - Writing 'main.bbl' with encoding 'UTF-8'
[313] bbl.pm:763> INFO - Output to main.bbl
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 10, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 21, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 38, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 49, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 58, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 73, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 82, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 91, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 100, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 109, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 118, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 127, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 136, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 157, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 178, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 187, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 196, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 207, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 218, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 229, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 240, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 249, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 258, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 269, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 278, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 289, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 300, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 309, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 328, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 337, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 400, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 419, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 428, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 437, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 456, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 491, warning: 6 characters of junk seen at toplevel
[313] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 526, warning: 6 characters of junk seen at toplevel
[314] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 535, warning: 6 characters of junk seen at toplevel
[314] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 556, warning: 6 characters of junk seen at toplevel
[314] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 565, warning: 6 characters of junk seen at toplevel
[314] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 576, warning: 6 characters of junk seen at toplevel
[314] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 587, warning: 6 characters of junk seen at toplevel
[314] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 619, warning: 6 characters of junk seen at toplevel
[314] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 648, warning: 6 characters of junk seen at toplevel
[314] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 658, warning: 6 characters of junk seen at toplevel
[314] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 667, warning: 6 characters of junk seen at toplevel
[314] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 688, warning: 6 characters of junk seen at toplevel
[314] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 709, warning: 6 characters of junk seen at toplevel
[314] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 720, warning: 6 characters of junk seen at toplevel
[314] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 729, warning: 6 characters of junk seen at toplevel
[314] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 749, warning: 6 characters of junk seen at toplevel
[314] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 766, warning: 6 characters of junk seen at toplevel
[314] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 775, warning: 6 characters of junk seen at toplevel
[314] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 800, warning: 6 characters of junk seen at toplevel
[314] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_YENa/347c261ec4135a5723bef5c751f5078f_27143.utf8, line 817, warning: 6 characters of junk seen at toplevel
[314] Biber.pm:133> INFO - WARNINGS: 55
[35] biber:340> INFO - === Mi Mär 11, 2026, 15:14:06
[44] Biber.pm:419> INFO - Reading 'main.bcf'
[72] Biber.pm:979> INFO - Found 55 citekeys in bib section 0
[77] Biber.pm:4419> INFO - Processing section 0
[82] Biber.pm:4610> INFO - Looking for bibtex file 'cite.bib' for section 0
[83] bibtex.pm:1713> INFO - LaTeX decoding ...
[113] bibtex.pm:1519> INFO - Found BibTeX data source 'cite.bib'
[284] UCollate.pm:68> INFO - Overriding locale 'en-US' defaults 'variable = shifted' with 'variable = non-ignorable'
[284] UCollate.pm:68> INFO - Overriding locale 'en-US' defaults 'normalization = NFD' with 'normalization = prenormalized'
[284] Biber.pm:4239> INFO - Sorting list 'nyt/global//global/global' of type 'entry' with template 'nyt' and locale 'en-US'
[284] Biber.pm:4245> INFO - No sort tailoring available for locale 'en-US'
[308] bbl.pm:660> INFO - Writing 'main.bbl' with encoding 'UTF-8'
[318] bbl.pm:763> INFO - Output to main.bbl
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 10, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 21, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 38, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 49, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 58, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 73, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 82, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 91, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 100, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 109, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 118, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 127, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 136, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 157, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 178, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 187, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 196, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 207, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 218, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 229, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 240, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 249, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 258, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 269, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 278, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 289, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 300, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 309, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 328, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 337, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 400, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 419, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 428, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 437, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 456, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 491, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 526, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 535, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 556, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 565, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 576, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 587, warning: 6 characters of junk seen at toplevel
[318] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 619, warning: 6 characters of junk seen at toplevel
[319] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 648, warning: 6 characters of junk seen at toplevel
[319] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 658, warning: 6 characters of junk seen at toplevel
[319] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 667, warning: 6 characters of junk seen at toplevel
[319] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 688, warning: 6 characters of junk seen at toplevel
[319] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 709, warning: 6 characters of junk seen at toplevel
[319] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 720, warning: 6 characters of junk seen at toplevel
[319] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 729, warning: 6 characters of junk seen at toplevel
[319] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 749, warning: 6 characters of junk seen at toplevel
[319] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 766, warning: 6 characters of junk seen at toplevel
[319] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 775, warning: 6 characters of junk seen at toplevel
[319] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 800, warning: 6 characters of junk seen at toplevel
[319] Biber.pm:131> WARN - BibTeX subsystem: /tmp/biber_tmp_yUae/347c261ec4135a5723bef5c751f5078f_41297.utf8, line 817, warning: 6 characters of junk seen at toplevel
[319] Biber.pm:133> INFO - WARNINGS: 55

View File

@@ -1,14 +1,14 @@
# Fdb version 4
["biber main"] 1772789854.19015 "main.bcf" "main.bbl" "main" 1772789995.6149 0
["biber main"] 1773238445.97958 "main.bcf" "main.bbl" "main" 1773238449.24151 0
"cite.bib" 1770904753.08918 27483 4290db0c91f7b5055e25472ef913f6b4 ""
"main.bcf" 1772789995.56243 112931 2a478116d80ebb1ada7083a24facd6e3 "pdflatex"
"main.bcf" 1773238449.18184 112931 2a478116d80ebb1ada7083a24facd6e3 "pdflatex"
(generated)
"main.bbl"
"main.blg"
(rewritten before read)
["pdflatex"] 1772789994.76445 "/home/hartling/phd/paper/paper_2025/main.tex" "main.pdf" "main" 1772789995.6151 0
["pdflatex"] 1773238448.36992 "/home/hartling/phd/paper/paper_2025/main.tex" "main.pdf" "main" 1773238449.24172 0
"/etc/texmf/web2c/texmf.cnf" 1761560044.43676 475 c0e671620eb5563b2130f56340a5fde8 ""
"/home/hartling/phd/paper/paper_2025/main.tex" 1772789993.80744 45115 2fcef2652b25ea1193a94494b1d1cf7c ""
"/home/hartling/phd/paper/paper_2025/main.tex" 1773238449.19584 47479 96e40a52b29dbb10a3ed8b868cb9724c ""
"/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/cmex8.tfm" 1246382020 988 bdf658c3bfc2d96d3c8b02cfc1c94c20 ""
@@ -153,12 +153,14 @@
"/var/lib/texmf/web2c/pdftex/pdflatex.fmt" 1761648508 8213325 7fd20752ab46ff9aa583e4973d7433df ""
"figures/fig_auditory_pathway.pdf" 1771593904.14638 1153923 3df8539421fd21dc866cc8d320bd9b1d ""
"figures/fig_feat_stages.pdf" 1771841347.81651 8600157 89f9276167cc096f9adce052152edd70 ""
"figures/fig_invariance_log_hp.pdf" 1772787211.70944 478408 0ea1912229a93b394b158fd92257a66d ""
"figures/fig_invariance_log_hp.pdf" 1773227453.7878 479810 ed6614c5cd8907e3df0d9491fa880b7e ""
"figures/fig_invariance_thresh_lp_single.pdf" 1773227716.51231 993717 4a3f16eb87f842fe8a5cddf2b365b665 ""
"figures/fig_invariance_thresh_lp_single_noise.pdf" 1773227704.85542 1512337 7854a80cfe876190279163e0f7e5104f ""
"figures/fig_pre_stages.pdf" 1771841345.77353 440442 263f9bd4a3bca8e0653ac0a4c4a8da2c ""
"main.aux" 1772789995.55643 12988 64d0311586c567b693d9506c6c12b5dd "pdflatex"
"main.bbl" 1772789854.78352 91039 1380dc8c93d2855fdb132cc5a40ad52f "biber main"
"main.run.xml" 1772789995.56243 2335 a049bc26a7f032e842ce55de5bc38328 "pdflatex"
"main.tex" 1772789993.80744 45115 2fcef2652b25ea1193a94494b1d1cf7c ""
"main.aux" 1773238449.17684 14728 db185b2df9ec693fd5b8b1e57e05bff8 "pdflatex"
"main.bbl" 1773238446.59287 91039 1380dc8c93d2855fdb132cc5a40ad52f "biber main"
"main.run.xml" 1773238449.18284 2335 a049bc26a7f032e842ce55de5bc38328 "pdflatex"
"main.tex" 1773238449.19584 47479 96e40a52b29dbb10a3ed8b868cb9724c ""
(generated)
"main.aux"
"main.bcf"

View File

@@ -293,6 +293,16 @@ 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_thresh_lp_single.pdf
INPUT ./figures/fig_invariance_thresh_lp_single.pdf
INPUT ./figures/fig_invariance_thresh_lp_single.pdf
INPUT ./figures/fig_invariance_thresh_lp_single.pdf
INPUT ./figures/fig_invariance_thresh_lp_single.pdf
INPUT ./figures/fig_invariance_thresh_lp_single_noise.pdf
INPUT ./figures/fig_invariance_thresh_lp_single_noise.pdf
INPUT ./figures/fig_invariance_thresh_lp_single_noise.pdf
INPUT ./figures/fig_invariance_thresh_lp_single_noise.pdf
INPUT ./figures/fig_invariance_thresh_lp_single_noise.pdf
INPUT main.aux
INPUT 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) 6 MAR 2026 10:39
This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023/Debian) (preloaded format=pdflatex 2025.10.28) 11 MAR 2026 15:14
entering extended mode
restricted \write18 enabled.
file:line:error style messages enabled.
@@ -768,7 +768,21 @@ 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)
[11]
<figures/fig_invariance_thresh_lp_single.pdf, id=1145, 910.48819pt x 455.2441pt>
File: figures/fig_invariance_thresh_lp_single.pdf Graphic file (type pdf)
<use figures/fig_invariance_thresh_lp_single.pdf>
Package pdftex.def Info: figures/fig_invariance_thresh_lp_single.pdf used on input line 654.
(pdftex.def) Requested size: 483.69687pt x 241.84782pt.
[12 <./figures/fig_invariance_log_hp.pdf>]
<figures/fig_invariance_thresh_lp_single_noise.pdf, id=1209, 910.48819pt x 455.2441pt>
File: figures/fig_invariance_thresh_lp_single_noise.pdf Graphic file (type pdf)
<use figures/fig_invariance_thresh_lp_single_noise.pdf>
Package pdftex.def Info: figures/fig_invariance_thresh_lp_single_noise.pdf used on input line 676.
(pdftex.def) Requested size: 483.69687pt x 241.84782pt.
[13 <./figures/fig_invariance_thresh_lp_single.pdf>] [14 <./figures/fig_invariance_thresh_lp_single_noise.pdf>] [15
] [16] [17] (./main.aux)
***********
LaTeX2e <2023-11-01> patch level 1
L3 programming layer <2024-01-22>
@@ -778,18 +792,18 @@ Package logreq Info: Writing requests to 'main.run.xml'.
)
Here is how much of TeX's memory you used:
20725 strings out of 474222
446531 string characters out of 5748732
20741 strings out of 474222
447377 string characters out of 5748732
1937975 words of memory out of 5000000
42715 multiletter control sequences out of 15000+600000
42731 multiletter control sequences out of 15000+600000
569394 words of font info for 79 fonts, out of 8000000 for 9000
1143 hyphenation exceptions out of 8191
94i,19n,93p,1224b,1732s stack positions out of 10000i,1000n,20000p,200000b,200000s
94i,19n,93p,1214b,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>
Output written on main.pdf (15 pages, 10838053 bytes).
Output written on main.pdf (17 pages, 13334435 bytes).
PDF statistics:
1290 PDF objects out of 1440 (max. 8388607)
764 compressed objects within 8 object streams
1393 PDF objects out of 1440 (max. 8388607)
802 compressed objects within 9 object streams
0 named destinations out of 1000 (max. 500000)
33 words of extra memory for PDF output out of 10000 (max. 10000000)
43 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

@@ -625,11 +625,11 @@ the signal for reliable song recognition.
\includegraphics[width=\textwidth]{figures/fig_invariance_log_hp.pdf}
\caption{\textbf{Intensity invariance by logarithmic compression and
adaptation is restricted by the noise floor.}
Synthetic envelope $\env(t)$ is transformed into
logarihmically compressed envelope $\db(t)$ and further
into intensity-adapted envelope $\adapt(t)$. Indicated
time scale is $5\,$s for both \textbf{a} and \textbf{b}
(black bars).
Envelope $\env(t)$ is transformed into logarihmically
compressed envelope $\db(t)$ and further into
intensity-adapted envelope $\adapt(t)$. Indicated time
scale is $5\,$s for both \textbf{a} and \textbf{b} (black
bars).
\textbf{a}:~Ideally, if $\env(t)$ consists only of song
component $\soc(t)$ rescaled by $\sca$, then $\adapt(t)$
is fully intensity-invariant across all $\sca$.
@@ -649,6 +649,51 @@ the signal for reliable song recognition.
\subsection{Thresholding nonlinearity \& temporal averaging}
\begin{figure}[!ht]
\centering
\includegraphics[width=\textwidth]{figures/fig_invariance_thresh_lp_single.pdf}
\caption{\textbf{Intensity invariance by thresholding and temporal
averaging depends on the threshold value.}
Kernel response $c_i(t)$ is rescaled by $\sca$ and
transformed into binary response $b_i(t)$ and further into
feature $f_i(t)$. Threshold value $\thr$ is set to
different percentiles of the the distribution of $c_i(t)$
at $\sca=1$. Darker colors indicate higher values of
$\thr$. Indicated time scale of $500\,$ms is the same for
\textbf{a}-\textbf{c} (black bar).
\textbf{a}:~50th percentile.
\textbf{b}:~75th percentile.
\textbf{c}:~100th percentile.
\textbf{d}:~Average value of $f_i(t)$ during the song for
the different $\thr$ in \textbf{a}-\textbf{c}.
}
\label{fig:inv_thresh-lp_single}
\end{figure}
\FloatBarrier
\begin{figure}[!ht]
\centering
\includegraphics[width=\textwidth]{figures/fig_invariance_thresh_lp_single_noise.pdf}
\caption{\textbf{Intensity invariance by thresholding and temporal
averaging depends on noise.}
Kernel response $c_i(t)$ is rescaled by $\sca$, mixed with
fixed-scale noise component $\noc(t)$, and transformed
into binary response $b_i(t)$ and further into feature
$f_i(t)$. Threshold value $\thr$ is set to different
percentiles of the the distribution of $c_i(t)$ at
$\sca=1$. Darker colors indicate higher values of $\thr$.
Indicated time scale of $500\,$ms is the same for
\textbf{a}-\textbf{c} (black bar).
\textbf{a}:~50th percentile.
\textbf{b}:~75th percentile.
\textbf{c}:~100th percentile.
\textbf{d}:~Average value of $f_i(t)$ during the song for
the different $\thr$ in \textbf{a}-\textbf{c}.
}
\label{fig:inv_thresh-lp_single_noise}
\end{figure}
\FloatBarrier
The second key mechanism for the emergence of intensity invariance along the
model pathway takes place during the transformation of the kernel responses
$c_i(t)$ over the binary responses $b_i(t)$ into the finalized features

View File

@@ -6,7 +6,8 @@ from thunderhopper.filetools import search_files
from thunderhopper.modeltools import load_data
from color_functions import load_colors
from plot_functions import hide_axis, ylimits, xlabel, ylabel,\
plot_line, strip_zeros, time_bar
plot_line, strip_zeros, time_bar,\
letter_subplot, letter_subplots
from IPython import embed
def add_snip_axes(fig, grid_kwargs):
@@ -128,26 +129,17 @@ xloc = dict(
)
letter_snip_kwargs = dict(
x=0.02,
y=1,
y=0.97,
ha='left',
va='top',
fontsize=22,
fontweight='bold'
)
letter_analysis_kwargs = dict(
x=0,
y=1,
yref=letter_snip_kwargs['y'],
ha='left',
va='top',
fontsize=22,
fontweight='bold'
)
indicate_unsaturated = False
unsaturated_proportion = 0.85
unsaturated_kwargs = dict(
color=3 * (0.85,),
zorder=0,
lw=0
)
bar_time = 5
bar_kwargs = dict(
@@ -179,7 +171,6 @@ for data_path in data_paths:
transform=pure_subfig.transSubfigure)
for ax, scale in zip(pure_axes[snip_specs['env']], pure_data['example_scales']):
ax.set_title(f'$\\alpha={strip_zeros(scale)}$')
pure_subfig.text(s='a', **letter_snip_kwargs)
# Prepare noise-song snippet axes:
noise_subfig = fig.add_subfigure(super_grid[subfig_specs['noise']])
@@ -191,7 +182,7 @@ for data_path in data_paths:
transform=noise_subfig.transSubfigure)
for ax, scale in zip(noise_axes[snip_specs['env']], noise_data['example_scales']):
ax.set_title(f'$\\alpha={strip_zeros(scale)}$')
noise_subfig.text(s='b', **letter_snip_kwargs)
letter_subplots([pure_subfig, noise_subfig], **letter_snip_kwargs)
# Prepare analysis axis:
analysis_subfig = fig.add_subfigure(super_grid[subfig_specs['analysis']])
@@ -204,7 +195,7 @@ for data_path in data_paths:
analysis_ax.set_yscale('log')
ylabel(analysis_ax, ylabels['analysis'], **ylab_analysis_kwargs,
transform=analysis_subfig.transSubfigure)
analysis_subfig.text(s='c', **letter_analysis_kwargs)
letter_subplot(analysis_subfig, 'c', **letter_analysis_kwargs, ref=pure_subfig)
# Plot pure-song envelope snippets:
plot_snippets(pure_axes[snip_specs['env']], t_full, pure_data['env'],
@@ -238,19 +229,9 @@ for data_path in data_paths:
# Plot pure-song SD ratios (ideal):
base_ind = np.argmin(pure_data['scales'])
# measure_env = pure_data['measure_env'] / pure_data['measure_env'][base_ind]
# measure_log = pure_data['measure_log'] / pure_data['measure_log'][base_ind]
measure_inv = pure_data['measure_inv'] / pure_data['measure_inv'][base_ind]
# analysis_ax.plot(pure_data['scales'], measure_env, c=colors['env'], lw=lw_analysis, ls='--')
# analysis_ax.plot(pure_data['scales'], measure_log, c=colors['log'], lw=lw_analysis, ls='--')
analysis_ax.plot(pure_data['scales'], measure_inv, c=colors['inv'], lw=lw_analysis, ls='--')
if indicate_unsaturated:
# Indicate influence of noise floor:
limit = noise_data['limit'] * unsaturated_proportion
thresh_ind = np.nonzero(noise_data['measure_inv'] <= limit)[0][-1]
analysis_ax.axvspan(0, noise_data['scales'][thresh_ind], **unsaturated_kwargs)
# Plot noise-song SD ratios (limited):
base_ind = np.argmin(noise_data['scales'])
measure_env = noise_data['measure_env'] / noise_data['measure_env'][base_ind]

View File

@@ -5,9 +5,10 @@ from itertools import product
from thunderhopper.filetools import search_files
from thunderhopper.modeltools import load_data
from thunderhopper.filtertools import find_kern_specs
from color_functions import load_colors
from plot_functions import hide_axis, xlimits, ylimits, xlabel, ylabel, super_ylabel,\
plot_line, plot_barcode, strip_zeros, time_bar
from color_functions import load_colors, shade_colors
from plot_functions import hide_axis, ylimits, xlabel, ylabel, super_ylabel,\
plot_line, plot_barcode, strip_zeros, time_bar,\
letter_subplot, letter_subplots
from IPython import embed
def add_snip_axes(fig, grid_kwargs):
@@ -19,10 +20,13 @@ def add_snip_axes(fig, grid_kwargs):
[hide_axis(ax, 'bottom') for ax in axes.flatten()]
return axes
def plot_snippets(axes, time, snippets, ymin=None, ymax=None, **kwargs):
def plot_snippets(axes, time, snippets, ymin=None, ymax=None,
thresh=None, fill_kwargs={}, **kwargs):
ymin, ymax = ylimits(snippets, minval=ymin, maxval=ymax, pad=0.05)
for ax, snippet in zip(axes, snippets.T):
plot_line(ax, time, snippet, ymin=ymin, ymax=ymax, **kwargs)
if thresh is not None:
ax.fill_between(time, thresh, snippet, where=(snippet > thresh), **fill_kwargs)
return None
def plot_bi_snippets(axes, time, binary, **kwargs):
@@ -30,27 +34,29 @@ def plot_bi_snippets(axes, time, binary, **kwargs):
plot_barcode(ax, time, binary[:, None], **kwargs)
return None
def side_distributions(axes, snippets, inset_bounds, thresh,
ymin=None, ymax=None):
bins = np.linspace(snippets.min(), snippets.max(), 50)
centers = bins[:-1] + (bins[1] - bins[0]) / 2
def side_distributions(axes, snippets, inset_bounds, thresh, nbins=50,
ymin=None, ymax=None, fill_kwargs={}, **kwargs):
limits = np.array([snippets.min(), snippets.max()]) * 1.05
edges = np.linspace(*limits, nbins + 1)
centers = edges[:-1] + (edges[1] - edges[0]) / 2
for ax, snippet in zip(axes, snippets.T):
pdf, _ = np.histogram(snippet, edges, density=True)
inset = ax.inset_axes(inset_bounds)
inset.axis('off')
pdf, _ = np.histogram(snippet, bins, density=True)
inset.plot(pdf, centers, c='k', lw=1)
inset.plot(pdf, centers, **kwargs)
inset.fill_betweenx(centers, pdf.min(), pdf, where=(centers > thresh),
color=colors['bi'], lw=0)
inset.set_xlim(0, pdf.max())
**fill_kwargs)
ylimits(centers, inset, minval=ymin, maxval=ymax, pad=0)
inset.set_xlim(0, pdf.max())
inset.axis('off')
return None
# GENERAL SETTINGS:
with_noise = True
with_noise = False
target = 'Omocestus_rufipes'
search_kwargs = dict(
incl='subset' if not with_noise else 'subset_noise',
incl=['subset', 'noise'] if with_noise else 'subset',
excl=None if with_noise else 'noise',
dir='../data/inv/thresh_lp/'
)
data_paths = search_files(target, **search_kwargs)
@@ -59,9 +65,9 @@ load_kwargs = dict(
files=stages,
keywords=['scales', 'snip', 'measure', 'thresh']
)
save_path = None#'../figures/fig_invariance_thresh_lp_single'
save_path = '../figures/fig_invariance_thresh_lp_single.pdf'
if with_noise and save_path is not None:
save_path += '_noise'
save_path = save_path.replace('.pdf', '_noise.pdf')
# GRAPH SETTINGS:
fig_kwargs = dict(
@@ -69,7 +75,7 @@ fig_kwargs = dict(
)
super_grid_kwargs = dict(
nrows=None,
ncols=2,
ncols=3,
wspace=0,
hspace=0,
left=0,
@@ -77,14 +83,18 @@ super_grid_kwargs = dict(
bottom=0,
top=1
)
subfig_specs = dict(
snip=(slice(None), slice(super_grid_kwargs['ncols'] - 1)),
big=(slice(None), -1),
)
snip_grid_kwargs = dict(
nrows=len(stages),
ncols=None,
wspace=0.11,
wspace=0.3,
hspace=0.1,
left=0.1,
right=0.95,
bottom=0.01,
right=0.93,
bottom=0.05,
top=0.85
)
big_grid_kwargs = dict(
@@ -92,20 +102,22 @@ big_grid_kwargs = dict(
ncols=1,
wspace=0,
hspace=0,
left=0.15,
left=0.17,
right=0.96,
bottom=0.1,
top=0.99
)
inset_bounds = [1, 0, 0.1, 1]
inset_bounds = [1.02, 0, 0.2, 1]
# PLOT SETTINGS:
colors = load_colors('../data/stage_colors.npz')
# lw_snippets = dict(
# conv=0.5,
# feat=2
# )
# lw_analysis = 3
color_factors = [0.2, -0.2]
lw = dict(
conv=1,
bi=0.1,
feat=3,
big=4,
)
xlabels = dict(
big='scale $\\alpha$',
)
@@ -135,42 +147,49 @@ ylab_super_kwargs = dict(
va='center',
)
ylab_big_kwargs = dict(
x=0.02,
x=0,
fontsize=20,
ha='center',
va='top',
)
# xloc = dict(
# analysis=10,
# )
# letter_snip_kwargs = dict(
# x=0.02,
# y=1,
# ha='left',
# va='top',
# fontsize=22,
# fontweight='bold'
# )
# letter_analysis_kwargs = dict(
# x=0,
# y=1,
# ha='left',
# va='top',
# fontsize=22,
# fontweight='bold'
# )
# bar_time = 5
# bar_kwargs = dict(
# y0=0.7,
# y1=0.8,
# color='k',
# lw=0,
# )
yloc = dict(
big=0.2,
)
letter_snip_kwargs = dict(
x=0.01,
y=0.9,
ha='left',
va='top',
fontsize=22,
)
letter_big_kwargs = dict(
x=0,
yref=letter_snip_kwargs['y'],
ha='left',
va='top',
fontsize=22,
)
dist_kwargs = dict(
nbins=50,
c='k',
lw=1,
)
dist_fill_kwargs = dict(
color=colors['bi'],
lw=0.1,
)
bar_time = 0.5
bar_kwargs = dict(
y0=0.3,
y1=0.4,
color='k',
lw=0,
)
kernel = np.array([
[2, 0.008],
[4, 0.008],
])[:1]
zoom_rel = np.array([0.5, 0.55])
zoom_rel = np.array([0.5, 0.525])
# EXECUTION:
@@ -193,6 +212,14 @@ for data_path in data_paths:
data['threshs'] = data['threshs'][:, kern_ind]
t_full = np.arange(data['snip_conv'].shape[0]) / config['env_rate']
# Get threshold-specific colors:
factors = np.linspace(*color_factors, data['thresh_perc'].size)
colors = dict(
conv=shade_colors(colors['conv'], factors),
bi=shade_colors(colors['bi'], factors),
feat=shade_colors(colors['feat'], factors),
)
# Adjust grid parameters:
super_grid_kwargs['nrows'] = data['thresh_perc'].size
snip_grid_kwargs['ncols'] = data['example_scales'].size
@@ -201,22 +228,11 @@ for data_path in data_paths:
fig = plt.figure(**fig_kwargs)
super_grid = fig.add_gridspec(**super_grid_kwargs)
# Prepare analysis axis:
big_subfig = fig.add_subfigure(super_grid[slice(None), 1])
big_grid = big_subfig.add_gridspec(**big_grid_kwargs)
big_ax = big_subfig.add_subplot(big_grid[0, 0])
xlabel(big_ax, xlabels['big'], **xlab_big_kwargs,
transform=big_subfig.transSubfigure)
ylabel(big_ax, ylabels['big'], **ylab_big_kwargs,
transform=big_subfig.transSubfigure)
big_ax.set_xlim(data['scales'].min(), data['scales'].max())
ylimits(data['measure_feat'], big_ax, minval=0, pad=0.05)
big_ax.set_xscale('symlog', linthresh=data['scales'][1], linscale=0.5)
# Prepare snippet axes:
snip_axes = {}
for i in range(data['thresh_perc'].size):
snip_subfig = fig.add_subfigure(super_grid[i, 0])
subfig_specs['snip'] = (i, subfig_specs['snip'][1])
snip_subfig = fig.add_subfigure(super_grid[subfig_specs['snip']])
axes = add_snip_axes(snip_subfig, snip_grid_kwargs)
snip_axes[snip_subfig] = axes
super_ylabel(f'{data["thresh_perc"][i]}%', snip_subfig,
@@ -225,95 +241,50 @@ for data_path in data_paths:
ylabel(ax, ylabels[stage], **ylab_snip_kwargs,
transform=snip_subfig.transSubfigure)
if i == 0:
time_bar(axes[0, 0], bar_time, **bar_kwargs)
for ax, scale in zip(axes[0, :], data['example_scales']):
ax.set_title(f'$\\alpha={strip_zeros(scale)}$')
letter_subplots(snip_axes.keys(), **letter_snip_kwargs)
# Prepare analysis axis:
big_subfig = fig.add_subfigure(super_grid[subfig_specs['big']])
big_grid = big_subfig.add_gridspec(**big_grid_kwargs)
big_ax = big_subfig.add_subplot(big_grid[0, 0])
xlabel(big_ax, xlabels['big'], **xlab_big_kwargs,
transform=big_subfig.transSubfigure)
ylabel(big_ax, ylabels['big'], **ylab_big_kwargs,
transform=big_subfig.transSubfigure)
big_ax.set_xlim(data['scales'].min(), data['scales'].max())
big_ax.set_xscale('symlog', linthresh=data['scales'][1], linscale=0.5)
ylimits(data['measure_feat'], big_ax, minval=0, pad=0.01)
big_ax.yaxis.set_major_locator(plt.MultipleLocator(yloc['big']))
letter_subplot(big_subfig, 'd', **letter_big_kwargs, ref=list(snip_axes.keys())[0])
# Plot representation snippets per threshold:
conv_min, conv_max = ylimits(data['snip_conv'], pad=0.02)
for i, (subfig, axes) in enumerate(snip_axes.items()):
dist_fill_kwargs['color'] = colors['bi'][i]
# Plot kernel response snippets:
plot_snippets(axes[0, :], t_full, data['snip_conv'][:, :, i],
c=colors['conv'], lw=0.5)
thresh=data['threshs'][i], ymin=conv_min, ymax=conv_max,
fill_kwargs=dist_fill_kwargs, c=colors['conv'][i], lw=lw['conv'])
# Plot binary snippets:
plot_bi_snippets(axes[1, :], t_full, data['snip_bi'][:, :, i],
color=colors['bi'], lw=0)
color=colors['bi'][i], lw=lw['bi'])
# Plot feature snippets:
plot_snippets(axes[2, :], t_full, data['snip_feat'][:, :, i],
ymin=0, ymax=1, c=colors['feat'], lw=2)
ymin=0, ymax=1, c=colors['feat'][i], lw=lw['feat'])
# Plot kernel response distribution:
side_distributions(axes[0, :], data['snip_conv'][:, :, i],
inset_bounds, data['threshs'][i])
side_distributions(axes[0, :], data['snip_conv'][:, :, i], inset_bounds,
data['threshs'][i], ymin=conv_min, ymax=conv_max,
fill_kwargs=dist_fill_kwargs, **dist_kwargs)
# Plot analysis results:
big_ax.plot(data['scales'], data['measure_feat'],
c=colors['feat'], lw=3)
# # Prepare pure-song snippet axes:
# pure_subfig = fig.add_subfigure(super_grid[subfig_specs['pure']])
# pure_grid_kwargs['nrows' if pure_grid_kwargs['nrows'] is None else 'ncols'] = pure_data['example_scales'].size
# pure_axes = add_snip_axes(pure_subfig, pure_grid_kwargs)
# for ax, stage in zip(pure_axes[:, 0], stages):
# ylabel(ax, ylabels[stage], **ylab_snip_kwargs,
# transform=pure_subfig.transSubfigure)
# for ax, scale in zip(pure_axes[snip_specs['conv']], pure_data['example_scales']):
# ax.set_title(f'$\\alpha={strip_zeros(scale)}$')
# pure_subfig.text(s='a', **letter_snip_kwargs)
# # Prepare analysis axis:
# analysis_subfig = fig.add_subfigure(super_grid[subfig_specs['analysis']])
# analysis_grid = analysis_subfig.add_gridspec(**analysis_grid_kwargs)
# analysis_ax = analysis_subfig.add_subplot(analysis_grid[0, 0])
# analysis_ax.set_xlim(noise_data['scales'].min(), noise_data['scales'].max())
# analysis_ax.xaxis.set_major_locator(plt.MultipleLocator(xloc['analysis']))
# xlabel(analysis_ax, xlabels['analysis'], **xlab_analysis_kwargs,
# transform=analysis_subfig.transSubfigure)
# # analysis_ax.set_yscale('log')
# ylabel(analysis_ax, ylabels['analysis'], **ylab_analysis_kwargs,
# transform=analysis_subfig.transSubfigure)
# analysis_subfig.text(s='c', **letter_analysis_kwargs)
# # Plot pure-song kernel response snippets:
# plot_snippets(pure_axes[snip_specs['conv']], t_full, pure_data['conv'],
# c=colors['conv'], lw=lw_snippets['conv'])
# # Plot pure-song binary snippets:
# plot_bi_snippets(pure_axes[snip_specs['bi']], t_full, pure_data['bi'],
# color=colors['bi'], lw=0)
# # Plot pure-song feature snippets:
# plot_snippets(pure_axes[snip_specs['feat']], t_full, pure_data['feat'],
# ymin=0, ymax=1, c=colors['feat'], lw=lw_snippets['feat'])
# # Indicate time scale:
# time_bar(pure_axes[snip_specs['conv']][0], bar_time, **bar_kwargs)
# # Plot noise-song kernel response snippets:
# plot_snippets(noise_axes[snip_specs['conv']], t_full, noise_data['conv'],
# c=colors['conv'], lw=lw_snippets['conv'])
# # Plot noise-song binary snippets:
# plot_bi_snippets(noise_axes[snip_specs['bi']], t_full, noise_data['bi'],
# color=colors['bi'], lw=0)
# # Plot noise-song feature snippets:
# plot_snippets(noise_axes[snip_specs['feat']], t_full, noise_data['feat'],
# ymin=0, ymax=1, c=colors['feat'], lw=lw_snippets['feat'])
# # Indicate time scale:
# time_bar(noise_axes[snip_specs['conv']][0], bar_time, **bar_kwargs)
# # Plot noise-song SD ratios (limited):
# analysis_ax.plot(noise_data['scales'], noise_data['measure_conv'],
# c=colors['conv'], lw=lw_analysis)
# lower, upper = noise_data['spread_conv']
# analysis_ax.fill_between(noise_data['scales'], lower, upper,
# color=colors['conv'], **spread_kwargs)
# analysis_ax.plot(noise_data['scales'], noise_data['measure_feat'],
# c=colors['feat'], lw=lw_analysis)
# lower, upper = noise_data['spread_feat']
# analysis_ax.fill_between(noise_data['scales'], lower, upper,
# color=colors['feat'], **spread_kwargs)
handles = big_ax.plot(data['scales'], data['measure_feat'], lw=lw['big'])
[h.set_color(c) for h, c in zip(handles, colors['feat'])]
if save_path is not None:
fig.savefig(save_path)

View File

@@ -31,13 +31,27 @@ def hide_axis(ax, side='bottom'):
which='both', **params)
return None
def letter_subplots(axes, labels=None, x=0.02, y=1, ha='left', va='bottom',
fontsize=16, fontweight='bold', **kwargs):
def letter_subplot(artist, label, x=None, y=None, xref=None, yref=None, ref=None,
ha='left', va='bottom', fontsize=16, fontweight='bold', **kwargs):
trans_artist = BboxTransformTo(artist.bbox)
if x is None or y is None:
trans_ref = BboxTransformTo(ref.bbox)
transform = trans_ref + trans_artist.inverted()
if x is None:
x = transform.transform([xref, 0])[0]
if y is None:
y = transform.transform([0, yref])[1]
artist.text(x, y, label, transform=trans_artist, ha=ha, va=va,
fontsize=fontsize, fontweight=fontweight, **kwargs)
return None
def letter_subplots(artists, labels=None, x=None, y=None, xref=None, yref=None, ref=None,
ha='left', va='bottom', fontsize=16, fontweight='bold', **kwargs):
if labels is None:
labels = string.ascii_lowercase
for ax, label in zip(axes, labels):
ax.text(x, y, label, transform=ax.transAxes, ha=ha, va=va,
fontsize=fontsize, fontweight=fontweight, **kwargs)
for artist, label in zip(artists, labels):
letter_subplot(artist, label, x, y, xref, yref, ref=ref, ha=ha, va=va,
fontsize=fontsize, fontweight=fontweight, **kwargs)
return None
def xlimits(time, ax=None, minval=None, maxval=None, pad=0.05):