├── binder ├── del.txt ├── postBuild └── environment.yml ├── images ├── ac_09_fb.png ├── ac_23_exH.png ├── ac_24_dft.png ├── ac_51_qmf.png ├── ac_header.png ├── Lecture6-10.png ├── Lecture6-6.png ├── Lecture6-7.png ├── Lecture6-8.png ├── Lecture6-9.png ├── ac_12_noble.png ├── ac_14_poly1.png ├── ac_15_poly2.png ├── ac_16_poly3.png ├── ac_20_synth.png ├── ac_26_dct4.png ├── ac_52_qmf2.png ├── ac_53_qmf3.png ├── ac_54_qmf4.png ├── ac_55_pqmf1.png ├── ac_56_pqmf2.png ├── ac_03_critc1.png ├── ac_04_05_corti.png ├── ac_04_18_bark.png ├── ac_04_critc2.png ├── ac_05_01_ltq.png ├── ac_05_02_pemo.png ├── ac_07_analysis.png ├── ac_13_noble2.png ├── ac_17_polyA1.png ├── ac_18_polyS1.png ├── ac_19_polyS2.png ├── ac_21_synth2.png ├── ac_22_synth3.png ├── ac_27_dct4_1.png ├── ac_30_window.png ├── ac_34_mdct_inv.png ├── ac_36_faMatA.png ├── ac_37_faMatA1.png ├── ac_38_mdct_PR.png ├── ac_43_delayMat.png ├── ac_45_ldfbEx.png ├── ac_01_modulation.png ├── ac_04_01_psycho1.png ├── ac_04_03_cochlea.png ├── ac_04_16_groupin.jpg ├── ac_04_16_groupin.png ├── ac_04_25_inBand.png ├── ac_06_07_hybrid1.jpg ├── ac_06_08_hybrid2.jpg ├── ac_06_09_hybrid3.jpg ├── ac_06_10_hybrid4.jpg ├── ac_06_11_hybrid5.jpg ├── ac_06_12_hybrid6.jpg ├── ac_06_14_decoder.jpg ├── ac_06_upsampling.png ├── ac_08_synthesis.png ├── ac_25_dftMatrix.png ├── ac_28_freq_shift.png ├── ac_31_windowRect.png ├── ac_35_mdct_synth.png ├── ac_39_sinWindow.png ├── ac_41_sineWinIR.png ├── ac_42_sineWinFR.png ├── ac_44_delayMat2.png ├── ac_46_blockSwit.png ├── ac_47_blockSwit2.png ├── ac_48_blockSwit3.png ├── ac_49_blockSwit4.png ├── ac_50_blockSwit5.png ├── ac_02_audioCoders.png ├── ac_04_04_cochlea2.png ├── ac_04_09_frequency.png ├── ac_04_10_threshold.png ├── ac_04_11_threshold2.png ├── ac_04_14_loudness.png ├── ac_04_17_bandwidth.png ├── ac_04_19_broadnoise.png ├── ac_04_22_LpHpnoise2.png ├── ac_04_23_pureTone.png ├── ac_04_25_tonality.png ├── ac_04_26_spreadingF.png ├── ac_04_28_temporal.png ├── ac_05_downsamplint.png ├── ac_06_04_mpegHeader.jpg ├── ac_06_05_FaMetraix.jpg ├── ac_06_06_FsMetraix.jpg ├── ac_06_13_bitstream.jpg ├── ac_06_15_flowchart.jpg ├── ac_06_16_layer3Diag.jpg ├── ac_10_bandpass_ny.png ├── ac_11_bandpass_ny2.png ├── ac_29_freq_shift2.png ├── ac_40_sineWindowFR.png ├── ac_04_02_structureEar.png ├── ac_04_20_narrownoise.png ├── ac_04_21_narrownoise2.png ├── ac_04_24_complexTone.png ├── ac_04_27_maskingBands.png ├── rise_tread_quantizers.png ├── ac_04_06_preprocessing.png ├── ac_04_07_preprocessing2.png ├── ac_04_08_basilarMembrane.png ├── ac_04_12_threshold_age.png ├── ac_04_13_threshold_age2.png ├── ac_04_15_loudness_scale.png ├── ac_06_01_blockdiagramAC.jpg ├── ac_06_02_mpeg1BlockDiag.jpg ├── ac_06_02_mpeg3BlockDiag.jpg ├── ac_32_polyphaseAnalysis.png └── ac_33_polyphaseAnalysis2.png ├── audio └── Doug Aldrich - Midnight Sun [Electrovision 1997].mp3 ├── README.md ├── fb2048t1023d512bbitcs.mat ├── AC_03b_FilterBanks3.ipynb └── AC_04_psychoAcoustics.ipynb /binder/del.txt: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /images/ac_09_fb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_09_fb.png -------------------------------------------------------------------------------- /images/ac_23_exH.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_23_exH.png -------------------------------------------------------------------------------- /images/ac_24_dft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_24_dft.png -------------------------------------------------------------------------------- /images/ac_51_qmf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_51_qmf.png -------------------------------------------------------------------------------- /images/ac_header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_header.png -------------------------------------------------------------------------------- /images/Lecture6-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/Lecture6-10.png -------------------------------------------------------------------------------- /images/Lecture6-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/Lecture6-6.png -------------------------------------------------------------------------------- /images/Lecture6-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/Lecture6-7.png -------------------------------------------------------------------------------- /images/Lecture6-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/Lecture6-8.png -------------------------------------------------------------------------------- /images/Lecture6-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/Lecture6-9.png -------------------------------------------------------------------------------- /images/ac_12_noble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_12_noble.png -------------------------------------------------------------------------------- /images/ac_14_poly1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_14_poly1.png -------------------------------------------------------------------------------- /images/ac_15_poly2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_15_poly2.png -------------------------------------------------------------------------------- /images/ac_16_poly3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_16_poly3.png -------------------------------------------------------------------------------- /images/ac_20_synth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_20_synth.png -------------------------------------------------------------------------------- /images/ac_26_dct4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_26_dct4.png -------------------------------------------------------------------------------- /images/ac_52_qmf2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_52_qmf2.png -------------------------------------------------------------------------------- /images/ac_53_qmf3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_53_qmf3.png -------------------------------------------------------------------------------- /images/ac_54_qmf4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_54_qmf4.png -------------------------------------------------------------------------------- /images/ac_55_pqmf1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_55_pqmf1.png -------------------------------------------------------------------------------- /images/ac_56_pqmf2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_56_pqmf2.png -------------------------------------------------------------------------------- /images/ac_03_critc1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_03_critc1.png -------------------------------------------------------------------------------- /images/ac_04_05_corti.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_05_corti.png -------------------------------------------------------------------------------- /images/ac_04_18_bark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_18_bark.png -------------------------------------------------------------------------------- /images/ac_04_critc2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_critc2.png -------------------------------------------------------------------------------- /images/ac_05_01_ltq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_05_01_ltq.png -------------------------------------------------------------------------------- /images/ac_05_02_pemo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_05_02_pemo.png -------------------------------------------------------------------------------- /images/ac_07_analysis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_07_analysis.png -------------------------------------------------------------------------------- /images/ac_13_noble2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_13_noble2.png -------------------------------------------------------------------------------- /images/ac_17_polyA1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_17_polyA1.png -------------------------------------------------------------------------------- /images/ac_18_polyS1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_18_polyS1.png -------------------------------------------------------------------------------- /images/ac_19_polyS2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_19_polyS2.png -------------------------------------------------------------------------------- /images/ac_21_synth2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_21_synth2.png -------------------------------------------------------------------------------- /images/ac_22_synth3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_22_synth3.png -------------------------------------------------------------------------------- /images/ac_27_dct4_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_27_dct4_1.png -------------------------------------------------------------------------------- /images/ac_30_window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_30_window.png -------------------------------------------------------------------------------- /images/ac_34_mdct_inv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_34_mdct_inv.png -------------------------------------------------------------------------------- /images/ac_36_faMatA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_36_faMatA.png -------------------------------------------------------------------------------- /images/ac_37_faMatA1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_37_faMatA1.png -------------------------------------------------------------------------------- /images/ac_38_mdct_PR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_38_mdct_PR.png -------------------------------------------------------------------------------- /images/ac_43_delayMat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_43_delayMat.png -------------------------------------------------------------------------------- /images/ac_45_ldfbEx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_45_ldfbEx.png -------------------------------------------------------------------------------- /images/ac_01_modulation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_01_modulation.png -------------------------------------------------------------------------------- /images/ac_04_01_psycho1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_01_psycho1.png -------------------------------------------------------------------------------- /images/ac_04_03_cochlea.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_03_cochlea.png -------------------------------------------------------------------------------- /images/ac_04_16_groupin.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_16_groupin.jpg -------------------------------------------------------------------------------- /images/ac_04_16_groupin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_16_groupin.png -------------------------------------------------------------------------------- /images/ac_04_25_inBand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_25_inBand.png -------------------------------------------------------------------------------- /images/ac_06_07_hybrid1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_06_07_hybrid1.jpg -------------------------------------------------------------------------------- /images/ac_06_08_hybrid2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_06_08_hybrid2.jpg -------------------------------------------------------------------------------- /images/ac_06_09_hybrid3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_06_09_hybrid3.jpg -------------------------------------------------------------------------------- /images/ac_06_10_hybrid4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_06_10_hybrid4.jpg -------------------------------------------------------------------------------- /images/ac_06_11_hybrid5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_06_11_hybrid5.jpg -------------------------------------------------------------------------------- /images/ac_06_12_hybrid6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_06_12_hybrid6.jpg -------------------------------------------------------------------------------- /images/ac_06_14_decoder.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_06_14_decoder.jpg -------------------------------------------------------------------------------- /images/ac_06_upsampling.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_06_upsampling.png -------------------------------------------------------------------------------- /images/ac_08_synthesis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_08_synthesis.png -------------------------------------------------------------------------------- /images/ac_25_dftMatrix.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_25_dftMatrix.png -------------------------------------------------------------------------------- /images/ac_28_freq_shift.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_28_freq_shift.png -------------------------------------------------------------------------------- /images/ac_31_windowRect.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_31_windowRect.png -------------------------------------------------------------------------------- /images/ac_35_mdct_synth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_35_mdct_synth.png -------------------------------------------------------------------------------- /images/ac_39_sinWindow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_39_sinWindow.png -------------------------------------------------------------------------------- /images/ac_41_sineWinIR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_41_sineWinIR.png -------------------------------------------------------------------------------- /images/ac_42_sineWinFR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_42_sineWinFR.png -------------------------------------------------------------------------------- /images/ac_44_delayMat2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_44_delayMat2.png -------------------------------------------------------------------------------- /images/ac_46_blockSwit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_46_blockSwit.png -------------------------------------------------------------------------------- /images/ac_47_blockSwit2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_47_blockSwit2.png -------------------------------------------------------------------------------- /images/ac_48_blockSwit3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_48_blockSwit3.png -------------------------------------------------------------------------------- /images/ac_49_blockSwit4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_49_blockSwit4.png -------------------------------------------------------------------------------- /images/ac_50_blockSwit5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_50_blockSwit5.png -------------------------------------------------------------------------------- /images/ac_02_audioCoders.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_02_audioCoders.png -------------------------------------------------------------------------------- /images/ac_04_04_cochlea2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_04_cochlea2.png -------------------------------------------------------------------------------- /images/ac_04_09_frequency.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_09_frequency.png -------------------------------------------------------------------------------- /images/ac_04_10_threshold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_10_threshold.png -------------------------------------------------------------------------------- /images/ac_04_11_threshold2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_11_threshold2.png -------------------------------------------------------------------------------- /images/ac_04_14_loudness.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_14_loudness.png -------------------------------------------------------------------------------- /images/ac_04_17_bandwidth.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_17_bandwidth.png -------------------------------------------------------------------------------- /images/ac_04_19_broadnoise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_19_broadnoise.png -------------------------------------------------------------------------------- /images/ac_04_22_LpHpnoise2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_22_LpHpnoise2.png -------------------------------------------------------------------------------- /images/ac_04_23_pureTone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_23_pureTone.png -------------------------------------------------------------------------------- /images/ac_04_25_tonality.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_25_tonality.png -------------------------------------------------------------------------------- /images/ac_04_26_spreadingF.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_26_spreadingF.png -------------------------------------------------------------------------------- /images/ac_04_28_temporal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_28_temporal.png -------------------------------------------------------------------------------- /images/ac_05_downsamplint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_05_downsamplint.png -------------------------------------------------------------------------------- /images/ac_06_04_mpegHeader.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_06_04_mpegHeader.jpg -------------------------------------------------------------------------------- /images/ac_06_05_FaMetraix.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_06_05_FaMetraix.jpg -------------------------------------------------------------------------------- /images/ac_06_06_FsMetraix.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_06_06_FsMetraix.jpg -------------------------------------------------------------------------------- /images/ac_06_13_bitstream.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_06_13_bitstream.jpg -------------------------------------------------------------------------------- /images/ac_06_15_flowchart.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_06_15_flowchart.jpg -------------------------------------------------------------------------------- /images/ac_06_16_layer3Diag.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_06_16_layer3Diag.jpg -------------------------------------------------------------------------------- /images/ac_10_bandpass_ny.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_10_bandpass_ny.png -------------------------------------------------------------------------------- /images/ac_11_bandpass_ny2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_11_bandpass_ny2.png -------------------------------------------------------------------------------- /images/ac_29_freq_shift2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_29_freq_shift2.png -------------------------------------------------------------------------------- /images/ac_40_sineWindowFR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_40_sineWindowFR.png -------------------------------------------------------------------------------- /images/ac_04_02_structureEar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_02_structureEar.png -------------------------------------------------------------------------------- /images/ac_04_20_narrownoise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_20_narrownoise.png -------------------------------------------------------------------------------- /images/ac_04_21_narrownoise2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_21_narrownoise2.png -------------------------------------------------------------------------------- /images/ac_04_24_complexTone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_24_complexTone.png -------------------------------------------------------------------------------- /images/ac_04_27_maskingBands.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_27_maskingBands.png -------------------------------------------------------------------------------- /images/rise_tread_quantizers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/rise_tread_quantizers.png -------------------------------------------------------------------------------- /images/ac_04_06_preprocessing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_06_preprocessing.png -------------------------------------------------------------------------------- /images/ac_04_07_preprocessing2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_07_preprocessing2.png -------------------------------------------------------------------------------- /images/ac_04_08_basilarMembrane.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_08_basilarMembrane.png -------------------------------------------------------------------------------- /images/ac_04_12_threshold_age.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_12_threshold_age.png -------------------------------------------------------------------------------- /images/ac_04_13_threshold_age2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_13_threshold_age2.png -------------------------------------------------------------------------------- /images/ac_04_15_loudness_scale.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_04_15_loudness_scale.png -------------------------------------------------------------------------------- /images/ac_06_01_blockdiagramAC.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_06_01_blockdiagramAC.jpg -------------------------------------------------------------------------------- /images/ac_06_02_mpeg1BlockDiag.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_06_02_mpeg1BlockDiag.jpg -------------------------------------------------------------------------------- /images/ac_06_02_mpeg3BlockDiag.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_06_02_mpeg3BlockDiag.jpg -------------------------------------------------------------------------------- /images/ac_32_polyphaseAnalysis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_32_polyphaseAnalysis.png -------------------------------------------------------------------------------- /images/ac_33_polyphaseAnalysis2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/images/ac_33_polyphaseAnalysis2.png -------------------------------------------------------------------------------- /audio/Doug Aldrich - Midnight Sun [Electrovision 1997].mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kirlf/AudioCoding_Tutorials/main/audio/Doug Aldrich - Midnight Sun [Electrovision 1997].mp3 -------------------------------------------------------------------------------- /binder/postBuild: -------------------------------------------------------------------------------- 1 | jupyter contrib nbextension install --user 2 | jupyter nbextension enable --py widgetsnbextension 3 | jupyter nbextension enable python-markdown/main 4 | jupyter trust *.ipynb 5 | jupyter nbextension enable hide_input/main 6 | -------------------------------------------------------------------------------- /binder/environment.yml: -------------------------------------------------------------------------------- 1 | name: TU_Tutorials 2 | channels: 3 | - conda-forge 4 | - defaults 5 | dependencies: 6 | - python= 7 | - numpy 8 | - scipy 9 | - matplotlib 10 | - scikit-learn 11 | - sympy 12 | - bokeh 13 | - librosa 14 | - notebook 15 | - jupyter_nbextensions_configurator 16 | - jupyter_contrib_nbextensions 17 | - widgetsnbextension 18 | - rise 19 | - ipywidgets 20 | - pyaudio 21 | - plotly=3.10.0 22 | - nodejs 23 | 24 | 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Audio Coding Video Tutorials and Python Notebooks 2 |

3 | 4 |

5 | 6 | #### Prof. Dr. -Ing. Gerald Schuller
Jupyter Notebooks and Videos: Renato Profeta 7 | [Applied Media Systems Group](https://www.tu-ilmenau.de/en/applied-media-systems-group/)
8 | [Technische Universität Ilmenau](https://www.tu-ilmenau.de/) 9 | 10 | # Content 11 | ## 01 Basics of Multirate Signal Processing:
[![NBViewer](https://badgen.net/badge/Launch/on%20NBViewer/blue?icon=terminal)](https://nbviewer.jupyter.org/github/GuitarsAI/AudioCodingTutorials/blob/master/AC_01_Basics_Multirate.ipynb)[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/GuitarsAI/AudioCodingTutorials/master?filepath=AC_01_Basics_Multirate.ipynb)[![Google Colab](https://badgen.net/badge/Launch/on%20Google%20Colab/black?icon=terminal)](https://colab.research.google.com/github/GuitarsAI/AudioCodingTutorials/blob/master/AC_01_Basics_Multirate.ipynb)[![Youtube](https://badgen.net/badge/Launch/on%20YouTube/red?icon=terminal)](https://youtu.be/Tp96ICZ_pMg) 12 | 13 | - Sampling 14 | - Sampling a Discrete Time Signal 15 | - Downsampling 16 | - Upsampling 17 | - Real-Time Python Example: Sampling 18 | - Effects in the z-Domain 19 | - Modulation 20 | - Real-Time Python Example: Modulating a Speech Signal 21 | - Mid-rise and Mid-tread quantization 22 | - Real-Time Python Example: Quantization 23 | 24 | ## 02 Filter Banks I :
[![NBViewer](https://badgen.net/badge/Launch/on%20NBViewer/blue?icon=terminal)](https://nbviewer.jupyter.org/github/GuitarsAI/AudioCodingTutorials/blob/master/AC_02_FilterBanks1.ipynb)[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/GuitarsAI/AudioCodingTutorials/master?filepath=AC_02_FilterBanks1.ipynb)[![Google Colab](https://badgen.net/badge/Launch/on%20Google%20Colab/black?icon=terminal)](https://colab.research.google.com/github/GuitarsAI/AudioCodingTutorials/blob/master/AC_02_FilterBanks1.ipynb)[![Youtube](https://badgen.net/badge/Launch/on%20YouTube/red?icon=terminal)](https://youtu.be/Zk8Oum6LtUc) 25 | 26 | - Filter Banks 27 | - Downsampling 28 | - Upsampling 29 | - Filter Bank Structure 30 | - Perfect Reconstruction 31 | - Analysis Filter Bank 32 | - Synthesis Filter Bank 33 | - Polyphase 34 | - Transforms as Filter Banks 35 | - Real-Time Python Examples 36 | 37 | ## 03 Filter Banks II :
[![NBViewer](https://badgen.net/badge/Launch/on%20NBViewer/blue?icon=terminal)](https://nbviewer.jupyter.org/github/GuitarsAI/AudioCodingTutorials/blob/master/AC_03_FilterBanks2.ipynb)[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/GuitarsAI/AudioCodingTutorials/master?filepath=AC_03_FilterBanks2.ipynb)[![Google Colab](https://badgen.net/badge/Launch/on%20Google%20Colab/black?icon=terminal)](https://colab.research.google.com/github/GuitarsAI/AudioCodingTutorials/blob/master/AC_03_FilterBanks2.ipynb)[![Youtube](https://badgen.net/badge/Launch/on%20YouTube/red?icon=terminal)](https://youtu.be/f1ykTtvWkwM) 38 | 39 | - Modulated Filter Banks - Extending the DCT 40 | - Modulated Filter Banks 41 | - Frequency Shifts 42 | - The Window Function 43 | - Fast Implementation: Analysis Polyphase Matrix 44 | - The MDCT Filter Bank 45 | - Graphical Interpretation of Analysis Matrix 𝐹𝑎 46 | - MDCT, Perfect Reconstruction 47 | - MDCT Filter Banks, Sine Window 48 | - Sine-Window Frequency Response 49 | - MDCT, Advantages 50 | - MDCT Filter Banks, Impulse Responses 51 | - MDCT Filter Banks, Frequency Responses 52 | - MDCT: Python Examples 53 | - MDCT Fast Implementation 54 | - Extending the Length of the MDCT 55 | - Zero-Delay Matrix 56 | - Maximum-Delay Matrix 57 | - Design Method 58 | - Real-Time Example 59 | 60 | ## 03b Filter Banks III :
[![NBViewer](https://badgen.net/badge/Launch/on%20NBViewer/blue?icon=terminal)](https://nbviewer.jupyter.org/github/GuitarsAI/AudioCodingTutorials/blob/master/AC_03b_FilterBanks3.ipynb)[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/GuitarsAI/AudioCodingTutorials/master?filepath=AC_03b_FilterBanks3.ipynb)[![Google Colab](https://badgen.net/badge/Launch/on%20Google%20Colab/black?icon=terminal)](https://colab.research.google.com/github/GuitarsAI/AudioCodingTutorials/blob/master/AC_03b_FilterBanks3.ipynb)[![Youtube](https://badgen.net/badge/Launch/on%20YouTube/red?icon=terminal)](https://youtu.be/eLHqX6qZcX4) 61 | 62 | - Block Switching 63 | - Wavelets, QMF (Quadradutre Mirror Filter) Filter Banks 64 | - QMF (Quadrature Mirror Filter) 65 | - CQMF: Conjugate QMF 66 | - Pseudo-QMF (PQMF) 67 | - PQMF used in MPEG4 68 | 69 | ## 04 Psychoacoustics :
[![NBViewer](https://badgen.net/badge/Launch/on%20NBViewer/blue?icon=terminal)](https://nbviewer.jupyter.org/github/GuitarsAI/AudioCodingTutorials/blob/master/AC_04_psychoAcoustics.ipynb)[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/GuitarsAI/AudioCodingTutorials/master?filepath=AC_04_psychoAcoustics.ipynb)[![Google Colab](https://badgen.net/badge/Launch/on%20Google%20Colab/black?icon=terminal)](https://colab.research.google.com/github/GuitarsAI/AudioCodingTutorials/blob/master/AC_04_psychoAcoustics.ipynb)[![Youtube](https://badgen.net/badge/Launch/on%20YouTube/red?icon=terminal)](https://youtu.be/Dp9NhFShaPM) 70 | 71 | - Block Diagram of a Perceptual Audio Encoder 72 | - Structure of the Human Ear 73 | - Cochlea 74 | - Organ of Corti 75 | - Preprocessing of Sound in the Peripheral System 76 | - Information Processing in the Auditory System 77 | - Sound Perception 78 | - Frequency and Level Range of Human Hearing 79 | - Threshold in Quiet or the Absolute Threshold 80 | - Hearing Threshold and Age 81 | - Loudness 82 | - Critical Bands 83 | - Frequency Grouping in Human Hearing 84 | - Excursus - Critical Bands and Loudness 85 | - Bark Scale 86 | - Masking 87 | - Masking of Pure Tones by Noise -Broad-Band Noise 88 | - Masking of Pure Tones by Noise -Narrow-Band Noise 89 | - Masking of Pure Tones by Low-Pass or High-Pass Noise 90 | - Masking of Pure Tones by Pure Tone 91 | - Masking of Pure Tone by Complex Tones 92 | - Tonality 93 | - Masking - Spreading Function 94 | - Calculating the Masking Threshold 95 | - In-Band Making 96 | - Masking Neighboring Bands 97 | - Temporal Masking Effects 98 | 99 | ## 05 Psychoacoustics Models :
[![NBViewer](https://badgen.net/badge/Launch/on%20NBViewer/blue?icon=terminal)](https://nbviewer.jupyter.org/github/GuitarsAI/AudioCodingTutorials/blob/master/AC_05_psychoAcousticsModels.ipynb)[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/GuitarsAI/AudioCodingTutorials/master?filepath=AC_05_psychoAcousticsModels.ipynb)[![Google Colab](https://badgen.net/badge/Launch/on%20Google%20Colab/black?icon=terminal)](https://colab.research.google.com/github/GuitarsAI/AudioCodingTutorials/blob/master/AC_05_psychoAcousticsModels.ipynb)[![Youtube](https://badgen.net/badge/Launch/on%20YouTube/red?icon=terminal)](https://youtu.be/CulE7VNtf5Q) 100 | 101 | - Spreading Function: Python Example 102 | - Masking Neighboring Bands Non-Linear Superposition 103 | - Bark Scale Approximations: 104 | - Zwicker&Terhard 105 | - Traunmueller 106 | - Schröder 107 | - Bark Scale Approximations: Comparisons 108 | - Bark Scale Mapping 109 | - Mapping from Bark scale back to Linear 110 | - Hearing Threshold in Quiet 111 | - The Complete Psycho-Acoustic Model 112 | - Physical Models of Hearing 113 | 114 | ## 06 PQMF Filter Bank, MPEG-1 / MPEG-2 BC Audio :
[![NBViewer](https://badgen.net/badge/Launch/on%20NBViewer/blue?icon=terminal)](https://nbviewer.jupyter.org/github/GuitarsAI/AudioCodingTutorials/blob/master/AC_06_PQMF_FilterBank.ipynb)[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/GuitarsAI/AudioCodingTutorials/master?filepath=AC_06_PQMF_FilterBank.ipynb)[![Google Colab](https://badgen.net/badge/Launch/on%20Google%20Colab/black?icon=terminal)](https://colab.research.google.com/github/GuitarsAI/AudioCodingTutorials/blob/master/AC_06_PQMF_FilterBank.ipynb)[![Youtube](https://badgen.net/badge/Launch/on%20YouTube/red?icon=terminal)](https://youtu.be/yiPMDqBT7qk) 115 | 116 | - The Basic Paradigm of T/F Domain Audio Coding 117 | - MPEG Audio Standardization Philosophy 118 | - MPEG 1/2 119 | - MPEG-1 Audio 120 | - The main building blocks 121 | - MPEG Audio - Short Description of the Layers 122 | - Block Diagram MPEG-1 Layer 1 123 | - Block diagram Layer-3 124 | - Example for the Time/Frequency Resolution for the 2-Stage Layer III Coder 125 | - MPEG - Layer-1, -2 and -3 Compression: Header 126 | - The Pseudo-Quadrature-Mirror Filter Bank (PQMF) 127 | - PQMF Definition 128 | - PQMF Reformulation 129 | - PQMF Design 130 | - Python Example Optimization 131 | - PQMF Optimization 132 | - Optimization Function 133 | - Python Example 134 | - Unity Condition 135 | - PQMF Polyphase Implementation 136 | - Hybrid Filter Bank & Aliasing 137 | - Problem of Aliasing in a Cascaded Filter Bank 138 | - Aliasing Reduction Structure (MP3) 139 | - MPEG Audio - Layer-3: Bitstream 140 | - MPEG-1 Audio Decoder 141 | - MPEG Audio – General Decoder Structure 142 | - MPEG - Audio Decoder Process (1) Layer-3 Decoder flow chart 143 | - MPEG - Audio Decoder Process Layer-3 Decoder Diagramm 144 | - Annex: Abbreviations and Companies 145 | 146 | # YouTube Playlist 147 | [![Youtube](https://badgen.net/badge/Launch/on%20YouTube/red?icon=terminal)](https://www.youtube.com/playlist?list=PL6QnpHKwdPYjRWkWLswWmxFrDmj6leRwh) 148 | 149 | # Requirements 150 | Please check the following files at the 'binder' folder: 151 | - environment.yml 152 | - postBuild 153 | 154 | # Note 155 | Examples requiring a microphone will not work on remote environments such as Binder and Google Colab. 156 | -------------------------------------------------------------------------------- /fb2048t1023d512bbitcs.mat: -------------------------------------------------------------------------------- 1 | -6.9165606e-02 -7.0128792e-02 -7.1104122e-02 -7.2091428e-02 -7.3090544e-02 -7.4101301e-02 -7.5123531e-02 -7.6157067e-02 -7.7201740e-02 -7.8257385e-02 -7.9323840e-02 -8.0401145e-02 -8.1489539e-02 -8.2589266e-02 -8.3700560e-02 -8.4823335e-02 -8.5957187e-02 -8.7101701e-02 -8.8256473e-02 -8.9421444e-02 -9.0596894e-02 -9.1783118e-02 -9.2980396e-02 -9.4188625e-02 -9.5407323e-02 -9.6635988e-02 -9.7874140e-02 -9.9121695e-02 -1.0037897e-01 -1.0164630e-01 -1.0292401e-01 -1.0421215e-01 -1.0551050e-01 -1.0681884e-01 -1.0813695e-01 -1.0946488e-01 -1.1080299e-01 -1.1215161e-01 -1.1351108e-01 -1.1488154e-01 -1.1626286e-01 -1.1765494e-01 -1.1905768e-01 -1.2047116e-01 -1.2189568e-01 -1.2333154e-01 -1.2477902e-01 -1.2623818e-01 -1.2770882e-01 -1.2919076e-01 -1.3068380e-01 -1.3218793e-01 -1.3370336e-01 -1.3523027e-01 -1.3676888e-01 -1.3831957e-01 -1.3988291e-01 -1.4145948e-01 -1.4304979e-01 -1.4465271e-01 -1.4626543e-01 -1.4788511e-01 -1.4950920e-01 -1.5114266e-01 -1.5279793e-01 -1.5448777e-01 -1.5622467e-01 -1.5801472e-01 -1.5985765e-01 -1.6175289e-01 -1.6369988e-01 -1.6569810e-01 -1.6774712e-01 -1.6984650e-01 -1.7199578e-01 -1.7419447e-01 -1.7644199e-01 -1.7873779e-01 -1.8108129e-01 -1.8347197e-01 -1.8590934e-01 -1.8839290e-01 -1.9092217e-01 -1.9349662e-01 -1.9611570e-01 -1.9877886e-01 -2.0148553e-01 -2.0423519e-01 -2.0702730e-01 -2.0986134e-01 -2.1273678e-01 -2.1565308e-01 -2.1860967e-01 -2.2160600e-01 -2.2464151e-01 -2.2771564e-01 -2.3082786e-01 -2.3397760e-01 -2.3716433e-01 -2.4038748e-01 -2.4364647e-01 -2.4694072e-01 -2.5026964e-01 -2.5363267e-01 -2.5702924e-01 -2.6045880e-01 -2.6392079e-01 -2.6741463e-01 -2.7093971e-01 -2.7449545e-01 -2.7808123e-01 -2.8169648e-01 -2.8534060e-01 -2.8901303e-01 -2.9271319e-01 -2.9644047e-01 -3.0019430e-01 -3.0397406e-01 -3.0777916e-01 -3.1160900e-01 -3.1546298e-01 -3.1934048e-01 -3.2324091e-01 -3.2716366e-01 -3.3110812e-01 -3.3507370e-01 -3.3905979e-01 -3.4306578e-01 -3.4709106e-01 -3.5113500e-01 -3.5519698e-01 -3.5927639e-01 -3.6337262e-01 -3.6748508e-01 -3.7161315e-01 -3.7575622e-01 -3.7991367e-01 -3.8408487e-01 -3.8826921e-01 -3.9246606e-01 -3.9667479e-01 -4.0089479e-01 -4.0512543e-01 -4.0936611e-01 -4.1361620e-01 -4.1787510e-01 -4.2214220e-01 -4.2641687e-01 -4.3069848e-01 -4.3498640e-01 -4.3927998e-01 -4.4357861e-01 -4.4788169e-01 -4.5218864e-01 -4.5649884e-01 -4.6081170e-01 -4.6512657e-01 -4.6944282e-01 -4.7375981e-01 -4.7807694e-01 -4.8239360e-01 -4.8670921e-01 -4.9102318e-01 -4.9533491e-01 -4.9964379e-01 -5.0394924e-01 -5.0825066e-01 -5.1254744e-01 -5.1683900e-01 -5.2112475e-01 -5.2540409e-01 -5.2967643e-01 -5.3394119e-01 -5.3819776e-01 -5.4244556e-01 -5.4668401e-01 -5.5091258e-01 -5.5513069e-01 -5.5933781e-01 -5.6353337e-01 -5.6771681e-01 -5.7188755e-01 -5.7604504e-01 -5.8018873e-01 -5.8431811e-01 -5.8843265e-01 -5.9253183e-01 -5.9661514e-01 -6.0068204e-01 -6.0473202e-01 -6.0876454e-01 -6.1277911e-01 -6.1677529e-01 -6.2075262e-01 -6.2471066e-01 -6.2864890e-01 -6.3256683e-01 -6.3646392e-01 -6.4033965e-01 -6.4419355e-01 -6.4802522e-01 -6.5183425e-01 -6.5562024e-01 -6.5938278e-01 -6.6312143e-01 -6.6683576e-01 -6.7052534e-01 -6.7418978e-01 -6.7782870e-01 -6.8144173e-01 -6.8502852e-01 -6.8858869e-01 -6.9212191e-01 -6.9562781e-01 -6.9910605e-01 -7.0255629e-01 -7.0597819e-01 -7.0937143e-01 -7.1273566e-01 -7.1607059e-01 -7.1937592e-01 -7.2265137e-01 -7.2589663e-01 -7.2911150e-01 -7.3229579e-01 -7.3544934e-01 -7.3857198e-01 -7.4166345e-01 -7.4472336e-01 -7.4775135e-01 -7.5074706e-01 -7.5371027e-01 -7.5664096e-01 -7.5953909e-01 -7.6240461e-01 -7.6523742e-01 -7.6803732e-01 -7.7080410e-01 -7.7353757e-01 -7.7623762e-01 -7.7890425e-01 -7.8153746e-01 -7.8413722e-01 -7.8670349e-01 -7.8923614e-01 -7.9173506e-01 -7.9420012e-01 -7.9663131e-01 -7.9902866e-01 -8.0139226e-01 -8.0372215e-01 -8.0601840e-01 -8.0828107e-01 -8.1051023e-01 -8.1270593e-01 -8.1486824e-01 -8.1724319e-01 -8.1937905e-01 -8.2152127e-01 -8.2366927e-01 -8.2582249e-01 -8.2798034e-01 -8.3014227e-01 -8.3230769e-01 -8.3447603e-01 -8.3664674e-01 -8.3881922e-01 -8.4099287e-01 -8.4316703e-01 -8.4534105e-01 -8.4751429e-01 -8.4968616e-01 -8.5185617e-01 -8.5402384e-01 -8.5618867e-01 -8.5835008e-01 -8.6050746e-01 -8.6266014e-01 -8.6480751e-01 -8.6694899e-01 -8.6908411e-01 -8.7121239e-01 -8.7333336e-01 -8.7544656e-01 -8.7755162e-01 -8.7964812e-01 -8.8173567e-01 -8.8381374e-01 -8.8588169e-01 -8.8793887e-01 -8.8998463e-01 -8.9201856e-01 -8.9404046e-01 -8.9605015e-01 -8.9804744e-01 -9.0003198e-01 -9.0200330e-01 -9.0396089e-01 -9.0590426e-01 -9.0783300e-01 -9.0974674e-01 -9.1164514e-01 -9.1352784e-01 -9.1539454e-01 -9.1724497e-01 -9.1907887e-01 -9.2089598e-01 -9.2269600e-01 -9.2447866e-01 -9.2624363e-01 -9.2799064e-01 -9.2971940e-01 -9.3142970e-01 -9.3312130e-01 -9.3479396e-01 -9.3644751e-01 -9.3808179e-01 -9.3969665e-01 -9.4129196e-01 -9.4286751e-01 -9.4442306e-01 -9.4595838e-01 -9.4747322e-01 -9.4896742e-01 -9.5044089e-01 -9.5189354e-01 -9.5332530e-01 -9.5473608e-01 -9.5612580e-01 -9.5749437e-01 -9.5884173e-01 -9.6016779e-01 -9.6147247e-01 -9.6275568e-01 -9.6401735e-01 -9.6525744e-01 -9.6647596e-01 -9.6767294e-01 -9.6884839e-01 -9.7000230e-01 -9.7113461e-01 -9.7224528e-01 -9.7333427e-01 -9.7440162e-01 -9.7544742e-01 -9.7647179e-01 -9.7747485e-01 -9.7845662e-01 -9.7941708e-01 -9.8035619e-01 -9.8127393e-01 -9.8217037e-01 -9.8304573e-01 -9.8390022e-01 -9.8473404e-01 -9.8554731e-01 -9.8634009e-01 -9.8711242e-01 -9.8786435e-01 -9.8859600e-01 -9.8930759e-01 -9.8999933e-01 -9.9067143e-01 -9.9132406e-01 -9.9195736e-01 -9.9257145e-01 -9.9316647e-01 -9.9374261e-01 -9.9430011e-01 -9.9483923e-01 -9.9536021e-01 -9.9586326e-01 -9.9634855e-01 -9.9681625e-01 -9.9726653e-01 -9.9769962e-01 -9.9811581e-01 -9.9851539e-01 -9.9889865e-01 -9.9926585e-01 -9.9961720e-01 -9.9995293e-01 -1.0002732e+00 -1.0005784e+00 -1.0008688e+00 -1.0011446e+00 -1.0014061e+00 -1.0016537e+00 -1.0018876e+00 -1.0021080e+00 -1.0023153e+00 -1.0025096e+00 -1.0026913e+00 -1.0028608e+00 -1.0030183e+00 -1.0031641e+00 -1.0032986e+00 -1.0034219e+00 -1.0035344e+00 -1.0036363e+00 -1.0037279e+00 -1.0038096e+00 -1.0038817e+00 -1.0039445e+00 -1.0039983e+00 -1.0040433e+00 -1.0040798e+00 -1.0041082e+00 -1.0041287e+00 -1.0041416e+00 -1.0041472e+00 -1.0041460e+00 -1.0041380e+00 -1.0041235e+00 -1.0041029e+00 -1.0040764e+00 -1.0040444e+00 -1.0040070e+00 -1.0039646e+00 -1.0039175e+00 -1.0038660e+00 -1.0038101e+00 -1.0037503e+00 -1.0036867e+00 -1.0036196e+00 -1.0035493e+00 -1.0034760e+00 -1.0034000e+00 -1.0033216e+00 -1.0032408e+00 -1.0031579e+00 -1.0030732e+00 -1.0029868e+00 -1.0028990e+00 -1.0028101e+00 -1.0027202e+00 -1.0026295e+00 -1.0025382e+00 -1.0024463e+00 -1.0023541e+00 -1.0022618e+00 -1.0021695e+00 -1.0020776e+00 -1.0019861e+00 -1.0018953e+00 -1.0018051e+00 -1.0017157e+00 -1.0016275e+00 -1.0015408e+00 -1.0014560e+00 -1.0013736e+00 -1.0012938e+00 -1.0012165e+00 -1.0011415e+00 -1.0010687e+00 -1.0009980e+00 -1.0009296e+00 -1.0008635e+00 -1.0007997e+00 -1.0007382e+00 -1.0006790e+00 -1.0006220e+00 -1.0005673e+00 -1.0005147e+00 -1.0004644e+00 -1.0004162e+00 -1.0003703e+00 -1.0003266e+00 -1.0002851e+00 -1.0002456e+00 -1.0002083e+00 -1.0001730e+00 -1.0001397e+00 -1.0001084e+00 -1.0000793e+00 -1.0000521e+00 -1.0000268e+00 -1.0000034e+00 -9.9998182e-01 -9.9996193e-01 -9.9994379e-01 -9.9992740e-01 -9.9991276e-01 -9.9989982e-01 -9.9988850e-01 -9.9987870e-01 -9.9987033e-01 -9.9986334e-01 -9.9985773e-01 -9.9985347e-01 -9.9985055e-01 -9.9984893e-01 -9.9984852e-01 -9.9984924e-01 -9.9985099e-01 -9.9985374e-01 -9.9985746e-01 -9.9986213e-01 -9.9986772e-01 -9.9987420e-01 -9.9988145e-01 -9.9988940e-01 -9.9989796e-01 -9.9990705e-01 -9.9991664e-01 -9.9992669e-01 -9.9993717e-01 -9.9994804e-01 -9.9995926e-01 -9.9997080e-01 -9.9998261e-01 -9.9999466e-01 -9.9999047e-01 -9.9999683e-01 -1.0000025e+00 -1.0000075e+00 -1.0000115e+00 -1.0000147e+00 -1.0000168e+00 -1.0000178e+00 -1.0000177e+00 -1.0000162e+00 -1.0000133e+00 -1.0000089e+00 -1.0000029e+00 -9.9999502e-01 -9.9998526e-01 -9.9997344e-01 -9.9995950e-01 -9.9994335e-01 -9.9992491e-01 -9.9990406e-01 -9.9988064e-01 -9.9985450e-01 -9.9982546e-01 -9.9979342e-01 -9.9975828e-01 -9.9971995e-01 -9.9967836e-01 -9.9963336e-01 -9.9958476e-01 -9.9953239e-01 -9.9947606e-01 -9.9941562e-01 -9.9935099e-01 -9.9928209e-01 -9.9920881e-01 -9.9913101e-01 -9.9904851e-01 -9.9896110e-01 -9.9886860e-01 -9.9877083e-01 -9.9866770e-01 -9.9855909e-01 -9.9844489e-01 -9.9832495e-01 -9.9819907e-01 -9.9806707e-01 -9.9792877e-01 -9.9778400e-01 -9.9763264e-01 -9.9747457e-01 -9.9730966e-01 -9.9713776e-01 -9.9695865e-01 -9.9677214e-01 -9.9657802e-01 -9.9637613e-01 -9.9616635e-01 -9.9594854e-01 -9.9572258e-01 -9.9548829e-01 -9.9524546e-01 -9.9499387e-01 -9.9473330e-01 -9.9446358e-01 -9.9418458e-01 -9.9389617e-01 -9.9359823e-01 -9.9329057e-01 -9.9297298e-01 -9.9264521e-01 -9.9230704e-01 -9.9195830e-01 -9.9159885e-01 -9.9122857e-01 -9.9084731e-01 -9.9045491e-01 -9.9005113e-01 -9.8963574e-01 -9.8920851e-01 -9.8876926e-01 -9.8831784e-01 -9.8785410e-01 -9.8737791e-01 -9.8688907e-01 -9.8638736e-01 -9.8587257e-01 -9.8534446e-01 -9.8480285e-01 -9.8424760e-01 -9.8367856e-01 -9.8309559e-01 -9.8249850e-01 -9.8188707e-01 -9.8126105e-01 -9.8062022e-01 -9.7996441e-01 -9.7929347e-01 -9.7860729e-01 -9.7790573e-01 -9.7718860e-01 -9.7645569e-01 -9.7570676e-01 -9.7494157e-01 -9.7415996e-01 -9.7336179e-01 -9.7254694e-01 -9.7171528e-01 -9.7086664e-01 -9.7000080e-01 -9.6911754e-01 -9.6821664e-01 -9.6729793e-01 -9.6636129e-01 -9.6540661e-01 -9.6443377e-01 -9.6344262e-01 -9.6243294e-01 -9.6140453e-01 -9.6035717e-01 -9.5929072e-01 -9.5820506e-01 -9.5710010e-01 -9.5597572e-01 -9.5483178e-01 -9.5366809e-01 -9.5248446e-01 -9.5128071e-01 -9.5005669e-01 -9.4881231e-01 -9.4754748e-01 -9.4626211e-01 -9.4495605e-01 -9.4362916e-01 -9.4228125e-01 -9.4091216e-01 -9.3952178e-01 -9.3811003e-01 -9.3667687e-01 -9.3522221e-01 -9.3374596e-01 -9.3224795e-01 -9.3072803e-01 -9.2918605e-01 -9.2762191e-01 -9.2603555e-01 -9.2442693e-01 -9.2279601e-01 -9.2114269e-01 -9.1946688e-01 -9.1776845e-01 -9.1604728e-01 -9.1430331e-01 -9.1253653e-01 -9.1074692e-01 -9.0893447e-01 -9.0709910e-01 -9.0524070e-01 -9.0335916e-01 -9.0145435e-01 -8.9952625e-01 -8.9757493e-01 -8.9560043e-01 -8.9360284e-01 -8.9158210e-01 -8.8953810e-01 -8.8747072e-01 -8.8537981e-01 -8.8326536e-01 -8.8112745e-01 -8.7896615e-01 -8.7678153e-01 -8.7457362e-01 -8.7234238e-01 -8.7008775e-01 -8.6780971e-01 -8.6550825e-01 -8.6318347e-01 -8.6083544e-01 -8.5846424e-01 -8.5606991e-01 -8.5365245e-01 -8.5121187e-01 -8.4874817e-01 -8.4626140e-01 -8.4375164e-01 -8.4121901e-01 -8.3866359e-01 -8.3608546e-01 -8.3348471e-01 -8.3086139e-01 -8.2821559e-01 -8.2554737e-01 -8.2285678e-01 -8.2014386e-01 -8.1740866e-01 -8.1465129e-01 -8.1187190e-01 -8.0907063e-01 -8.0624764e-01 -8.0340306e-01 -8.0053703e-01 -7.9764969e-01 -7.9474115e-01 -7.9181155e-01 -7.8886098e-01 -7.8588954e-01 -7.8289732e-01 -7.7988448e-01 -7.7685119e-01 -7.7379764e-01 -7.7072400e-01 -7.6763045e-01 -7.6451713e-01 -7.6138419e-01 -7.5823180e-01 -7.5506007e-01 -7.5186912e-01 -7.4865904e-01 -7.4542996e-01 -7.4218207e-01 -7.3891568e-01 -7.3563111e-01 -7.3232866e-01 -7.2900853e-01 -7.2567081e-01 -7.2231559e-01 -7.1894297e-01 -7.1555313e-01 -7.1214634e-01 -7.0872290e-01 -7.0528308e-01 -7.0182712e-01 -6.9835523e-01 -6.9486761e-01 -6.9136447e-01 -6.8784598e-01 -6.8431234e-01 -6.8076371e-01 -6.7720027e-01 -6.7362226e-01 -6.7002993e-01 -6.6642358e-01 -6.6280346e-01 -6.5916981e-01 -6.5552286e-01 -6.5186279e-01 -6.4818983e-01 -6.4450420e-01 -6.4080618e-01 -6.3709604e-01 -6.3337405e-01 -6.2964048e-01 -6.2589560e-01 -6.2213968e-01 -6.1837300e-01 -6.1459582e-01 6.1080519e-01 6.0700691e-01 6.0319907e-01 5.9938188e-01 5.9555555e-01 5.9172033e-01 5.8787646e-01 5.8402422e-01 5.8016386e-01 5.7629567e-01 5.7241997e-01 5.6853700e-01 5.6464698e-01 5.6075010e-01 5.5684662e-01 5.5293682e-01 5.4902096e-01 5.4509935e-01 5.4117230e-01 5.3724010e-01 5.3330299e-01 5.2936121e-01 5.2541505e-01 5.2146482e-01 5.1751080e-01 5.1355332e-01 5.0959273e-01 5.0562928e-01 5.0166311e-01 4.9769444e-01 4.9372344e-01 4.8975042e-01 4.8577576e-01 4.8179989e-01 4.7782324e-01 4.7384613e-01 4.6986876e-01 4.6589134e-01 4.6191410e-01 4.5793730e-01 4.5396124e-01 4.4998625e-01 4.4601267e-01 4.4204080e-01 4.3807095e-01 4.3410340e-01 4.3013848e-01 4.2617650e-01 4.2221774e-01 4.1826252e-01 4.1431114e-01 4.1036395e-01 4.0642117e-01 4.0248311e-01 3.9855002e-01 3.9462228e-01 3.9070017e-01 3.8678404e-01 3.8287427e-01 3.7897115e-01 3.7507496e-01 3.7118595e-01 3.6730442e-01 3.6343070e-01 3.5956517e-01 3.5570817e-01 3.5186012e-01 3.4802133e-01 3.4419206e-01 3.4037251e-01 3.3656296e-01 3.3276372e-01 3.2897509e-01 3.2519750e-01 3.2143126e-01 3.1767672e-01 3.1393411e-01 3.1020373e-01 3.0648585e-01 3.0278077e-01 2.9908883e-01 2.9541034e-01 2.9174570e-01 2.8809518e-01 2.8445912e-01 2.8083774e-01 2.7723136e-01 2.7364031e-01 2.7006492e-01 2.6650549e-01 2.6296238e-01 2.5943594e-01 2.5592637e-01 2.5243396e-01 2.4895902e-01 2.4550180e-01 2.4206263e-01 2.3864174e-01 2.3523948e-01 2.3185617e-01 2.2849201e-01 2.2514733e-01 2.2182244e-01 2.1851761e-01 2.1523309e-01 2.1196916e-01 2.0872611e-01 2.0550423e-01 2.0230374e-01 1.9912491e-01 1.9596805e-01 1.9283339e-01 1.8972121e-01 1.8663174e-01 1.8356525e-01 1.8052198e-01 1.7750214e-01 1.7450599e-01 1.7153372e-01 1.6858561e-01 1.6566182e-01 1.6276261e-01 1.5988821e-01 1.5703881e-01 1.5421464e-01 1.5141579e-01 1.4864269e-01 1.4589513e-01 1.4317342e-01 1.4047804e-01 1.3780924e-01 1.3516681e-01 1.3255103e-01 1.2996215e-01 1.2739984e-01 1.2486482e-01 1.2235700e-01 1.1987634e-01 1.1742338e-01 1.1499827e-01 1.1260058e-01 1.1023089e-01 1.0788876e-01 1.0557464e-01 1.0328876e-01 1.0103106e-01 9.8801770e-02 9.6600944e-02 9.4428431e-02 9.2284445e-02 9.0168821e-02 8.8081205e-02 8.6022143e-02 8.3991858e-02 8.1990483e-02 8.0017267e-02 7.8073091e-02 7.6157640e-02 7.4270281e-02 7.2411268e-02 7.0580229e-02 6.8778183e-02 6.7004695e-02 6.5259636e-02 6.3542616e-02 6.1854455e-02 6.0193794e-02 5.8561235e-02 5.6956676e-02 5.5379942e-02 5.3831363e-02 5.2310565e-02 5.0816801e-02 4.9350977e-02 4.7912398e-02 4.6500416e-02 4.5115796e-02 4.3758107e-02 4.2426868e-02 4.1122484e-02 3.9844484e-02 3.8592350e-02 3.7366608e-02 3.6166506e-02 3.4991884e-02 3.3843335e-02 3.2719479e-02 3.1621110e-02 3.0546815e-02 2.9497427e-02 2.8472172e-02 2.7470167e-02 2.6492524e-02 2.5539354e-02 2.4609688e-02 2.3702740e-02 2.2818090e-02 2.1956010e-02 2.1116222e-02 2.0298948e-02 1.9502943e-02 1.8728200e-02 1.7974832e-02 1.7242612e-02 1.6530885e-02 1.5839862e-02 1.5167979e-02 1.4516448e-02 1.3883511e-02 1.3270597e-02 1.2675961e-02 1.2099840e-02 1.1541580e-02 1.1002162e-02 1.0479034e-02 9.9733525e-03 9.4849156e-03 9.0134165e-03 8.5570094e-03 8.1174666e-03 7.6939132e-03 7.2851388e-03 6.8908907e-03 6.5117244e-03 6.1466648e-03 5.7955570e-03 5.4582332e-03 5.1343265e-03 4.8233550e-03 4.5252095e-03 4.2394526e-03 3.9655967e-03 3.7034261e-03 3.4528184e-03 3.2133170e-03 2.9847819e-03 2.7667353e-03 2.5588908e-03 2.3610510e-03 2.1726406e-03 1.9935106e-03 1.8232610e-03 1.6619513e-03 1.5081735e-03 1.3637997e-03 1.2266359e-03 1.0969144e-03 9.7474027e-04 8.6087196e-04 7.5224408e-04 6.4952873e-04 5.5356815e-04 4.6108541e-04 3.7550668e-04 2.9317409e-04 2.1499051e-04 5.7139224e-06 2.3524135e-06 -1.5742557e-06 -5.9616524e-06 -1.0705343e-05 -1.5700896e-05 -2.0843877e-05 -2.6029854e-05 -3.1154393e-05 -3.6113061e-05 -4.0803374e-05 -4.5167646e-05 -4.9192990e-05 -5.2868466e-05 -5.6182115e-05 -5.9098458e-05 -6.1558502e-05 -6.3502233e-05 -6.4869994e-05 -6.5610383e-05 -6.5680258e-05 -6.5036832e-05 -6.3639670e-05 -6.1502369e-05 -5.8692561e-05 -5.5280227e-05 -5.1328533e-05 -4.6743887e-05 -4.1275940e-05 -3.4667528e-05 -2.6680152e-05 -1.7504606e-05 -7.7609750e-06 1.9119885e-06 1.0908962e-05 1.9393470e-05 2.8297887e-05 3.8588014e-05 5.1199358e-05 6.6370625e-05 8.3643720e-05 1.0253025e-04 1.2255522e-04 1.4355132e-04 1.6565900e-04 1.8903206e-04 2.1382235e-04 2.4013662e-04 2.6803651e-04 2.9758169e-04 3.2883078e-04 3.6181820e-04 3.9655412e-04 4.3304770e-04 4.7130901e-04 5.1136953e-04 5.5328221e-04 5.9710091e-04 6.4288052e-04 6.9069968e-04 7.4066077e-04 7.9286719e-04 8.4742005e-04 9.0436785e-04 9.6370641e-04 1.0254293e-03 1.0895313e-03 1.1560383e-03 1.2250066e-03 1.2964941e-03 1.3705597e-03 1.4472839e-03 1.5267690e-03 1.6091185e-03 1.6944336e-03 1.7827675e-03 1.8741250e-03 1.9685091e-03 2.0659252e-03 2.1664386e-03 2.2701739e-03 2.3772584e-03 2.4878170e-03 2.6019129e-03 2.7195482e-03 2.8407226e-03 2.9654387e-03 3.0937752e-03 3.2258868e-03 3.3619314e-03 3.5020632e-03 3.6463484e-03 3.7947652e-03 3.9472879e-03 4.1038949e-03 4.2646552e-03 4.4297279e-03 4.5992763e-03 4.7734606e-03 4.9523658e-03 5.1360023e-03 5.3243771e-03 5.5175001e-03 5.7154446e-03 5.9183472e-03 6.1263474e-03 6.3395823e-03 6.5581341e-03 6.7820305e-03 7.0112967e-03 7.2459601e-03 7.4860963e-03 7.7318298e-03 7.9832868e-03 8.2405916e-03 8.5038203e-03 8.7730004e-03 9.0481576e-03 9.3293198e-03 9.6165689e-03 9.9100410e-03 1.0209874e-02 1.0516205e-02 1.0829113e-02 1.1148620e-02 1.1474747e-02 1.1807516e-02 1.2147005e-02 1.2493346e-02 1.2846672e-02 1.3207115e-02 1.3574750e-02 1.3949599e-02 1.4331677e-02 1.4721005e-02 1.5117659e-02 1.5521769e-02 1.5933467e-02 1.6352886e-02 1.6780104e-02 1.7215150e-02 1.7658050e-02 1.8108831e-02 1.8567567e-02 1.9034371e-02 1.9509362e-02 1.9992656e-02 2.0484326e-02 2.0984401e-02 2.1492909e-02 2.2009881e-02 2.2535387e-02 2.3069538e-02 2.3612448e-02 2.4164227e-02 2.4724948e-02 2.5294647e-02 2.5873358e-02 2.6461115e-02 2.7057984e-02 2.7664067e-02 2.8279463e-02 2.8904272e-02 2.9538560e-02 3.0182359e-02 3.0835702e-02 3.1498619e-02 3.2171182e-02 3.2853497e-02 3.3545670e-02 3.4247808e-02 3.4959978e-02 3.5682206e-02 3.6414518e-02 3.7156940e-02 3.7909538e-02 3.8672412e-02 3.9445665e-02 4.0229399e-02 4.1023679e-02 4.1828531e-02 4.2643982e-02 4.3470058e-02 4.4306815e-02 4.5154337e-02 4.6012706e-02 4.6882009e-02 4.7762315e-02 4.8653683e-02 4.9556168e-02 5.0469829e-02 5.1394721e-02 5.2330903e-02 5.3278430e-02 5.4237360e-02 5.5207750e-02 5.6189658e-02 5.7183142e-02 5.8188262e-02 5.9205083e-02 6.0233682e-02 6.1274133e-02 6.2326511e-02 6.3390867e-02 6.4467226e-02 6.5555616e-02 6.6656061e-02 6.7768624e-02 6.8893399e-02 7.0030485e-02 7.1179975e-02 7.2341927e-02 7.3516357e-02 7.4703282e-02 7.5902719e-02 7.7114721e-02 7.8339373e-02 7.9576766e-02 8.0826987e-02 8.2090091e-02 8.3366103e-02 8.4655049e-02 8.5956952e-02 8.7271856e-02 8.8599823e-02 8.9940916e-02 9.1295197e-02 9.2662717e-02 9.4043513e-02 9.5437624e-02 9.6845085e-02 9.8265941e-02 9.9700237e-02 1.0114802e-01 1.0260935e-01 1.0408424e-01 1.0557274e-01 1.0707485e-01 1.0859062e-01 1.1012008e-01 1.1166328e-01 1.1322028e-01 1.1479113e-01 1.1637586e-01 1.1797446e-01 1.1958693e-01 1.2121326e-01 1.2285349e-01 1.2450766e-01 1.2617582e-01 1.2785804e-01 1.2955436e-01 1.3126483e-01 1.3298952e-01 1.3472847e-01 1.3648174e-01 1.3494054e-04 3.6652048e-05 -2.8390545e-05 -6.0587020e-05 -6.0337157e-05 -2.8040737e-05 3.5902459e-05 1.3109265e-04 2.5713006e-04 4.1361489e-04 6.0014739e-04 8.1632775e-04 1.0617562e-03 1.3360330e-03 1.6387584e-03 1.9695325e-03 2.3279556e-03 2.7136278e-03 3.1261495e-03 3.5651209e-03 4.0301421e-03 4.5208133e-03 5.0367349e-03 5.5775070e-03 6.1427298e-03 6.7320036e-03 7.3449286e-03 7.9811050e-03 8.6401330e-03 9.3216128e-03 1.0025145e-02 1.0750329e-02 1.1496766e-02 1.2264055e-02 1.3051798e-02 1.3859593e-02 1.4687042e-02 1.5533745e-02 1.6399301e-02 1.7283311e-02 1.8185376e-02 1.9105095e-02 2.0042069e-02 2.0995898e-02 2.1966182e-02 2.2952521e-02 2.3954516e-02 2.4971767e-02 2.6003874e-02 2.7050436e-02 2.8111056e-02 2.9185332e-02 3.0272865e-02 3.1373255e-02 3.2486103e-02 3.3611008e-02 3.4747571e-02 3.5895393e-02 3.7054072e-02 3.8223210e-02 3.9402406e-02 4.0591261e-02 4.1789376e-02 4.2996349e-02 4.4211782e-02 4.5435275e-02 4.6666428e-02 4.7904841e-02 4.9150115e-02 5.0401850e-02 5.1659645e-02 5.2923102e-02 5.4191819e-02 5.5465398e-02 5.6743439e-02 5.8025542e-02 5.9311307e-02 6.0600335e-02 6.1892225e-02 6.3186578e-02 6.4482994e-02 6.5781073e-02 6.7080416e-02 6.8380623e-02 6.9681294e-02 7.0982029e-02 7.2282429e-02 7.3582093e-02 7.4880622e-02 7.6177616e-02 7.7472675e-02 7.8765399e-02 8.0055390e-02 8.1342246e-02 8.2625568e-02 8.3904957e-02 8.5180013e-02 8.6450335e-02 8.7715524e-02 8.8975181e-02 9.0228905e-02 9.1476297e-02 9.2716956e-02 9.3950484e-02 9.5176480e-02 9.6394545e-02 9.7604280e-02 9.8805284e-02 9.9997157e-02 1.0117950e-01 1.0235191e-01 1.0351399e-01 1.0466534e-01 1.0580556e-01 1.0693425e-01 1.0805101e-01 1.0915545e-01 1.1024716e-01 1.1132573e-01 1.1239078e-01 1.1344190e-01 1.1447869e-01 1.1550076e-01 1.1650769e-01 1.1749910e-01 1.1847459e-01 1.1943374e-01 1.2037617e-01 1.2130148e-01 1.2220926e-01 1.2309911e-01 1.2397064e-01 1.2482344e-01 1.2565711e-01 1.2647126e-01 1.2726548e-01 1.2803938e-01 1.2879256e-01 1.2952461e-01 1.3023514e-01 1.3092374e-01 1.3159003e-01 1.3223358e-01 1.3285402e-01 1.3345093e-01 1.3402392e-01 1.3457259e-01 1.3509653e-01 1.3559535e-01 1.3606866e-01 1.3651603e-01 1.3693709e-01 1.3733143e-01 1.3769865e-01 1.3803834e-01 1.3835012e-01 1.3863357e-01 1.3888831e-01 1.3911392e-01 1.3931002e-01 1.3947620e-01 1.3961206e-01 1.3971720e-01 1.3979122e-01 1.3983372e-01 1.3984430e-01 1.3982257e-01 1.3976811e-01 1.3968054e-01 1.3955946e-01 1.3940445e-01 1.3921514e-01 1.3899110e-01 1.3873195e-01 1.3843728e-01 1.3810669e-01 1.3773979e-01 1.3733617e-01 1.3689544e-01 1.3641719e-01 1.3590103e-01 1.3534655e-01 1.3475336e-01 1.3412105e-01 1.3344923e-01 1.3273750e-01 1.3198545e-01 1.3119269e-01 1.3035882e-01 1.2948344e-01 1.2856641e-01 1.2761399e-01 1.2663874e-01 1.2565354e-01 1.2467091e-01 1.2369590e-01 1.2272601e-01 1.2175845e-01 1.2079049e-01 1.1982103e-01 1.1885067e-01 1.1788004e-01 1.1690979e-01 1.1594036e-01 1.1497201e-01 1.1400498e-01 1.1303952e-01 1.1207566e-01 1.1111328e-01 1.1015220e-01 1.0919230e-01 1.0823368e-01 1.0727670e-01 1.0632177e-01 1.0536923e-01 1.0441924e-01 1.0347167e-01 1.0252641e-01 1.0158337e-01 1.0064272e-01 9.9704907e-02 9.8770406e-02 9.7839666e-02 9.6912790e-02 9.5989528e-02 9.5069615e-02 9.4152801e-02 9.3239173e-02 9.2329155e-02 9.1423186e-02 9.0521683e-02 8.9624612e-02 8.8731482e-02 8.7841782e-02 8.6955021e-02 8.6071124e-02 8.5190437e-02 8.4313322e-02 8.3440125e-02 8.2570820e-02 8.1705008e-02 8.0842272e-02 7.9982210e-02 7.9124768e-02 7.8270231e-02 7.7418903e-02 7.6571075e-02 7.5726811e-02 7.4885944e-02 7.4048298e-02 7.3213695e-02 7.2381961e-02 7.1552918e-02 7.0726389e-02 6.9902199e-02 6.9080171e-02 2 | -------------------------------------------------------------------------------- /AC_03b_FilterBanks3.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "slideshow": { 7 | "slide_type": "slide" 8 | } 9 | }, 10 | "source": [ 11 | "
\n", 12 | " \n", 13 | "
\n", 14 | "\n", 15 | "### Prof. Dr. -Ing. Gerald Schuller
Jupyter Notebook: Renato Profeta \n", 16 | "\n", 17 | "[Applied Media Systems Group](https://www.tu-ilmenau.de/en/applied-media-systems-group/)
\n", 18 | "[Technische Universität Ilmenau](https://www.tu-ilmenau.de/)" 19 | ] 20 | }, 21 | { 22 | "cell_type": "markdown", 23 | "metadata": { 24 | "slideshow": { 25 | "slide_type": "slide" 26 | } 27 | }, 28 | "source": [ 29 | "# Filter Banks III" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": 17, 35 | "metadata": { 36 | "hide_input": true 37 | }, 38 | "outputs": [ 39 | { 40 | "data": { 41 | "text/html": [ 42 | "\n" 43 | ], 44 | "text/plain": [ 45 | "" 46 | ] 47 | }, 48 | "metadata": {}, 49 | "output_type": "display_data" 50 | } 51 | ], 52 | "source": [ 53 | "%%html\n", 54 | "" 55 | ] 56 | }, 57 | { 58 | "cell_type": "markdown", 59 | "metadata": { 60 | "hide_input": false, 61 | "scrolled": true, 62 | "slideshow": { 63 | "slide_type": "-" 64 | } 65 | }, 66 | "source": [ 67 | "## Block Switching" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 15, 73 | "metadata": { 74 | "hide_input": true, 75 | "slideshow": { 76 | "slide_type": "-" 77 | } 78 | }, 79 | "outputs": [ 80 | { 81 | "name": "stdout", 82 | "output_type": "stream", 83 | "text": [ 84 | "https://onlinelibrary.wiley.com/doi/book/10.1002/0470041978\n" 85 | ] 86 | }, 87 | { 88 | "data": { 89 | "text/html": [ 90 | "\n", 91 | " \n", 98 | " " 99 | ], 100 | "text/plain": [ 101 | "" 102 | ] 103 | }, 104 | "execution_count": 15, 105 | "metadata": {}, 106 | "output_type": "execute_result" 107 | } 108 | ], 109 | "source": [ 110 | "from IPython.display import IFrame\n", 111 | "print('https://onlinelibrary.wiley.com/doi/book/10.1002/0470041978')\n", 112 | "IFrame('https://ieeexplore.ieee.org/book/8039676', width=900, height=400)\n" 113 | ] 114 | }, 115 | { 116 | "cell_type": "markdown", 117 | "metadata": { 118 | "hide_input": false, 119 | "slideshow": { 120 | "slide_type": "-" 121 | } 122 | }, 123 | "source": [ 124 | " - **Problem:** In audio coding, Pre-echoes appear before transients.\n", 125 | " - reason: blocks too long.\n", 126 | "\n", 127 | "
\n", 128 | " \n", 129 | "
\n", 130 | "\n", 131 | " - **Approach:** for fast changing signals use block switching to lower number of subbands.\n", 132 | " \n", 133 | "
\n", 134 | " \n", 135 | "
" 136 | ] 137 | }, 138 | { 139 | "cell_type": "markdown", 140 | "metadata": { 141 | "slideshow": { 142 | "slide_type": "-" 143 | } 144 | }, 145 | "source": [ 146 | "### Accomodate Overlap-Add for Block Switching" 147 | ] 148 | }, 149 | { 150 | "cell_type": "markdown", 151 | "metadata": { 152 | "hide_input": false, 153 | "slideshow": { 154 | "slide_type": "-" 155 | } 156 | }, 157 | "source": [ 158 | "
\n", 159 | " \n", 160 | "
\n", 161 | "
\n", 162 | "
\n", 163 | " \n", 164 | "
\n" 165 | ] 166 | }, 167 | { 168 | "cell_type": "markdown", 169 | "metadata": { 170 | "slideshow": { 171 | "slide_type": "-" 172 | } 173 | }, 174 | "source": [ 175 | "### Block Switching" 176 | ] 177 | }, 178 | { 179 | "cell_type": "markdown", 180 | "metadata": { 181 | "hide_input": false, 182 | "slideshow": { 183 | "slide_type": "-" 184 | } 185 | }, 186 | "source": [ 187 | " - Sequence of windows for switching the number of sub-bands.\n", 188 | " - Shorter windows $\\rightarrow$ better resolution.\n", 189 | " \n", 190 | "
\n", 191 | " \n", 192 | "
\n" 193 | ] 194 | }, 195 | { 196 | "cell_type": "code", 197 | "execution_count": 16, 198 | "metadata": { 199 | "hide_input": true 200 | }, 201 | "outputs": [ 202 | { 203 | "data": { 204 | "text/html": [ 205 | "\n", 206 | " \n", 213 | " " 214 | ], 215 | "text/plain": [ 216 | "" 217 | ] 218 | }, 219 | "execution_count": 16, 220 | "metadata": {}, 221 | "output_type": "execute_result" 222 | } 223 | ], 224 | "source": [ 225 | "IFrame(\"https://ccrma.stanford.edu/~pdelac/422/project/report.html\",width=900, height=400)" 226 | ] 227 | }, 228 | { 229 | "cell_type": "markdown", 230 | "metadata": { 231 | "slideshow": { 232 | "slide_type": "slide" 233 | } 234 | }, 235 | "source": [ 236 | "## Wavelets, QMF (Quadradutre Mirror Filter) Filter Banks" 237 | ] 238 | }, 239 | { 240 | "cell_type": "code", 241 | "execution_count": 18, 242 | "metadata": { 243 | "hide_input": true 244 | }, 245 | "outputs": [ 246 | { 247 | "data": { 248 | "text/html": [ 249 | "\n" 250 | ], 251 | "text/plain": [ 252 | "" 253 | ] 254 | }, 255 | "metadata": {}, 256 | "output_type": "display_data" 257 | } 258 | ], 259 | "source": [ 260 | "%%html\n", 261 | "" 262 | ] 263 | }, 264 | { 265 | "cell_type": "markdown", 266 | "metadata": { 267 | "hide_input": false, 268 | "slideshow": { 269 | "slide_type": "-" 270 | } 271 | }, 272 | "source": [ 273 | " - Iterate 2-band system.\n", 274 | " - See also: Wavelet Packets (more general)\n", 275 | " - **Problem:** Aliasing propagation reduces frequency selectivity!\n", 276 | " - Important in image coding, but no big role in Audio Coding.\n", 277 | "\n", 278 | "
\n", 279 | " \n", 280 | "
\n" 281 | ] 282 | }, 283 | { 284 | "cell_type": "markdown", 285 | "metadata": { 286 | "slideshow": { 287 | "slide_type": "-" 288 | } 289 | }, 290 | "source": [ 291 | "### How to Obtain a Two Band Filter Bank" 292 | ] 293 | }, 294 | { 295 | "cell_type": "markdown", 296 | "metadata": { 297 | "slideshow": { 298 | "slide_type": "-" 299 | } 300 | }, 301 | "source": [ 302 | " - Application: QMF filter banks, Wavelets, ...\n", 303 | " - Analysis polyphase for a 2-band filter bank:\n", 304 | " \n", 305 | " $$\\large\n", 306 | " H(z)=\n", 307 | " \\begin{bmatrix}\n", 308 | " H_{0,0}(z) & H_{0,1}(z) \\\\\n", 309 | " H_{1,0}(z) & H_{1,1}(z)\n", 310 | " \\end{bmatrix}\n", 311 | " $$\n", 312 | "
\n", 313 | " - **Observe:** $H_{0,0}(z)$ contains the even coefficients of the low pass filter, and $H_{1,0}(z)$ its odd coefficients.\n", 314 | " - Accordingly for the high pass filter.\n", 315 | " - Given the analysis filters, the synthesis filters can be obtained by inverting the analysis polyphase matrix:\n", 316 | " \n", 317 | " $$\\large\n", 318 | " H^{-1}(z) = \\dfrac{1}{Det(H(z))}\n", 319 | " \\begin{bmatrix}\n", 320 | " H_{1,1}(z) & -H_{0,1}(z) \\\\\n", 321 | " -H_{1,0}(z) & H_{0,0}(z)\n", 322 | " \\end{bmatrix}\n", 323 | " $$\n", 324 | "
\n", 325 | " \n", 326 | " - **Observe:** If the analysis filters have a finite impulse response (FIR), and the synthesis is desired to also be FIR, the **determinant** of the polyphase matrix needs to be a **constant or a delay**!\n", 327 | " \n", 328 | " $$\\large\n", 329 | " det(H(z)) = H_{1,1}(z)H_{0,0}(z)-H_{0,1}(z)H_{1,0}(z) \\\\ = \\text{const or delay}$$\n", 330 | "
\n", 331 | " - **Observe:** This is the output of the lower band of the filter bank if the input signal is:\n", 332 | " \n", 333 | " $$\\large\n", 334 | " x(z) = \\left \\lfloor H_{1,1}(z), -H_{0,1} \\right \\rfloor $$\n", 335 | " \n", 336 | " - Hence the determinant can be formulated as a **convolution**.\n", 337 | " - This input is the high band filter coefficients, with the sign of the even coefficients flipped and switched places with the odd coefficients.\n", 338 | " - Since this represents a critically sampled filter bank, the result represents **every second sample** of the convolution of the low band filter with the correspondingly modified high band filter.\n", 339 | " - This modified high band filter is a low band filter (every second sample sign flipped).\n", 340 | " - The desired output of this downsampled convolution is a single pulse (corresponding to a constant or a delay), hence flat in frequency.\n", 341 | " - Another interpretation: correlation of the 2 signals, where the even lags that appear after downsampling are zero, except for the one pulse." 342 | ] 343 | }, 344 | { 345 | "cell_type": "markdown", 346 | "metadata": { 347 | "hide_input": false, 348 | "slideshow": { 349 | "slide_type": "slide" 350 | } 351 | }, 352 | "source": [ 353 | "## QMF (Quadrature Mirror Filter)" 354 | ] 355 | }, 356 | { 357 | "cell_type": "markdown", 358 | "metadata": { 359 | "slideshow": { 360 | "slide_type": "-" 361 | } 362 | }, 363 | "source": [ 364 | " - This suggests a simple design strategy:\n", 365 | " - Design a low pass filter for analysis and synthesis.\n", 366 | " - Obtain the high pass filters by flipping the low pass filters every second coefficient.\n", 367 | " \n", 368 | "$$\\begin{array}\n", 369 | "\\text{analysis FB:} & h_1(n)=(-1)^nh_0(n) & n=0,1,...,N-1 \\\\\n", 370 | "\\text{synth. low pass:} & g_0(n)=h_0(n) & \\\\\n", 371 | "\\text{synth. FB high pass:} & g_1(n)=-h_1(n) & \n", 372 | "\\end{array}$$\n", 373 | "\n", 374 | " - This is an early two band filter bank: QMF, Quadrature Mirror Filter (Croisier, Esteban, Galand, 1976)\n", 375 | " - For more than 2 bands: GQMF (Cox, 1986), PQMF\n", 376 | " \n", 377 | " - Sign flipping to obtain the high band filter leads to the polyphase components:\n", 378 | "
\n", 379 | "$$\\large\n", 380 | "H_{0,1}(z) = H_{0,0}(z) \\\\\n", 381 | "\\large\n", 382 | "H_{1,1}(z) = -H_{1,0}(z)\n", 383 | "$$
\n", 384 | "\n", 385 | " - The resulting determinant is:\n", 386 | "\n", 387 | "$$\\large\n", 388 | "det(H(z))=H_{1,1}(z)H_{0,0}(z)-H_{0,1}(z)H_{1,0}(z) \\\\\n", 389 | "\\large\n", 390 | "=-2H_{0,1}(z)H_{0,0}(z)$$\n", 391 | "\n", 392 | " - **Observe:** This cannot be made a constant or delay for finite polynomials of order 1 or greater, hence no PR for finite length filters!\n", 393 | " - The QMF accounts for the sign flipping in the determinant equation.\n", 394 | " - But not for the trading places of even and odd coefficients.\n", 395 | " - Hence: **No Perfect Reconstruction** (only for simple Haar and IIR filters)\n", 396 | " - High stopband attenuation needed to keep reconstruction error small.\n", 397 | " - Numerical optimization to obtain:\n", 398 | " \n", 399 | " $$\\large\n", 400 | " \\left |H_0\\left(e^{j\\omega}\\right)\\right |^2 + \\left |H_1\\left(e^{j\\omega}\\right)\\right |^2 \\approx 1$$\n", 401 | "
\n", 402 | "
\n", 403 | " \n", 404 | "
\n", 405 | " \n", 406 | "
\n", 407 | " \n", 408 | "
\n", 409 | "\n", 410 | " - QMF: Example with Impulse Response of Length 96\n", 411 | "
\n", 412 | " \n", 413 | "
\n", 414 | " \n", 415 | "
" 416 | ] 417 | }, 418 | { 419 | "cell_type": "markdown", 420 | "metadata": { 421 | "hide_input": false, 422 | "slideshow": { 423 | "slide_type": "slide" 424 | } 425 | }, 426 | "source": [ 427 | "### CQMF: Conjugate QMF" 428 | ] 429 | }, 430 | { 431 | "cell_type": "code", 432 | "execution_count": 19, 433 | "metadata": { 434 | "hide_input": true 435 | }, 436 | "outputs": [ 437 | { 438 | "data": { 439 | "text/html": [ 440 | "\n" 441 | ], 442 | "text/plain": [ 443 | "" 444 | ] 445 | }, 446 | "metadata": {}, 447 | "output_type": "display_data" 448 | } 449 | ], 450 | "source": [ 451 | "%%html\n", 452 | "" 453 | ] 454 | }, 455 | { 456 | "cell_type": "markdown", 457 | "metadata": { 458 | "hide_input": false, 459 | "slideshow": { 460 | "slide_type": "-" 461 | } 462 | }, 463 | "source": [ 464 | " - To also accommodate for the trading places of odd and even coefficients, a natural choice is to also reverse the temporal order of the synthesis filter.\n", 465 | " \n", 466 | " $$\\large\n", 467 | " h_1(n) = -n_0(L-1-n)(-1)^n$$\n", 468 | "
\n", 469 | " - With L: filter length, and $g_0(n) = h_0(n) \\quad g_1(n) = - h_1(n)$\n", 470 | " - Introduced e.g. by Smith, Barnwell, 1984\n", 471 | "
\n", 472 | " \n", 473 | " \n", 474 | " - For the polyphase components this means:\n", 475 | " \n", 476 | " $$\\large\n", 477 | " \\begin{array}{ccc}\n", 478 | " H_{0,1} & = & -z^{\\frac{L}{2}}H_{0,0}(z^{-1}) \\\\\n", 479 | " H_{1,1} & = & z^{\\frac{L}{2}}H_{1,0}(z^{-1}) \n", 480 | " \\end{array}$$\n", 481 | " \n", 482 | " - And the input for our determinant calculation is:\n", 483 | " \n", 484 | " $$\\large\n", 485 | " x(z) = z^{-\\frac{L}{2}} \\left \\lfloor H_{1,0}(z^{-1}), H_{0,0}(z^{-1}) \\right \\rfloor$$\n", 486 | "
\n", 487 | " - This corresponds exactly to the time reversed low band filter!\n", 488 | " \n", 489 | " - Let's define:\n", 490 | " \n", 491 | " $$\\large\n", 492 | " A(z) = H_{1,0}(z^{-1})H_{0,0}(z) $$\n", 493 | " \n", 494 | " - The determinant is now:\n", 495 | " \n", 496 | " $$\\large\n", 497 | " det(H(z)) = H_{1,1}(z)H_{0,0}(z)-H_{0,1}(z)H_{1,0}(z) \\\\\n", 498 | " \\large\n", 499 | " = z^{-\\frac{L}{2}} (A(z)+A(z^{-1}))$$
\n", 500 | " - **Observe:** This can be a constant if all even coefficients of A(z) are zero, except for the center coefficient!\n", 501 | " - **Remember:** the determinant was the output of the low band with this input.\n", 502 | " - Hence: Every second sample of the convolution of the low band filter with its time reversed version.\n", 503 | " - This is equal to **every second value** of the **autocorrelation** function of the l**ow band filter**!\n", 504 | " - Determinant is a constant or a delay: only one sample of this downsampled autocorrelation function (all even coefficients) can be unequal zero (most even coefficients are zero).\n", 505 | " - The Determinant is a constant means:\n", 506 | " - The 0th autocorrelation coefficient is a constant (unequal 0), and all other even coefficients must be zero.\n", 507 | " - Called Nyquist filter property.\n", 508 | " \n", 509 | " \n", 510 | " - In other terms: Define P(z) as the z-transform of this autocorrelation function, the **Power Spectrum**:\n", 511 | " \n", 512 | " $$\\large\n", 513 | " P(z) := H_0(z) \\cdot H_0(z^{-1})$$\n", 514 | " \n", 515 | " - Then all nonzero coefficients of P(z) are the 0th coefficient and the odd coefficients.\n", 516 | " - As a result:\n", 517 | " \n", 518 | " $$\\large\n", 519 | " P(z) + P(-z) = const$$\n", 520 | " \n", 521 | " - The odd coefficients cancel.\n", 522 | " - Frequency reversal $\\rightarrow$ (P(-z))\n", 523 | " - This is also called the halfband filter property.\n", 524 | " \n", 525 | " \n", 526 | " - Design approach: Design P(z) accordingly, then H(z)" 527 | ] 528 | }, 529 | { 530 | "cell_type": "markdown", 531 | "metadata": { 532 | "slideshow": { 533 | "slide_type": "slide" 534 | } 535 | }, 536 | "source": [ 537 | "## Pseudo-QMF (PQMF)" 538 | ] 539 | }, 540 | { 541 | "cell_type": "code", 542 | "execution_count": 1, 543 | "metadata": { 544 | "hide_input": true 545 | }, 546 | "outputs": [ 547 | { 548 | "data": { 549 | "text/html": [ 550 | "\n" 551 | ], 552 | "text/plain": [ 553 | "" 554 | ] 555 | }, 556 | "metadata": {}, 557 | "output_type": "display_data" 558 | } 559 | ], 560 | "source": [ 561 | "%%html\n", 562 | "" 563 | ] 564 | }, 565 | { 566 | "cell_type": "markdown", 567 | "metadata": { 568 | "scrolled": true, 569 | "slideshow": { 570 | "slide_type": "-" 571 | } 572 | }, 573 | "source": [ 574 | " - So far we only had 2 subband QMF filter banks.\n", 575 | " - Only for the 2-band case we get perfect reconstruction (in the CQMF case).\n", 576 | " - The PQMF extents the QMF approach to N>2 subbands.\n", 577 | " - But it has only \"Near Perfect Reconstruction\", meaning a reconstruction error by the filter bank.\n", 578 | " - It is modulated filter band (like the MDCT), using a baseband prototype filter h(n) (a lowpass).\n", 579 | " - Its analysis filters are given by the impulse responses (L being the length of the impulse response):\n", 580 | " \n", 581 | " $$\\large\n", 582 | " H_k(n) = h(n) \\cos \\left( \\dfrac{\\pi}{N} \\cdot (k+0.5)(n+0.5-\\dfrac{L}{2}+(-1)^k\\dfrac{\\pi}{4} \\right)$$\n", 583 | " \n", 584 | " - It is an (almost) **orthogonal filter bank**, which means that the synthesis filter impulse responses are simply the time inverses of the analysis impulse responses:\n", 585 | " \n", 586 | " $$\\large\n", 587 | " g_k(n)=h_k(n)(L-1-n)$$\n", 588 | " \n", 589 | " - Its baseband prototype filters h(n) are now designed such that aliasing cancels between adjacent neighbouring bands:\n", 590 | " \n", 591 | " $$\\large\n", 592 | " \\left| H(e^{j\\Omega}) \\right|^2 + \\left| H \\left(e^{j\\left(\\frac{\\pi}{N}-\\Omega\\right)}\\right) \\right|^2 = 1 \\\\\n", 593 | " \\large\n", 594 | " \\text{for } 0 < |\\Omega| < \\frac{\\pi}{2N}\n", 595 | " $$\n", 596 | " \n", 597 | " - Beyond the adjacent bands, the attenuation should go towards infinity:\n", 598 | " \n", 599 | " $$\\large\n", 600 | " \\left| H(e^{j\\Omega}) \\right|^2 = 0, \\text{for } |\\Omega| > \\frac{\\pi}{N}$$\n", 601 | " \n", 602 | " \n", 603 | " - This leads to **\"Near Perfect Reconstruction\"** (there is a **reconstruction error**).\n", 604 | " - The PQMF filter bank is used in MPEG1/2 Layer I,II and III. There it has N=32 subbands and filter length L=512.\n", 605 | " - Also used in MPEG 4 for so-called SBR (Spectral Band Replication) and for parametric sourround coding. There it has N=32 or N=64 subbands, and filter length L=320 or L=640." 606 | ] 607 | }, 608 | { 609 | "cell_type": "markdown", 610 | "metadata": { 611 | "scrolled": false, 612 | "slideshow": { 613 | "slide_type": "subslide" 614 | } 615 | }, 616 | "source": [ 617 | "### PQMF used in MPEG4" 618 | ] 619 | }, 620 | { 621 | "cell_type": "markdown", 622 | "metadata": { 623 | "slideshow": { 624 | "slide_type": "-" 625 | } 626 | }, 627 | "source": [ 628 | " - Impulse response of the baseband prototype (the window), with N=64 and L=640\n", 629 | " \n", 630 | "
\n", 631 | "
\n", 632 | " \n", 633 | "
\n", 634 | "
\n", 635 | "\n", 636 | " - Frequency response of the baseband prototype (the window)\n", 637 | " \n", 638 | "
\n", 639 | "
\n", 640 | " \n", 641 | "
\n", 642 | "
" 643 | ] 644 | } 645 | ], 646 | "metadata": { 647 | "kernelspec": { 648 | "display_name": "Python 3", 649 | "language": "python", 650 | "name": "python3" 651 | }, 652 | "language_info": { 653 | "codemirror_mode": { 654 | "name": "ipython", 655 | "version": 3 656 | }, 657 | "file_extension": ".py", 658 | "mimetype": "text/x-python", 659 | "name": "python", 660 | "nbconvert_exporter": "python", 661 | "pygments_lexer": "ipython3", 662 | "version": "3.7.8" 663 | }, 664 | "livereveal": { 665 | "rise": { 666 | "height": "90%", 667 | "width": "90%" 668 | }, 669 | "scroll": true, 670 | "theme": "beige", 671 | "transition": "zoom" 672 | }, 673 | "widgets": { 674 | "application/vnd.jupyter.widget-state+json": { 675 | "state": { 676 | "0b0c58e6c93a41799e09f406dbdefde6": { 677 | "model_module": "@jupyter-widgets/base", 678 | "model_module_version": "1.2.0", 679 | "model_name": "LayoutModel", 680 | "state": {} 681 | }, 682 | "0b3040b1b58e4b53a4509d1a39fd031d": { 683 | "model_module": "@jupyter-widgets/base", 684 | "model_module_version": "1.2.0", 685 | "model_name": "LayoutModel", 686 | "state": {} 687 | }, 688 | "0be2682832bd4bc8b51cb737e46ca28c": { 689 | "model_module": "@jupyter-widgets/base", 690 | "model_module_version": "1.2.0", 691 | "model_name": "LayoutModel", 692 | "state": {} 693 | }, 694 | "0e39b9742c5341378d14cd0ce7c6d7b2": { 695 | "model_module": "@jupyter-widgets/controls", 696 | "model_module_version": "1.5.0", 697 | "model_name": "HBoxModel", 698 | "state": { 699 | "children": [ 700 | "IPY_MODEL_2d9b7d0f8fe4439bb967b502ccdf02f7", 701 | "IPY_MODEL_7042e1d3ab44462087773c8182c56c15" 702 | ], 703 | "layout": "IPY_MODEL_0be2682832bd4bc8b51cb737e46ca28c" 704 | } 705 | }, 706 | "0f12a068f35a41949e7af2ab301fb1a9": { 707 | "model_module": "@jupyter-widgets/controls", 708 | "model_module_version": "1.5.0", 709 | "model_name": "DescriptionStyleModel", 710 | "state": { 711 | "description_width": "" 712 | } 713 | }, 714 | "15ad70cfa0aa41638667c356ae56295f": { 715 | "model_module": "@jupyter-widgets/base", 716 | "model_module_version": "1.2.0", 717 | "model_name": "LayoutModel", 718 | "state": {} 719 | }, 720 | "16c7c2a79a4a4203be047ae7aeee19fa": { 721 | "model_module": "@jupyter-widgets/controls", 722 | "model_module_version": "1.5.0", 723 | "model_name": "ToggleButtonModel", 724 | "state": { 725 | "description": "Stop", 726 | "layout": "IPY_MODEL_15ad70cfa0aa41638667c356ae56295f", 727 | "style": "IPY_MODEL_0f12a068f35a41949e7af2ab301fb1a9" 728 | } 729 | }, 730 | "1d15c09691004b7080cdbe29a28d73ff": { 731 | "model_module": "@jupyter-widgets/controls", 732 | "model_module_version": "1.5.0", 733 | "model_name": "HBoxModel", 734 | "state": { 735 | "children": [ 736 | "IPY_MODEL_e2f6054e0fe24c10ac5c95a2b687f1ca", 737 | "IPY_MODEL_2cf22153219242b180ccb47bc4b8f968" 738 | ], 739 | "layout": "IPY_MODEL_b40a35cef38e4048b6a2d8149ff7e069" 740 | } 741 | }, 742 | "207bd58d7ad144f58b70b598ae30db8e": { 743 | "model_module": "@jupyter-widgets/base", 744 | "model_module_version": "1.2.0", 745 | "model_name": "LayoutModel", 746 | "state": {} 747 | }, 748 | "20f35183b9e74a438f97507b3d10929a": { 749 | "model_module": "@jupyter-widgets/controls", 750 | "model_module_version": "1.5.0", 751 | "model_name": "ButtonStyleModel", 752 | "state": {} 753 | }, 754 | "23ef77f7f8a84176907ef6949905623b": { 755 | "model_module": "@jupyter-widgets/controls", 756 | "model_module_version": "1.5.0", 757 | "model_name": "HBoxModel", 758 | "state": { 759 | "children": [ 760 | "IPY_MODEL_f61da7386157426ca81a202ffe23e162", 761 | "IPY_MODEL_77a43b098d01405690eb7f9256544cc1" 762 | ], 763 | "layout": "IPY_MODEL_3c3e2637ae684b7e95aca1d49d23f40b" 764 | } 765 | }, 766 | "2cf22153219242b180ccb47bc4b8f968": { 767 | "model_module": "@jupyter-widgets/controls", 768 | "model_module_version": "1.5.0", 769 | "model_name": "ToggleButtonModel", 770 | "state": { 771 | "description": "Stop", 772 | "layout": "IPY_MODEL_207bd58d7ad144f58b70b598ae30db8e", 773 | "style": "IPY_MODEL_bd80f1c63a2b4a25900e5e5763317b7a" 774 | } 775 | }, 776 | "2d9b7d0f8fe4439bb967b502ccdf02f7": { 777 | "model_module": "@jupyter-widgets/controls", 778 | "model_module_version": "1.5.0", 779 | "model_name": "ButtonModel", 780 | "state": { 781 | "description": "Start", 782 | "disabled": true, 783 | "layout": "IPY_MODEL_77522a5639144548b35db6c4d7dd4fb1", 784 | "style": "IPY_MODEL_7d63afec39bb49df9edf2873be48ac04" 785 | } 786 | }, 787 | "3276b4539f7144b6a21869875e9c4914": { 788 | "model_module": "@jupyter-widgets/base", 789 | "model_module_version": "1.2.0", 790 | "model_name": "LayoutModel", 791 | "state": {} 792 | }, 793 | "354ba59a5468408b962c72423d4e1c65": { 794 | "model_module": "@jupyter-widgets/base", 795 | "model_module_version": "1.2.0", 796 | "model_name": "LayoutModel", 797 | "state": {} 798 | }, 799 | "3c3e2637ae684b7e95aca1d49d23f40b": { 800 | "model_module": "@jupyter-widgets/base", 801 | "model_module_version": "1.2.0", 802 | "model_name": "LayoutModel", 803 | "state": {} 804 | }, 805 | "4131c38460e44eaf962c7017e2536232": { 806 | "model_module": "@jupyter-widgets/controls", 807 | "model_module_version": "1.5.0", 808 | "model_name": "HBoxModel", 809 | "state": { 810 | "children": [ 811 | "IPY_MODEL_d58265f7549a4e979a3c65b9bd5d76a5", 812 | "IPY_MODEL_c5267597c945478f959c375f44a4d1a7" 813 | ], 814 | "layout": "IPY_MODEL_4b10bbeb1b794eb697268d9a1bd106ba" 815 | } 816 | }, 817 | "435a7872da0d4c41be05e35d3d9570aa": { 818 | "model_module": "@jupyter-widgets/controls", 819 | "model_module_version": "1.5.0", 820 | "model_name": "DescriptionStyleModel", 821 | "state": { 822 | "description_width": "" 823 | } 824 | }, 825 | "4488c6e4c7834e098e81b481cb1003a4": { 826 | "model_module": "@jupyter-widgets/controls", 827 | "model_module_version": "1.5.0", 828 | "model_name": "CheckboxModel", 829 | "state": { 830 | "description": "LP Filters", 831 | "disabled": false, 832 | "layout": "IPY_MODEL_a6c7fc4e429c464e8fca3294d830542a", 833 | "style": "IPY_MODEL_7fc76b30f0904d1ab285f634f82d7054", 834 | "value": false 835 | } 836 | }, 837 | "470de88b8310448d864c97fad609f7de": { 838 | "model_module": "@jupyter-widgets/controls", 839 | "model_module_version": "1.5.0", 840 | "model_name": "ButtonStyleModel", 841 | "state": {} 842 | }, 843 | "4b10bbeb1b794eb697268d9a1bd106ba": { 844 | "model_module": "@jupyter-widgets/base", 845 | "model_module_version": "1.2.0", 846 | "model_name": "LayoutModel", 847 | "state": {} 848 | }, 849 | "5795130576114428a9f5f86ee4aa8c80": { 850 | "model_module": "@jupyter-widgets/controls", 851 | "model_module_version": "1.5.0", 852 | "model_name": "DescriptionStyleModel", 853 | "state": { 854 | "description_width": "" 855 | } 856 | }, 857 | "589c1be4bde643c899cf54d67ebfb42f": { 858 | "model_module": "@jupyter-widgets/controls", 859 | "model_module_version": "1.5.0", 860 | "model_name": "HBoxModel", 861 | "state": { 862 | "children": [ 863 | "IPY_MODEL_e8e1025d1bb44a08a500c0d3b8718796", 864 | "IPY_MODEL_fb8ae2a4374c451eb7d78b16edcca16a" 865 | ], 866 | "layout": "IPY_MODEL_354ba59a5468408b962c72423d4e1c65" 867 | } 868 | }, 869 | "5e41a5a9f29443f49a84cb3b28cfd887": { 870 | "model_module": "@jupyter-widgets/base", 871 | "model_module_version": "1.2.0", 872 | "model_name": "LayoutModel", 873 | "state": {} 874 | }, 875 | "5e7f58b91bbf4d1d839bbf49450afd8f": { 876 | "model_module": "@jupyter-widgets/controls", 877 | "model_module_version": "1.5.0", 878 | "model_name": "HBoxModel", 879 | "state": { 880 | "children": [ 881 | "IPY_MODEL_ac4c2b3e307640bdb74f11ec3cf0dafd", 882 | "IPY_MODEL_e3db17127dba4e609008d860b5cf05c5" 883 | ], 884 | "layout": "IPY_MODEL_5e41a5a9f29443f49a84cb3b28cfd887" 885 | } 886 | }, 887 | "5ec351197a1c442a8fa816d034b1eef6": { 888 | "model_module": "@jupyter-widgets/base", 889 | "model_module_version": "1.2.0", 890 | "model_name": "LayoutModel", 891 | "state": {} 892 | }, 893 | "6341affae71049aba97ec2ad0ff9583d": { 894 | "model_module": "@jupyter-widgets/base", 895 | "model_module_version": "1.2.0", 896 | "model_name": "LayoutModel", 897 | "state": {} 898 | }, 899 | "6c0e7d0a22a144458689ec0d86788548": { 900 | "model_module": "@jupyter-widgets/base", 901 | "model_module_version": "1.2.0", 902 | "model_name": "LayoutModel", 903 | "state": {} 904 | }, 905 | "6cb680fde00f4a6e8c0fb454c76857d3": { 906 | "model_module": "@jupyter-widgets/controls", 907 | "model_module_version": "1.5.0", 908 | "model_name": "ToggleButtonModel", 909 | "state": { 910 | "description": "Stop", 911 | "layout": "IPY_MODEL_de5153ef26c14561bb728c1e74b51aac", 912 | "style": "IPY_MODEL_aed5c18ec1e44b1cb9c1c8a1164530bc" 913 | } 914 | }, 915 | "6d9b43798e7642019c6888b869c409a7": { 916 | "model_module": "@jupyter-widgets/controls", 917 | "model_module_version": "1.5.0", 918 | "model_name": "ButtonStyleModel", 919 | "state": {} 920 | }, 921 | "7042e1d3ab44462087773c8182c56c15": { 922 | "model_module": "@jupyter-widgets/controls", 923 | "model_module_version": "1.5.0", 924 | "model_name": "ToggleButtonModel", 925 | "state": { 926 | "description": "Stop", 927 | "layout": "IPY_MODEL_d869cf27021149409370838cc26ee878", 928 | "style": "IPY_MODEL_b5d3845cf20e497ea0bddab2ce24c089" 929 | } 930 | }, 931 | "77480c26779c420390eabd1bbd64cbee": { 932 | "model_module": "@jupyter-widgets/controls", 933 | "model_module_version": "1.5.0", 934 | "model_name": "ButtonModel", 935 | "state": { 936 | "description": "Start", 937 | "layout": "IPY_MODEL_7b0edd69218248ec89c22a9b29960928", 938 | "style": "IPY_MODEL_470de88b8310448d864c97fad609f7de" 939 | } 940 | }, 941 | "77522a5639144548b35db6c4d7dd4fb1": { 942 | "model_module": "@jupyter-widgets/base", 943 | "model_module_version": "1.2.0", 944 | "model_name": "LayoutModel", 945 | "state": {} 946 | }, 947 | "77a43b098d01405690eb7f9256544cc1": { 948 | "model_module": "@jupyter-widgets/controls", 949 | "model_module_version": "1.5.0", 950 | "model_name": "ToggleButtonModel", 951 | "state": { 952 | "description": "Stop", 953 | "layout": "IPY_MODEL_5ec351197a1c442a8fa816d034b1eef6", 954 | "style": "IPY_MODEL_f9ed9f912ac848a1a61cccea6d4c20c3", 955 | "value": true 956 | } 957 | }, 958 | "7b0edd69218248ec89c22a9b29960928": { 959 | "model_module": "@jupyter-widgets/base", 960 | "model_module_version": "1.2.0", 961 | "model_name": "LayoutModel", 962 | "state": {} 963 | }, 964 | "7d63afec39bb49df9edf2873be48ac04": { 965 | "model_module": "@jupyter-widgets/controls", 966 | "model_module_version": "1.5.0", 967 | "model_name": "ButtonStyleModel", 968 | "state": {} 969 | }, 970 | "7e5dc995c0d54dc88ffba21751e34fd0": { 971 | "model_module": "@jupyter-widgets/controls", 972 | "model_module_version": "1.5.0", 973 | "model_name": "ButtonStyleModel", 974 | "state": {} 975 | }, 976 | "7fc76b30f0904d1ab285f634f82d7054": { 977 | "model_module": "@jupyter-widgets/controls", 978 | "model_module_version": "1.5.0", 979 | "model_name": "DescriptionStyleModel", 980 | "state": { 981 | "description_width": "" 982 | } 983 | }, 984 | "86fd6e4196864369a5e361e09e227412": { 985 | "model_module": "@jupyter-widgets/controls", 986 | "model_module_version": "1.5.0", 987 | "model_name": "ButtonStyleModel", 988 | "state": {} 989 | }, 990 | "892de2da73f84062be6382bed68d98e9": { 991 | "model_module": "@jupyter-widgets/controls", 992 | "model_module_version": "1.5.0", 993 | "model_name": "HBoxModel", 994 | "state": { 995 | "children": [ 996 | "IPY_MODEL_77480c26779c420390eabd1bbd64cbee", 997 | "IPY_MODEL_16c7c2a79a4a4203be047ae7aeee19fa" 998 | ], 999 | "layout": "IPY_MODEL_c65da4d48410402ca720e41ea2b1a532" 1000 | } 1001 | }, 1002 | "a6c7fc4e429c464e8fca3294d830542a": { 1003 | "model_module": "@jupyter-widgets/base", 1004 | "model_module_version": "1.2.0", 1005 | "model_name": "LayoutModel", 1006 | "state": {} 1007 | }, 1008 | "a9d684453fac4de8a1da6b5678a9263d": { 1009 | "model_module": "@jupyter-widgets/controls", 1010 | "model_module_version": "1.5.0", 1011 | "model_name": "HBoxModel", 1012 | "state": { 1013 | "children": [ 1014 | "IPY_MODEL_adf8151b53c0458db8a2931959f9851c", 1015 | "IPY_MODEL_6cb680fde00f4a6e8c0fb454c76857d3" 1016 | ], 1017 | "layout": "IPY_MODEL_6c0e7d0a22a144458689ec0d86788548" 1018 | } 1019 | }, 1020 | "aba427d2152e4e5b95f68cd5fa6b869a": { 1021 | "model_module": "@jupyter-widgets/base", 1022 | "model_module_version": "1.2.0", 1023 | "model_name": "LayoutModel", 1024 | "state": {} 1025 | }, 1026 | "ac4c2b3e307640bdb74f11ec3cf0dafd": { 1027 | "model_module": "@jupyter-widgets/controls", 1028 | "model_module_version": "1.5.0", 1029 | "model_name": "CheckboxModel", 1030 | "state": { 1031 | "description": "Downsampling/Upsampling", 1032 | "disabled": false, 1033 | "layout": "IPY_MODEL_ccebf79f7b6b4954afc304a9a913fe0b", 1034 | "style": "IPY_MODEL_5795130576114428a9f5f86ee4aa8c80", 1035 | "value": false 1036 | } 1037 | }, 1038 | "adf8151b53c0458db8a2931959f9851c": { 1039 | "model_module": "@jupyter-widgets/controls", 1040 | "model_module_version": "1.5.0", 1041 | "model_name": "ButtonModel", 1042 | "state": { 1043 | "description": "Start", 1044 | "layout": "IPY_MODEL_c8e686b7f1fd41fb950f6c64c28d1e38", 1045 | "style": "IPY_MODEL_20f35183b9e74a438f97507b3d10929a" 1046 | } 1047 | }, 1048 | "aed5c18ec1e44b1cb9c1c8a1164530bc": { 1049 | "model_module": "@jupyter-widgets/controls", 1050 | "model_module_version": "1.5.0", 1051 | "model_name": "DescriptionStyleModel", 1052 | "state": { 1053 | "description_width": "" 1054 | } 1055 | }, 1056 | "b40a35cef38e4048b6a2d8149ff7e069": { 1057 | "model_module": "@jupyter-widgets/base", 1058 | "model_module_version": "1.2.0", 1059 | "model_name": "LayoutModel", 1060 | "state": {} 1061 | }, 1062 | "b5d3845cf20e497ea0bddab2ce24c089": { 1063 | "model_module": "@jupyter-widgets/controls", 1064 | "model_module_version": "1.5.0", 1065 | "model_name": "DescriptionStyleModel", 1066 | "state": { 1067 | "description_width": "" 1068 | } 1069 | }, 1070 | "b71122422f634440ba716e8c5537e52d": { 1071 | "model_module": "@jupyter-widgets/controls", 1072 | "model_module_version": "1.5.0", 1073 | "model_name": "CheckboxModel", 1074 | "state": { 1075 | "description": "Downsampling/Upsampling", 1076 | "disabled": false, 1077 | "layout": "IPY_MODEL_c9f9cd5507994921a16488b925690ec8", 1078 | "style": "IPY_MODEL_e3d4389b65684b879575d18283ac20f2", 1079 | "value": false 1080 | } 1081 | }, 1082 | "bd80f1c63a2b4a25900e5e5763317b7a": { 1083 | "model_module": "@jupyter-widgets/controls", 1084 | "model_module_version": "1.5.0", 1085 | "model_name": "DescriptionStyleModel", 1086 | "state": { 1087 | "description_width": "" 1088 | } 1089 | }, 1090 | "c1d5efb6eefa4af38df3245d97590b3a": { 1091 | "model_module": "@jupyter-widgets/controls", 1092 | "model_module_version": "1.5.0", 1093 | "model_name": "DescriptionStyleModel", 1094 | "state": { 1095 | "description_width": "" 1096 | } 1097 | }, 1098 | "c5267597c945478f959c375f44a4d1a7": { 1099 | "model_module": "@jupyter-widgets/controls", 1100 | "model_module_version": "1.5.0", 1101 | "model_name": "ToggleButtonModel", 1102 | "state": { 1103 | "description": "Stop", 1104 | "layout": "IPY_MODEL_6341affae71049aba97ec2ad0ff9583d", 1105 | "style": "IPY_MODEL_c1d5efb6eefa4af38df3245d97590b3a", 1106 | "value": true 1107 | } 1108 | }, 1109 | "c65da4d48410402ca720e41ea2b1a532": { 1110 | "model_module": "@jupyter-widgets/base", 1111 | "model_module_version": "1.2.0", 1112 | "model_name": "LayoutModel", 1113 | "state": {} 1114 | }, 1115 | "c8e686b7f1fd41fb950f6c64c28d1e38": { 1116 | "model_module": "@jupyter-widgets/base", 1117 | "model_module_version": "1.2.0", 1118 | "model_name": "LayoutModel", 1119 | "state": {} 1120 | }, 1121 | "c9f9cd5507994921a16488b925690ec8": { 1122 | "model_module": "@jupyter-widgets/base", 1123 | "model_module_version": "1.2.0", 1124 | "model_name": "LayoutModel", 1125 | "state": {} 1126 | }, 1127 | "ccebf79f7b6b4954afc304a9a913fe0b": { 1128 | "model_module": "@jupyter-widgets/base", 1129 | "model_module_version": "1.2.0", 1130 | "model_name": "LayoutModel", 1131 | "state": {} 1132 | }, 1133 | "d58265f7549a4e979a3c65b9bd5d76a5": { 1134 | "model_module": "@jupyter-widgets/controls", 1135 | "model_module_version": "1.5.0", 1136 | "model_name": "ButtonModel", 1137 | "state": { 1138 | "description": "Start", 1139 | "disabled": true, 1140 | "layout": "IPY_MODEL_0b0c58e6c93a41799e09f406dbdefde6", 1141 | "style": "IPY_MODEL_7e5dc995c0d54dc88ffba21751e34fd0" 1142 | } 1143 | }, 1144 | "d869cf27021149409370838cc26ee878": { 1145 | "model_module": "@jupyter-widgets/base", 1146 | "model_module_version": "1.2.0", 1147 | "model_name": "LayoutModel", 1148 | "state": {} 1149 | }, 1150 | "dc8d5864ac8d4bb38cee8d043d030237": { 1151 | "model_module": "@jupyter-widgets/base", 1152 | "model_module_version": "1.2.0", 1153 | "model_name": "LayoutModel", 1154 | "state": {} 1155 | }, 1156 | "de5153ef26c14561bb728c1e74b51aac": { 1157 | "model_module": "@jupyter-widgets/base", 1158 | "model_module_version": "1.2.0", 1159 | "model_name": "LayoutModel", 1160 | "state": {} 1161 | }, 1162 | "e2f6054e0fe24c10ac5c95a2b687f1ca": { 1163 | "model_module": "@jupyter-widgets/controls", 1164 | "model_module_version": "1.5.0", 1165 | "model_name": "ButtonModel", 1166 | "state": { 1167 | "description": "Start", 1168 | "layout": "IPY_MODEL_dc8d5864ac8d4bb38cee8d043d030237", 1169 | "style": "IPY_MODEL_6d9b43798e7642019c6888b869c409a7" 1170 | } 1171 | }, 1172 | "e35d3e4323234d9287de5cd69a13219c": { 1173 | "model_module": "@jupyter-widgets/controls", 1174 | "model_module_version": "1.5.0", 1175 | "model_name": "ButtonStyleModel", 1176 | "state": {} 1177 | }, 1178 | "e3d4389b65684b879575d18283ac20f2": { 1179 | "model_module": "@jupyter-widgets/controls", 1180 | "model_module_version": "1.5.0", 1181 | "model_name": "DescriptionStyleModel", 1182 | "state": { 1183 | "description_width": "" 1184 | } 1185 | }, 1186 | "e3db17127dba4e609008d860b5cf05c5": { 1187 | "model_module": "@jupyter-widgets/controls", 1188 | "model_module_version": "1.5.0", 1189 | "model_name": "CheckboxModel", 1190 | "state": { 1191 | "description": "LP Filters", 1192 | "disabled": false, 1193 | "layout": "IPY_MODEL_3276b4539f7144b6a21869875e9c4914", 1194 | "style": "IPY_MODEL_fbee3d37ce574d8da66ca40eea646dfc", 1195 | "value": false 1196 | } 1197 | }, 1198 | "e8e1025d1bb44a08a500c0d3b8718796": { 1199 | "model_module": "@jupyter-widgets/controls", 1200 | "model_module_version": "1.5.0", 1201 | "model_name": "ButtonModel", 1202 | "state": { 1203 | "description": "Start", 1204 | "layout": "IPY_MODEL_0b3040b1b58e4b53a4509d1a39fd031d", 1205 | "style": "IPY_MODEL_e35d3e4323234d9287de5cd69a13219c" 1206 | } 1207 | }, 1208 | "f3b755ac64314b4c901f9ecb32965fd6": { 1209 | "model_module": "@jupyter-widgets/base", 1210 | "model_module_version": "1.2.0", 1211 | "model_name": "LayoutModel", 1212 | "state": {} 1213 | }, 1214 | "f61da7386157426ca81a202ffe23e162": { 1215 | "model_module": "@jupyter-widgets/controls", 1216 | "model_module_version": "1.5.0", 1217 | "model_name": "ButtonModel", 1218 | "state": { 1219 | "description": "Start", 1220 | "disabled": true, 1221 | "layout": "IPY_MODEL_f3b755ac64314b4c901f9ecb32965fd6", 1222 | "style": "IPY_MODEL_86fd6e4196864369a5e361e09e227412" 1223 | } 1224 | }, 1225 | "f9ed9f912ac848a1a61cccea6d4c20c3": { 1226 | "model_module": "@jupyter-widgets/controls", 1227 | "model_module_version": "1.5.0", 1228 | "model_name": "DescriptionStyleModel", 1229 | "state": { 1230 | "description_width": "" 1231 | } 1232 | }, 1233 | "fb8ae2a4374c451eb7d78b16edcca16a": { 1234 | "model_module": "@jupyter-widgets/controls", 1235 | "model_module_version": "1.5.0", 1236 | "model_name": "ToggleButtonModel", 1237 | "state": { 1238 | "description": "Stop", 1239 | "layout": "IPY_MODEL_aba427d2152e4e5b95f68cd5fa6b869a", 1240 | "style": "IPY_MODEL_435a7872da0d4c41be05e35d3d9570aa" 1241 | } 1242 | }, 1243 | "fbee3d37ce574d8da66ca40eea646dfc": { 1244 | "model_module": "@jupyter-widgets/controls", 1245 | "model_module_version": "1.5.0", 1246 | "model_name": "DescriptionStyleModel", 1247 | "state": { 1248 | "description_width": "" 1249 | } 1250 | } 1251 | }, 1252 | "version_major": 2, 1253 | "version_minor": 0 1254 | } 1255 | } 1256 | }, 1257 | "nbformat": 4, 1258 | "nbformat_minor": 2 1259 | } 1260 | -------------------------------------------------------------------------------- /AC_04_psychoAcoustics.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "slideshow": { 7 | "slide_type": "slide" 8 | } 9 | }, 10 | "source": [ 11 | "
\n", 12 | " \n", 13 | "
\n", 14 | "\n", 15 | "### Prof. Dr. -Ing. Gerald Schuller
Jupyter Notebook: Renato Profeta \n", 16 | "\n", 17 | "[Applied Media Systems Group](https://www.tu-ilmenau.de/en/applied-media-systems-group/)
\n", 18 | "[Technische Universität Ilmenau](https://www.tu-ilmenau.de/)" 19 | ] 20 | }, 21 | { 22 | "cell_type": "markdown", 23 | "metadata": { 24 | "slideshow": { 25 | "slide_type": "-" 26 | } 27 | }, 28 | "source": [ 29 | "# Psychoacoustics" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": 5, 35 | "metadata": { 36 | "hide_input": true 37 | }, 38 | "outputs": [ 39 | { 40 | "data": { 41 | "text/html": [ 42 | "\n" 43 | ], 44 | "text/plain": [ 45 | "" 46 | ] 47 | }, 48 | "metadata": {}, 49 | "output_type": "display_data" 50 | } 51 | ], 52 | "source": [ 53 | "%%html\n", 54 | "" 55 | ] 56 | }, 57 | { 58 | "cell_type": "markdown", 59 | "metadata": { 60 | "slideshow": { 61 | "slide_type": "slide" 62 | } 63 | }, 64 | "source": [ 65 | "## Block Diagram of a Perceptual Audio Encoder" 66 | ] 67 | }, 68 | { 69 | "cell_type": "markdown", 70 | "metadata": { 71 | "hide_input": false, 72 | "slideshow": { 73 | "slide_type": "-" 74 | } 75 | }, 76 | "source": [ 77 | "
\n", 78 | " \n", 79 | "
" 80 | ] 81 | }, 82 | { 83 | "cell_type": "markdown", 84 | "metadata": { 85 | "hide_input": false, 86 | "scrolled": true, 87 | "slideshow": { 88 | "slide_type": "slide" 89 | } 90 | }, 91 | "source": [ 92 | "## Structure of the Human Ear" 93 | ] 94 | }, 95 | { 96 | "cell_type": "code", 97 | "execution_count": 7, 98 | "metadata": { 99 | "hide_input": true 100 | }, 101 | "outputs": [ 102 | { 103 | "data": { 104 | "text/html": [ 105 | "\n" 106 | ], 107 | "text/plain": [ 108 | "" 109 | ] 110 | }, 111 | "metadata": {}, 112 | "output_type": "display_data" 113 | } 114 | ], 115 | "source": [ 116 | "%%html\n", 117 | "" 118 | ] 119 | }, 120 | { 121 | "cell_type": "markdown", 122 | "metadata": { 123 | "hide_input": false, 124 | "slideshow": { 125 | "slide_type": "-" 126 | } 127 | }, 128 | "source": [ 129 | "
\n", 130 | " \n", 131 | " Quelle: Ars Auditus; http://www.dasp.uni-wuppertal.de/index.php?id=57, 2010\n", 132 | "
\n", 133 | "\n", 134 | " - eardrum – transforms sound wave into vibrations\n", 135 | " - ossicular bones - transfer the mechanical vibrations to the cochlea\n", 136 | " - cochlear structure - induces traveling waves along the length of the basilar membrane\n", 137 | " - neural receptors - connected along the length of the basilar membrane\n", 138 | " - convert these traveling into chemical and electrical signals" 139 | ] 140 | }, 141 | { 142 | "cell_type": "markdown", 143 | "metadata": { 144 | "slideshow": { 145 | "slide_type": "subslide" 146 | } 147 | }, 148 | "source": [ 149 | "### Cochlea" 150 | ] 151 | }, 152 | { 153 | "cell_type": "markdown", 154 | "metadata": { 155 | "slideshow": { 156 | "slide_type": "-" 157 | } 158 | }, 159 | "source": [ 160 | "
\n", 161 | " \n", 162 | "
\n", 163 | "\n", 164 | " - cochlea of a 5 month old fetus:\n", 165 | " - spiral-shaped, fluid-filled structure\n", 166 | " - contains the coiled basilar membrane\n", 167 | " - blue arrow $\\rightarrow$ oval window\n", 168 | " - yellos arrow $\\rightarrow$ round window\n", 169 | " \n", 170 | "
\n", 171 | " \n", 172 | "
" 173 | ] 174 | }, 175 | { 176 | "cell_type": "markdown", 177 | "metadata": { 178 | "slideshow": { 179 | "slide_type": "subslide" 180 | } 181 | }, 182 | "source": [ 183 | "### Organ of Corti" 184 | ] 185 | }, 186 | { 187 | "cell_type": "markdown", 188 | "metadata": { 189 | "slideshow": { 190 | "slide_type": "-" 191 | } 192 | }, 193 | "source": [ 194 | "
\n", 195 | " \n", 196 | "
\n", 197 | "\n", 198 | " - organ of corti of a guinea pig\n", 199 | " - white bar = 20 μm\n", 200 | " \n", 201 | " - $\\approx$ 3500 IHC and $\\approx$ 12000 OHC at humans.\n", 202 | " - hair cells convert fluid motion into electrical impulses in auditory nerve." 203 | ] 204 | }, 205 | { 206 | "cell_type": "code", 207 | "execution_count": 3, 208 | "metadata": { 209 | "hide_input": true, 210 | "slideshow": { 211 | "slide_type": "-" 212 | } 213 | }, 214 | "outputs": [ 215 | { 216 | "name": "stdout", 217 | "output_type": "stream", 218 | "text": [ 219 | "https://acoustics.org/pressroom/httpdocs/146th/mountain.htm\n" 220 | ] 221 | }, 222 | { 223 | "data": { 224 | "text/html": [ 225 | "\n", 226 | " \n", 233 | " " 234 | ], 235 | "text/plain": [ 236 | "" 237 | ] 238 | }, 239 | "execution_count": 3, 240 | "metadata": {}, 241 | "output_type": "execute_result" 242 | } 243 | ], 244 | "source": [ 245 | "from IPython.display import IFrame\n", 246 | "print('https://acoustics.org/pressroom/httpdocs/146th/mountain.htm')\n", 247 | "IFrame('https://acoustics.org/pressroom/httpdocs/146th/mountain.htm', width=900, height=600)\n" 248 | ] 249 | }, 250 | { 251 | "cell_type": "code", 252 | "execution_count": 4, 253 | "metadata": { 254 | "hide_input": true, 255 | "slideshow": { 256 | "slide_type": "-" 257 | } 258 | }, 259 | "outputs": [ 260 | { 261 | "name": "stdout", 262 | "output_type": "stream", 263 | "text": [ 264 | "http://147.162.36.50/cochlea/cochleapages/overview/history.htm\n" 265 | ] 266 | }, 267 | { 268 | "data": { 269 | "text/html": [ 270 | "\n", 271 | " \n", 278 | " " 279 | ], 280 | "text/plain": [ 281 | "" 282 | ] 283 | }, 284 | "execution_count": 4, 285 | "metadata": {}, 286 | "output_type": "execute_result" 287 | } 288 | ], 289 | "source": [ 290 | "from IPython.display import IFrame\n", 291 | "print('http://147.162.36.50/cochlea/cochleapages/overview/history.htm')\n", 292 | "IFrame('http://147.162.36.50/cochlea/cochleapages/overview/history.htm', width=900, height=600)" 293 | ] 294 | }, 295 | { 296 | "cell_type": "code", 297 | "execution_count": 6, 298 | "metadata": { 299 | "hide_input": true 300 | }, 301 | "outputs": [ 302 | { 303 | "data": { 304 | "text/html": [ 305 | "\n" 306 | ], 307 | "text/plain": [ 308 | "" 309 | ] 310 | }, 311 | "metadata": {}, 312 | "output_type": "display_data" 313 | } 314 | ], 315 | "source": [ 316 | "%%html\n", 317 | "" 318 | ] 319 | }, 320 | { 321 | "cell_type": "markdown", 322 | "metadata": { 323 | "slideshow": { 324 | "slide_type": "slide" 325 | } 326 | }, 327 | "source": [ 328 | "## Preprocessing of Sound in the Peripheral System" 329 | ] 330 | }, 331 | { 332 | "cell_type": "code", 333 | "execution_count": 3, 334 | "metadata": { 335 | "hide_input": true 336 | }, 337 | "outputs": [ 338 | { 339 | "data": { 340 | "text/html": [ 341 | "\n" 342 | ], 343 | "text/plain": [ 344 | "" 345 | ] 346 | }, 347 | "metadata": {}, 348 | "output_type": "display_data" 349 | } 350 | ], 351 | "source": [ 352 | "%%html\n", 353 | "" 354 | ] 355 | }, 356 | { 357 | "cell_type": "markdown", 358 | "metadata": { 359 | "hide_input": false, 360 | "slideshow": { 361 | "slide_type": "-" 362 | } 363 | }, 364 | "source": [ 365 | " - frequency selectivity of the basilar membrane\n", 366 | "
\n", 367 | "
\n", 368 | " \n", 369 | " Source: http://cochlearimplanthelp.com/journey/choosing-a-cochlear-implant/electrodes-and-channels/\n", 370 | "
\n", 371 | "
\n", 372 | "
\n", 373 | " - traveling wave envelopes occur in response to an acoustic tone complex containing e.g. sinusoids of 400 Hz, 1600 Hz and 6400 Hz\n", 374 | " - peak responses for each sinusoid are localized along the membrane surface, with each peak occurring at a particular distance from the oval window (cochlear \"input\")\n", 375 | "
\n", 376 | "
\n", 377 | " \n", 378 | " Source: Yuli You \"Audio Coding Theory and Applications\" \n", 379 | "
\n", 380 | "
" 381 | ] 382 | }, 383 | { 384 | "cell_type": "markdown", 385 | "metadata": { 386 | "slideshow": { 387 | "slide_type": "-" 388 | } 389 | }, 390 | "source": [ 391 | "## Information Processing in the Auditory System" 392 | ] 393 | }, 394 | { 395 | "cell_type": "markdown", 396 | "metadata": { 397 | "hide_input": false, 398 | "slideshow": { 399 | "slide_type": "-" 400 | } 401 | }, 402 | "source": [ 403 | " - basilar membrane as a filter bank\n", 404 | " - bank of highly overlapping bandpass filters\n", 405 | " - the magnitude responses are asymmetric and nonlinear (level dependent)\n", 406 | " - non-uniform bandwidth, and the bandwidths increase with increasing frequency\n", 407 | " \n", 408 | "
\n", 409 | " \n", 410 | "
\n" 411 | ] 412 | }, 413 | { 414 | "cell_type": "markdown", 415 | "metadata": { 416 | "slideshow": { 417 | "slide_type": "slide" 418 | } 419 | }, 420 | "source": [ 421 | "## Sound Perception" 422 | ] 423 | }, 424 | { 425 | "cell_type": "markdown", 426 | "metadata": { 427 | "hide_input": false, 428 | "slideshow": { 429 | "slide_type": "-" 430 | } 431 | }, 432 | "source": [ 433 | "### Frequency and Level Range of Human Hearing" 434 | ] 435 | }, 436 | { 437 | "cell_type": "code", 438 | "execution_count": 1, 439 | "metadata": { 440 | "hide_input": true 441 | }, 442 | "outputs": [ 443 | { 444 | "data": { 445 | "text/html": [ 446 | "\n" 447 | ], 448 | "text/plain": [ 449 | "" 450 | ] 451 | }, 452 | "metadata": {}, 453 | "output_type": "display_data" 454 | } 455 | ], 456 | "source": [ 457 | "%%html\n", 458 | "" 459 | ] 460 | }, 461 | { 462 | "cell_type": "markdown", 463 | "metadata": { 464 | "hide_input": false, 465 | "slideshow": { 466 | "slide_type": "-" 467 | } 468 | }, 469 | "source": [ 470 | "
\n", 471 | " \n", 472 | "
\n" 473 | ] 474 | }, 475 | { 476 | "cell_type": "markdown", 477 | "metadata": {}, 478 | "source": [ 479 | "### Threshold in Quiet or the Absolute Threshold" 480 | ] 481 | }, 482 | { 483 | "cell_type": "markdown", 484 | "metadata": {}, 485 | "source": [ 486 | " - Hearing threshold of 100 persons with normal hearing for \n", 487 | " sine tones (50% curve is the median).\n", 488 | "
\n", 489 | "
\n", 490 | " \n", 491 | "
\n", 492 | "
\n", 493 | "\n", 494 | " - Approximations:\n", 495 | " \n", 496 | " $$\\large\n", 497 | " \\dfrac{L_{T_q}}{dB} = 3.64 \\left( \\frac{f}{kHz} \\right)^{-0.8} - \\exp \\left( -0.6\\left(\\dfrac{f}{kHz}-3.3\\right)^2\\right)\n", 498 | " + 10^{-3}\\left(\\dfrac{f}{kHz}\\right)^4\n", 499 | " $$\n", 500 | "
\n", 501 | "
\n", 502 | " \n", 503 | "
\n", 504 | " \n" 505 | ] 506 | }, 507 | { 508 | "cell_type": "markdown", 509 | "metadata": {}, 510 | "source": [ 511 | "### Hearing Threshold and Age" 512 | ] 513 | }, 514 | { 515 | "cell_type": "markdown", 516 | "metadata": {}, 517 | "source": [ 518 | " - Average pure-tone audiograms in dB Hearing Loss in (a) men and (b) women grouped by their age in decades (the parameter is age group in years). The extended high-frequency range is zoomed for clarity.\n", 519 | " \n", 520 | "
\n", 521 | "
\n", 522 | " \n", 523 | "
\n", 524 | "\n", 525 | "\n", 526 | " - Pure-tone threshold standard deviation of all participants as a function of frequency (the parameter is age in 10-year groups). \n", 527 | " \n", 528 | "
\n", 529 | "
\n", 530 | " \n", 531 | "
\n", 532 | "\n", 533 | "\n", 534 | " " 535 | ] 536 | }, 537 | { 538 | "cell_type": "code", 539 | "execution_count": 6, 540 | "metadata": { 541 | "hide_input": true, 542 | "scrolled": false 543 | }, 544 | "outputs": [ 545 | { 546 | "name": "stdout", 547 | "output_type": "stream", 548 | "text": [ 549 | "http://newt.phys.unsw.edu.au/jw/hearing.html\n" 550 | ] 551 | }, 552 | { 553 | "data": { 554 | "text/html": [ 555 | "\n", 556 | " \n", 563 | " " 564 | ], 565 | "text/plain": [ 566 | "" 567 | ] 568 | }, 569 | "execution_count": 6, 570 | "metadata": {}, 571 | "output_type": "execute_result" 572 | } 573 | ], 574 | "source": [ 575 | "from IPython.display import IFrame\n", 576 | "print('http://newt.phys.unsw.edu.au/jw/hearing.html')\n", 577 | "IFrame('http://newt.phys.unsw.edu.au/jw/hearing.html', width=900, height=600)" 578 | ] 579 | }, 580 | { 581 | "cell_type": "markdown", 582 | "metadata": { 583 | "slideshow": { 584 | "slide_type": "slide" 585 | } 586 | }, 587 | "source": [ 588 | "## Loudness" 589 | ] 590 | }, 591 | { 592 | "cell_type": "code", 593 | "execution_count": 2, 594 | "metadata": { 595 | "hide_input": true 596 | }, 597 | "outputs": [ 598 | { 599 | "data": { 600 | "text/html": [ 601 | "\n" 602 | ], 603 | "text/plain": [ 604 | "" 605 | ] 606 | }, 607 | "metadata": {}, 608 | "output_type": "display_data" 609 | } 610 | ], 611 | "source": [ 612 | "%%html\n", 613 | "" 614 | ] 615 | }, 616 | { 617 | "cell_type": "markdown", 618 | "metadata": { 619 | "slideshow": { 620 | "slide_type": "-" 621 | } 622 | }, 623 | "source": [ 624 | " - Loudness LeveL:\n", 625 | " - **Loudness N:** psychological concept to describe the magnitude of an auditory sensation, the loudness of a sound (measured in 'sone')\n", 626 | " - **loudness level $L_N$** of a sound is measured in **'phon'**\n", 627 | " - **$L_N$** of a sound is the sound pressure of a 1 kHz tone which is as loud as the sound\n", 628 | " - 1 sone is equivalent to 40 phons, which is defined as the loudness level of a pure 1 kHz tone at $L_N$ 40 dB SPL.\n", 629 | " \n", 630 | " \n", 631 | " - Equal-Loudness Level Contours:\n", 632 | " - Equal loudness contours of pure tone sin a free sound field.\n", 633 | " - The parameter is expressed in **loudness level**, $L_N$, and loudness, N. Can be observed:\n", 634 | " - The sensitivity of the human ear -a function of frequency\n", 635 | " - The most sensitive to sounds around 2–4 kHz\n", 636 | " \n", 637 | "
\n", 638 | "
\n", 639 | " \n", 640 | "
\n", 641 | "\n", 642 | " - Loudness Scale:\n", 643 | " - aim: double the number of units on this scale means magnitude of sensation is doubled\n", 644 | "
\n", 645 | " $\\rightarrow$ relation between loudness level $L_N$ and the loudness N (rule of thumb):\n", 646 | " $$2 \\cdot N \\hat{=} L_N + 10 phon $$\n", 647 | " - one potential experiment:\n", 648 | "
\n", 649 | " listen to a sound with $L_{N_1}$ 1and then adjust the same sound until
\n", 650 | " $N_2 = 2 \\cdot N_1$, then compare $L_{N_1}$ and $L_{N_2}$\n", 651 | " \n", 652 | "
\n", 653 | "\n", 654 | "
\n", 655 | " " 656 | ] 657 | }, 658 | { 659 | "cell_type": "markdown", 660 | "metadata": { 661 | "slideshow": { 662 | "slide_type": "slide" 663 | } 664 | }, 665 | "source": [ 666 | "## Critical Bands" 667 | ] 668 | }, 669 | { 670 | "cell_type": "markdown", 671 | "metadata": { 672 | "slideshow": { 673 | "slide_type": "-" 674 | } 675 | }, 676 | "source": [ 677 | "### Frequency Grouping in Human Hearing" 678 | ] 679 | }, 680 | { 681 | "cell_type": "code", 682 | "execution_count": 3, 683 | "metadata": { 684 | "hide_input": true 685 | }, 686 | "outputs": [ 687 | { 688 | "data": { 689 | "text/html": [ 690 | "\n" 691 | ], 692 | "text/plain": [ 693 | "" 694 | ] 695 | }, 696 | "metadata": {}, 697 | "output_type": "display_data" 698 | } 699 | ], 700 | "source": [ 701 | "%%html\n", 702 | "" 703 | ] 704 | }, 705 | { 706 | "cell_type": "markdown", 707 | "metadata": { 708 | "slideshow": { 709 | "slide_type": "-" 710 | } 711 | }, 712 | "source": [ 713 | " - Different interpretations that produce the same segmentation:\n", 714 | " - Constant distance in the Cochlea\n", 715 | " - By using tones under the threshold in quiet, their intensity add up in a critical band and are now audible\n", 716 | " - Tones in a critical band above the threshold in quiet: their energy adds up\n", 717 | " - Formula for the width of the critical bands:\n", 718 | " - for frequencies < 500 Hz: Constant 100Hz width\n", 719 | " - for frequencies > 500 Hz: 0.2*frequency\n", 720 | " \n", 721 | "
\n", 722 | "\n", 723 | " : Zwicker, Fastl “Psychoacoustics Facts and Models”, p.159 \n", 724 | "
\n", 725 | " \n", 726 | " - Critical bandwidth as a function of frequency, that quantifies the cochlear filter passbands.\n", 727 | " - Approximations for low and high frequency ranges are indicated by broken lines." 728 | ] 729 | }, 730 | { 731 | "cell_type": "markdown", 732 | "metadata": { 733 | "hide_input": false, 734 | "slideshow": { 735 | "slide_type": "subslide" 736 | } 737 | }, 738 | "source": [ 739 | "#### Excursus - Critical Bands and Loudness" 740 | ] 741 | }, 742 | { 743 | "cell_type": "markdown", 744 | "metadata": { 745 | "slideshow": { 746 | "slide_type": "-" 747 | } 748 | }, 749 | "source": [ 750 | " - Spectral effects -influence of bandwidth:\n", 751 | " - bandwidth of the signals plays an important role\n", 752 | " - sound level also influence loudness level\n", 753 | " - $\\rightarrow$ total sound intensity (SPL) have to be constant to measure loudness as function of bandwidth\n", 754 | " - $\\rightarrow$ critical bandwidth\n", 755 | " \n", 756 | "
\n", 757 | "\n", 758 | "
" 759 | ] 760 | }, 761 | { 762 | "cell_type": "markdown", 763 | "metadata": { 764 | "hide_input": false, 765 | "slideshow": { 766 | "slide_type": "subslide" 767 | } 768 | }, 769 | "source": [ 770 | "### Bark Scale" 771 | ] 772 | }, 773 | { 774 | "cell_type": "markdown", 775 | "metadata": { 776 | "slideshow": { 777 | "slide_type": "-" 778 | } 779 | }, 780 | "source": [ 781 | " - Critical-band concept used in many models and hypothesis
\n", 782 | " $\\rightarrow$ unit was defined leading to so-called critical-band rate scale\n", 783 | " - scale ranging from 0 –24, unit \"Bark\"\n", 784 | " - relation between z and f is important for understanding many characteristics of human ear\n", 785 | "\n", 786 | "
\n", 787 | "\n", 788 | "
\n", 789 | "\n", 790 | " - Critical-band concept used in many models and hypotheses
\n", 791 | " $\\rightarrow$ unit was defined leading to so-called critical-band rate scale\n", 792 | " - scale ranging from 0 –24, unit \"Bark\"(after Zwicker)\n", 793 | " - One Bark corresponds to one critical band\n", 794 | " - Attempt to approximate critical bands with formulas:\n", 795 | " \n", 796 | "Critical Bandrate *z*:\n", 797 | "\n", 798 | "$$\\large\n", 799 | "\\dfrac{z}{Bark} = 13 \\arctan \\left( 0.76 \\cdot \\dfrac{f}{kHz} \\right) + 3.5 \\cdot \\arctan \\left( \\dfrac{f}{7.5kHz}\\right)^2$$\n", 800 | "\n", 801 | "Critical Bandwidth:\n", 802 | "\n", 803 | "$$\\large\n", 804 | "\\Delta f_b = 25 + 75 \\left( 1 + 1.4 \\left( \\dfrac{f}{kHz} \\right)^2 \\right)^{0.69} $$" 805 | ] 806 | }, 807 | { 808 | "cell_type": "markdown", 809 | "metadata": { 810 | "hide_input": false, 811 | "slideshow": { 812 | "slide_type": "slide" 813 | } 814 | }, 815 | "source": [ 816 | "## Masking" 817 | ] 818 | }, 819 | { 820 | "cell_type": "markdown", 821 | "metadata": { 822 | "slideshow": { 823 | "slide_type": "-" 824 | } 825 | }, 826 | "source": [ 827 | " - data compression:\n", 828 | " - exploitation of perception in critical bands with reference to the threshold in quiet is not enough\n", 829 | "\n", 830 | "\n", 831 | " - Basic principle:\n", 832 | " - a **test signal**, called a **maskee** is placed at the center frequency of the critical bandwidth.\n", 833 | " - one **masking signal**, called **masker** (equal power and distance from maskee).\n", 834 | " - If the $P_{maskee}$ is weak relative to the total power of the maskers $\\rightarrow$ the test signal is not audible $\\rightarrow$ test signal is masked\n", 835 | " - In order for the test signal to become audible, its power has to be raised to above a certain level – **masking threshold**.\n", 836 | " " 837 | ] 838 | }, 839 | { 840 | "cell_type": "code", 841 | "execution_count": 1, 842 | "metadata": { 843 | "hide_input": true 844 | }, 845 | "outputs": [ 846 | { 847 | "data": { 848 | "text/html": [ 849 | "\n" 850 | ], 851 | "text/plain": [ 852 | "" 853 | ] 854 | }, 855 | "metadata": {}, 856 | "output_type": "display_data" 857 | } 858 | ], 859 | "source": [ 860 | "%%html\n", 861 | "" 862 | ] 863 | }, 864 | { 865 | "cell_type": "markdown", 866 | "metadata": { 867 | "hide_input": false, 868 | "slideshow": { 869 | "slide_type": "-" 870 | } 871 | }, 872 | "source": [ 873 | "### Masking of Pure Tones by Noise -Broad-Band Noise" 874 | ] 875 | }, 876 | { 877 | "cell_type": "markdown", 878 | "metadata": { 879 | "hide_input": false, 880 | "slideshow": { 881 | "slide_type": "-" 882 | } 883 | }, 884 | "source": [ 885 | " - Broad-band noise:\n", 886 | " - white noise from 20 Hz 20 - 20kHz.\n", 887 | " \n", 888 | "
\n", 889 | "
\n", 890 | " \n", 891 | " Zwicker, Fastl \"Psychoacoustics - Facts and Models\", 2nd Edition, 1999. \n", 892 | "
\n", 893 | "
\n", 894 | " \n", 895 | " \n", 896 | " - masking threshold for pure tones masked by broad band noise of different levels.\n", 897 | " - uniform masking noise (UMN) by equalization of the 10 dB per decade slope.\n", 898 | " " 899 | ] 900 | }, 901 | { 902 | "cell_type": "markdown", 903 | "metadata": { 904 | "slideshow": { 905 | "slide_type": "-" 906 | } 907 | }, 908 | "source": [ 909 | "### Masking of Pure Tones by Noise -Narrow-Band Noise" 910 | ] 911 | }, 912 | { 913 | "cell_type": "code", 914 | "execution_count": 2, 915 | "metadata": { 916 | "hide_input": true 917 | }, 918 | "outputs": [ 919 | { 920 | "data": { 921 | "text/html": [ 922 | "\n" 923 | ], 924 | "text/plain": [ 925 | "" 926 | ] 927 | }, 928 | "metadata": {}, 929 | "output_type": "display_data" 930 | } 931 | ], 932 | "source": [ 933 | "%%html\n", 934 | "" 935 | ] 936 | }, 937 | { 938 | "cell_type": "markdown", 939 | "metadata": { 940 | "hide_input": false, 941 | "slideshow": { 942 | "slide_type": "-" 943 | } 944 | }, 945 | "source": [ 946 | " - narrow-band noise:\n", 947 | " - noise with a bandwidth equal or smaller than critical bandwidth\n", 948 | " \n", 949 | "
\n", 950 | "
\n", 951 | " \n", 952 | " Zwicker, Fastl \"Psychoacoustics - Facts and Models\", 2nd Edition, 1999. \n", 953 | "
\n", 954 | "
\n", 955 | " \n", 956 | " \n", 957 | " - threshold of pure tones masked by narrow-band noise for different centre frequencies.\n", 958 | " - difference between maximum of masked threshold and test tone level.\n", 959 | " \n", 960 | "
\n", 961 | "
\n", 962 | " \n", 963 | "
\n", 964 | "
\n", 965 | "\n", 966 | " - dependence of masked threshold on level of narrow-band noise.\n", 967 | " - dips at higher levels $\\rightarrow$ nonlinear effects (difference noise caused by interactions between test tone and noise) " 968 | ] 969 | }, 970 | { 971 | "cell_type": "markdown", 972 | "metadata": { 973 | "scrolled": true, 974 | "slideshow": { 975 | "slide_type": "-" 976 | } 977 | }, 978 | "source": [ 979 | "### Masking of Pure Tones by Low-Pass or High-Pass Noise" 980 | ] 981 | }, 982 | { 983 | "cell_type": "code", 984 | "execution_count": 3, 985 | "metadata": { 986 | "hide_input": true 987 | }, 988 | "outputs": [ 989 | { 990 | "data": { 991 | "text/html": [ 992 | "\n" 993 | ], 994 | "text/plain": [ 995 | "" 996 | ] 997 | }, 998 | "metadata": {}, 999 | "output_type": "display_data" 1000 | } 1001 | ], 1002 | "source": [ 1003 | "%%html\n", 1004 | "" 1005 | ] 1006 | }, 1007 | { 1008 | "cell_type": "markdown", 1009 | "metadata": { 1010 | "scrolled": false, 1011 | "slideshow": { 1012 | "slide_type": "-" 1013 | } 1014 | }, 1015 | "source": [ 1016 | "
\n", 1017 | " \n", 1018 | "
" 1019 | ] 1020 | }, 1021 | { 1022 | "cell_type": "markdown", 1023 | "metadata": { 1024 | "slideshow": { 1025 | "slide_type": "-" 1026 | } 1027 | }, 1028 | "source": [ 1029 | "### Masking of Pure Tones by Pure Tone" 1030 | ] 1031 | }, 1032 | { 1033 | "cell_type": "code", 1034 | "execution_count": 4, 1035 | "metadata": { 1036 | "hide_input": true 1037 | }, 1038 | "outputs": [ 1039 | { 1040 | "data": { 1041 | "text/html": [ 1042 | "\n" 1043 | ], 1044 | "text/plain": [ 1045 | "" 1046 | ] 1047 | }, 1048 | "metadata": {}, 1049 | "output_type": "display_data" 1050 | } 1051 | ], 1052 | "source": [ 1053 | "%%html\n", 1054 | "" 1055 | ] 1056 | }, 1057 | { 1058 | "cell_type": "markdown", 1059 | "metadata": { 1060 | "slideshow": { 1061 | "slide_type": "-" 1062 | } 1063 | }, 1064 | "source": [ 1065 | " - pure tone:\n", 1066 | " - single frequency\n", 1067 | " \n", 1068 | "
\n", 1069 | "
\n", 1070 | " \n", 1071 | "
\n", 1072 | "
\n", 1073 | "\n", 1074 | " - 1 kHz masking tone with level of 80 dB.\n", 1075 | " - threshold for 'detection of anything'\n", 1076 | " \n", 1077 | " \n", 1078 | " - Difficulties:\n", 1079 | " - beats (hatching)\n", 1080 | " - masker and difference tone (stippling)" 1081 | ] 1082 | }, 1083 | { 1084 | "cell_type": "markdown", 1085 | "metadata": { 1086 | "slideshow": { 1087 | "slide_type": "-" 1088 | } 1089 | }, 1090 | "source": [ 1091 | "### Masking of Pure Tone by Complex Tones" 1092 | ] 1093 | }, 1094 | { 1095 | "cell_type": "code", 1096 | "execution_count": 5, 1097 | "metadata": { 1098 | "hide_input": true 1099 | }, 1100 | "outputs": [ 1101 | { 1102 | "data": { 1103 | "text/html": [ 1104 | "\n" 1105 | ], 1106 | "text/plain": [ 1107 | "" 1108 | ] 1109 | }, 1110 | "metadata": {}, 1111 | "output_type": "display_data" 1112 | } 1113 | ], 1114 | "source": [ 1115 | "%%html\n", 1116 | "" 1117 | ] 1118 | }, 1119 | { 1120 | "cell_type": "markdown", 1121 | "metadata": { 1122 | "slideshow": { 1123 | "slide_type": "-" 1124 | } 1125 | }, 1126 | "source": [ 1127 | " - complex tone:\n", 1128 | " - fundamental tone with its harmonics\n", 1129 | " \n", 1130 | "
\n", 1131 | "
\n", 1132 | " \n", 1133 | " Zwicker, Fastl \"Psychoacoustics - Facts and Models\", 2nd Edition, 1999. \n", 1134 | "
\n", 1135 | "
\n", 1136 | "\n", 1137 | "\n", 1138 | " - threshold of pure tones masked by a complex tone with 200 Hz fundamental frequency and nine harmonics.\n" 1139 | ] 1140 | }, 1141 | { 1142 | "cell_type": "markdown", 1143 | "metadata": { 1144 | "slideshow": { 1145 | "slide_type": "-" 1146 | } 1147 | }, 1148 | "source": [ 1149 | "### Tonality" 1150 | ] 1151 | }, 1152 | { 1153 | "cell_type": "code", 1154 | "execution_count": 7, 1155 | "metadata": { 1156 | "hide_input": true 1157 | }, 1158 | "outputs": [ 1159 | { 1160 | "data": { 1161 | "text/html": [ 1162 | "\n" 1163 | ], 1164 | "text/plain": [ 1165 | "" 1166 | ] 1167 | }, 1168 | "metadata": {}, 1169 | "output_type": "display_data" 1170 | } 1171 | ], 1172 | "source": [ 1173 | "%%html\n", 1174 | "" 1175 | ] 1176 | }, 1177 | { 1178 | "cell_type": "markdown", 1179 | "metadata": { 1180 | "slideshow": { 1181 | "slide_type": "-" 1182 | } 1183 | }, 1184 | "source": [ 1185 | " - Tonality index $\\alpha$:\n", 1186 | " - noisy signal: $\\alpha =0$\n", 1187 | " - tonal signal: $\\alpha =1$\n", 1188 | " - System theory:\n", 1189 | " - Sharp spectral lines = Signal is periodic = Signal is predictable.\n", 1190 | " - Approximation: If the signal is predictable then it should be periodic.\n", 1191 | " - Therefore we can use prediction to approximate if a signal is tonal (by periodicity). \n", 1192 | " - Example:\n", 1193 | "
\n", 1194 | " \n", 1195 | "
\n", 1196 | "
\n" 1197 | ] 1198 | }, 1199 | { 1200 | "cell_type": "markdown", 1201 | "metadata": { 1202 | "slideshow": { 1203 | "slide_type": "-" 1204 | } 1205 | }, 1206 | "source": [ 1207 | "### Masking - Spreading Function" 1208 | ] 1209 | }, 1210 | { 1211 | "cell_type": "code", 1212 | "execution_count": 8, 1213 | "metadata": { 1214 | "hide_input": true 1215 | }, 1216 | "outputs": [ 1217 | { 1218 | "data": { 1219 | "text/html": [ 1220 | "\n" 1221 | ], 1222 | "text/plain": [ 1223 | "" 1224 | ] 1225 | }, 1226 | "metadata": {}, 1227 | "output_type": "display_data" 1228 | } 1229 | ], 1230 | "source": [ 1231 | "%%html\n", 1232 | "" 1233 | ] 1234 | }, 1235 | { 1236 | "cell_type": "markdown", 1237 | "metadata": { 1238 | "slideshow": { 1239 | "slide_type": "-" 1240 | } 1241 | }, 1242 | "source": [ 1243 | "
\n", 1244 | "
\n", 1245 | " \n", 1246 | "
\n", 1247 | "
" 1248 | ] 1249 | }, 1250 | { 1251 | "cell_type": "markdown", 1252 | "metadata": { 1253 | "slideshow": { 1254 | "slide_type": "-" 1255 | } 1256 | }, 1257 | "source": [ 1258 | "### Calculating the Masking Threshold" 1259 | ] 1260 | }, 1261 | { 1262 | "cell_type": "markdown", 1263 | "metadata": { 1264 | "slideshow": { 1265 | "slide_type": "-" 1266 | } 1267 | }, 1268 | "source": [ 1269 | " - Comparison of the signal level to Masking Threshold:\n", 1270 | "\n", 1271 | "$$\\large\n", 1272 | "\\dfrac{O_f(i)}{dB} = \\alpha (14.5+i) + (1+\\alpha)\\cdot \\alpha_v$$\n", 1273 | "\n", 1274 | "$$\\large\n", 1275 | "\\alpha_v = -2 - 2.05 \\arctan \\left( \\dfrac{f}{4kHz} \\right) - 0.75 \\arctan \\left( \\dfrac{f^2}{2.56 kHz^2} \\right)$$\n", 1276 | "\n", 1277 | "where $\\alpha \\dots$ Tonality index, $\\alpha_v \\dots$ Noise Coefficient\n", 1278 | "\n", 1279 | " - Approxitamtion:\n", 1280 | "\n", 1281 | "$$\\large\n", 1282 | "\\dfrac{O_f(i)}{dB} = \\alpha(14.5+i) + (1 - \\alpha)\\cdot 5.5 $$\n", 1283 | "\n", 1284 | " - Simultaneous Masking Threshold\n", 1285 | " \n", 1286 | " $$\\large\n", 1287 | " T(f) = 10^{\\frac{L_s(f)- O_f(i)}{10}}$$\n", 1288 | " \n", 1289 | " where $L_s(f) \\dots$ Sound Pressure Level, $O_f{i} \\dots$ Distance to Masking Threshold" 1290 | ] 1291 | }, 1292 | { 1293 | "cell_type": "markdown", 1294 | "metadata": { 1295 | "slideshow": { 1296 | "slide_type": "-" 1297 | } 1298 | }, 1299 | "source": [ 1300 | "### In-Band Making" 1301 | ] 1302 | }, 1303 | { 1304 | "cell_type": "code", 1305 | "execution_count": 1, 1306 | "metadata": { 1307 | "hide_input": true, 1308 | "slideshow": { 1309 | "slide_type": "-" 1310 | } 1311 | }, 1312 | "outputs": [ 1313 | { 1314 | "data": { 1315 | "text/html": [ 1316 | "\n" 1317 | ], 1318 | "text/plain": [ 1319 | "" 1320 | ] 1321 | }, 1322 | "metadata": {}, 1323 | "output_type": "display_data" 1324 | } 1325 | ], 1326 | "source": [ 1327 | "%%html\n", 1328 | "" 1329 | ] 1330 | }, 1331 | { 1332 | "cell_type": "markdown", 1333 | "metadata": { 1334 | "slideshow": { 1335 | "slide_type": "-" 1336 | } 1337 | }, 1338 | "source": [ 1339 | "
\n", 1340 | " \n", 1341 | " Zolzer, \"Digital Audio Signal Processig\" \n", 1342 | "
\n", 1343 | "\n" 1344 | ] 1345 | }, 1346 | { 1347 | "cell_type": "markdown", 1348 | "metadata": { 1349 | "slideshow": { 1350 | "slide_type": "-" 1351 | } 1352 | }, 1353 | "source": [ 1354 | "### Masking Neighboring Bands" 1355 | ] 1356 | }, 1357 | { 1358 | "cell_type": "markdown", 1359 | "metadata": { 1360 | "slideshow": { 1361 | "slide_type": "-" 1362 | } 1363 | }, 1364 | "source": [ 1365 | " - spread of masking due to the non-linearity of auditory filters\n", 1366 | " - resulting masking threshold = sum of power of neighbouring spreading functions-\n", 1367 | " - here: value at intersection of neighbouringspreading functions taken\n", 1368 | "
\n", 1369 | "
\n", 1370 | " \n", 1371 | " Zolzer, \"Digital Audio Signal Processig\" \n", 1372 | "
\n", 1373 | "
\n", 1374 | "\n", 1375 | "\n", 1376 | "$$\\large\n", 1377 | "S_1 = 27 \\cdot \\dfrac{dB}{Bark}$$\n", 1378 | "\n", 1379 | "$$\\large\n", 1380 | "S_2 = 24 + 0.23 \\left( \\dfrac{f}{kHz} \\right)^{-1} - 0.2 \\cdot \\dfrac{L_s(f)}{dB} \\dfrac{dB}{Bark}$$" 1381 | ] 1382 | }, 1383 | { 1384 | "cell_type": "markdown", 1385 | "metadata": { 1386 | "slideshow": { 1387 | "slide_type": "-" 1388 | } 1389 | }, 1390 | "source": [ 1391 | "### Temporal Masking Effects" 1392 | ] 1393 | }, 1394 | { 1395 | "cell_type": "code", 1396 | "execution_count": 2, 1397 | "metadata": { 1398 | "hide_input": true 1399 | }, 1400 | "outputs": [ 1401 | { 1402 | "data": { 1403 | "text/html": [ 1404 | "\n" 1405 | ], 1406 | "text/plain": [ 1407 | "" 1408 | ] 1409 | }, 1410 | "metadata": {}, 1411 | "output_type": "display_data" 1412 | } 1413 | ], 1414 | "source": [ 1415 | "%%html\n", 1416 | "" 1417 | ] 1418 | }, 1419 | { 1420 | "cell_type": "markdown", 1421 | "metadata": { 1422 | "slideshow": { 1423 | "slide_type": "-" 1424 | } 1425 | }, 1426 | "source": [ 1427 | " - Post-Masking: corresponds to decay in the effect of the masker $\\rightarrow$ expected\n", 1428 | " - Pre-Masking: appears during time before masker is switched on:\n", 1429 | " - Quick build-up time for loud maskers\n", 1430 | " - Slower build-up time for faint test sounds\n", 1431 | " - Frequency resolution $\\leftrightarrow$ Blurringing time\n", 1432 | " - Frequency resolution in the ear $\\rightarrow$ Masking in time\n", 1433 | " - Because of in-ear fast processing between quiet to loud signals, we get Pre-Echoes\n", 1434 | " - Pre-Masking: 1-5 ms\n", 1435 | " - Post-Masking: ~100ms\n", 1436 | " \n", 1437 | "
\n", 1438 | " \n", 1439 | " Zwicker. Fastl \"Psychoacoustics Facts and Models\" \n", 1440 | "
\n", 1441 | " " 1442 | ] 1443 | }, 1444 | { 1445 | "cell_type": "code", 1446 | "execution_count": null, 1447 | "metadata": {}, 1448 | "outputs": [], 1449 | "source": [] 1450 | } 1451 | ], 1452 | "metadata": { 1453 | "kernelspec": { 1454 | "display_name": "Python 3", 1455 | "language": "python", 1456 | "name": "python3" 1457 | }, 1458 | "language_info": { 1459 | "codemirror_mode": { 1460 | "name": "ipython", 1461 | "version": 3 1462 | }, 1463 | "file_extension": ".py", 1464 | "mimetype": "text/x-python", 1465 | "name": "python", 1466 | "nbconvert_exporter": "python", 1467 | "pygments_lexer": "ipython3", 1468 | "version": "3.7.8" 1469 | }, 1470 | "livereveal": { 1471 | "rise": { 1472 | "height": "90%", 1473 | "width": "90%" 1474 | }, 1475 | "scroll": true, 1476 | "theme": "beige", 1477 | "transition": "zoom" 1478 | }, 1479 | "widgets": { 1480 | "application/vnd.jupyter.widget-state+json": { 1481 | "state": { 1482 | "0b0c58e6c93a41799e09f406dbdefde6": { 1483 | "model_module": "@jupyter-widgets/base", 1484 | "model_module_version": "1.2.0", 1485 | "model_name": "LayoutModel", 1486 | "state": {} 1487 | }, 1488 | "0b3040b1b58e4b53a4509d1a39fd031d": { 1489 | "model_module": "@jupyter-widgets/base", 1490 | "model_module_version": "1.2.0", 1491 | "model_name": "LayoutModel", 1492 | "state": {} 1493 | }, 1494 | "0be2682832bd4bc8b51cb737e46ca28c": { 1495 | "model_module": "@jupyter-widgets/base", 1496 | "model_module_version": "1.2.0", 1497 | "model_name": "LayoutModel", 1498 | "state": {} 1499 | }, 1500 | "0e39b9742c5341378d14cd0ce7c6d7b2": { 1501 | "model_module": "@jupyter-widgets/controls", 1502 | "model_module_version": "1.5.0", 1503 | "model_name": "HBoxModel", 1504 | "state": { 1505 | "children": [ 1506 | "IPY_MODEL_2d9b7d0f8fe4439bb967b502ccdf02f7", 1507 | "IPY_MODEL_7042e1d3ab44462087773c8182c56c15" 1508 | ], 1509 | "layout": "IPY_MODEL_0be2682832bd4bc8b51cb737e46ca28c" 1510 | } 1511 | }, 1512 | "0f12a068f35a41949e7af2ab301fb1a9": { 1513 | "model_module": "@jupyter-widgets/controls", 1514 | "model_module_version": "1.5.0", 1515 | "model_name": "DescriptionStyleModel", 1516 | "state": { 1517 | "description_width": "" 1518 | } 1519 | }, 1520 | "15ad70cfa0aa41638667c356ae56295f": { 1521 | "model_module": "@jupyter-widgets/base", 1522 | "model_module_version": "1.2.0", 1523 | "model_name": "LayoutModel", 1524 | "state": {} 1525 | }, 1526 | "16c7c2a79a4a4203be047ae7aeee19fa": { 1527 | "model_module": "@jupyter-widgets/controls", 1528 | "model_module_version": "1.5.0", 1529 | "model_name": "ToggleButtonModel", 1530 | "state": { 1531 | "description": "Stop", 1532 | "layout": "IPY_MODEL_15ad70cfa0aa41638667c356ae56295f", 1533 | "style": "IPY_MODEL_0f12a068f35a41949e7af2ab301fb1a9" 1534 | } 1535 | }, 1536 | "1d15c09691004b7080cdbe29a28d73ff": { 1537 | "model_module": "@jupyter-widgets/controls", 1538 | "model_module_version": "1.5.0", 1539 | "model_name": "HBoxModel", 1540 | "state": { 1541 | "children": [ 1542 | "IPY_MODEL_e2f6054e0fe24c10ac5c95a2b687f1ca", 1543 | "IPY_MODEL_2cf22153219242b180ccb47bc4b8f968" 1544 | ], 1545 | "layout": "IPY_MODEL_b40a35cef38e4048b6a2d8149ff7e069" 1546 | } 1547 | }, 1548 | "207bd58d7ad144f58b70b598ae30db8e": { 1549 | "model_module": "@jupyter-widgets/base", 1550 | "model_module_version": "1.2.0", 1551 | "model_name": "LayoutModel", 1552 | "state": {} 1553 | }, 1554 | "20f35183b9e74a438f97507b3d10929a": { 1555 | "model_module": "@jupyter-widgets/controls", 1556 | "model_module_version": "1.5.0", 1557 | "model_name": "ButtonStyleModel", 1558 | "state": {} 1559 | }, 1560 | "23ef77f7f8a84176907ef6949905623b": { 1561 | "model_module": "@jupyter-widgets/controls", 1562 | "model_module_version": "1.5.0", 1563 | "model_name": "HBoxModel", 1564 | "state": { 1565 | "children": [ 1566 | "IPY_MODEL_f61da7386157426ca81a202ffe23e162", 1567 | "IPY_MODEL_77a43b098d01405690eb7f9256544cc1" 1568 | ], 1569 | "layout": "IPY_MODEL_3c3e2637ae684b7e95aca1d49d23f40b" 1570 | } 1571 | }, 1572 | "2cf22153219242b180ccb47bc4b8f968": { 1573 | "model_module": "@jupyter-widgets/controls", 1574 | "model_module_version": "1.5.0", 1575 | "model_name": "ToggleButtonModel", 1576 | "state": { 1577 | "description": "Stop", 1578 | "layout": "IPY_MODEL_207bd58d7ad144f58b70b598ae30db8e", 1579 | "style": "IPY_MODEL_bd80f1c63a2b4a25900e5e5763317b7a" 1580 | } 1581 | }, 1582 | "2d9b7d0f8fe4439bb967b502ccdf02f7": { 1583 | "model_module": "@jupyter-widgets/controls", 1584 | "model_module_version": "1.5.0", 1585 | "model_name": "ButtonModel", 1586 | "state": { 1587 | "description": "Start", 1588 | "disabled": true, 1589 | "layout": "IPY_MODEL_77522a5639144548b35db6c4d7dd4fb1", 1590 | "style": "IPY_MODEL_7d63afec39bb49df9edf2873be48ac04" 1591 | } 1592 | }, 1593 | "3276b4539f7144b6a21869875e9c4914": { 1594 | "model_module": "@jupyter-widgets/base", 1595 | "model_module_version": "1.2.0", 1596 | "model_name": "LayoutModel", 1597 | "state": {} 1598 | }, 1599 | "354ba59a5468408b962c72423d4e1c65": { 1600 | "model_module": "@jupyter-widgets/base", 1601 | "model_module_version": "1.2.0", 1602 | "model_name": "LayoutModel", 1603 | "state": {} 1604 | }, 1605 | "3c3e2637ae684b7e95aca1d49d23f40b": { 1606 | "model_module": "@jupyter-widgets/base", 1607 | "model_module_version": "1.2.0", 1608 | "model_name": "LayoutModel", 1609 | "state": {} 1610 | }, 1611 | "4131c38460e44eaf962c7017e2536232": { 1612 | "model_module": "@jupyter-widgets/controls", 1613 | "model_module_version": "1.5.0", 1614 | "model_name": "HBoxModel", 1615 | "state": { 1616 | "children": [ 1617 | "IPY_MODEL_d58265f7549a4e979a3c65b9bd5d76a5", 1618 | "IPY_MODEL_c5267597c945478f959c375f44a4d1a7" 1619 | ], 1620 | "layout": "IPY_MODEL_4b10bbeb1b794eb697268d9a1bd106ba" 1621 | } 1622 | }, 1623 | "435a7872da0d4c41be05e35d3d9570aa": { 1624 | "model_module": "@jupyter-widgets/controls", 1625 | "model_module_version": "1.5.0", 1626 | "model_name": "DescriptionStyleModel", 1627 | "state": { 1628 | "description_width": "" 1629 | } 1630 | }, 1631 | "4488c6e4c7834e098e81b481cb1003a4": { 1632 | "model_module": "@jupyter-widgets/controls", 1633 | "model_module_version": "1.5.0", 1634 | "model_name": "CheckboxModel", 1635 | "state": { 1636 | "description": "LP Filters", 1637 | "disabled": false, 1638 | "layout": "IPY_MODEL_a6c7fc4e429c464e8fca3294d830542a", 1639 | "style": "IPY_MODEL_7fc76b30f0904d1ab285f634f82d7054", 1640 | "value": false 1641 | } 1642 | }, 1643 | "470de88b8310448d864c97fad609f7de": { 1644 | "model_module": "@jupyter-widgets/controls", 1645 | "model_module_version": "1.5.0", 1646 | "model_name": "ButtonStyleModel", 1647 | "state": {} 1648 | }, 1649 | "4b10bbeb1b794eb697268d9a1bd106ba": { 1650 | "model_module": "@jupyter-widgets/base", 1651 | "model_module_version": "1.2.0", 1652 | "model_name": "LayoutModel", 1653 | "state": {} 1654 | }, 1655 | "5795130576114428a9f5f86ee4aa8c80": { 1656 | "model_module": "@jupyter-widgets/controls", 1657 | "model_module_version": "1.5.0", 1658 | "model_name": "DescriptionStyleModel", 1659 | "state": { 1660 | "description_width": "" 1661 | } 1662 | }, 1663 | "589c1be4bde643c899cf54d67ebfb42f": { 1664 | "model_module": "@jupyter-widgets/controls", 1665 | "model_module_version": "1.5.0", 1666 | "model_name": "HBoxModel", 1667 | "state": { 1668 | "children": [ 1669 | "IPY_MODEL_e8e1025d1bb44a08a500c0d3b8718796", 1670 | "IPY_MODEL_fb8ae2a4374c451eb7d78b16edcca16a" 1671 | ], 1672 | "layout": "IPY_MODEL_354ba59a5468408b962c72423d4e1c65" 1673 | } 1674 | }, 1675 | "5e41a5a9f29443f49a84cb3b28cfd887": { 1676 | "model_module": "@jupyter-widgets/base", 1677 | "model_module_version": "1.2.0", 1678 | "model_name": "LayoutModel", 1679 | "state": {} 1680 | }, 1681 | "5e7f58b91bbf4d1d839bbf49450afd8f": { 1682 | "model_module": "@jupyter-widgets/controls", 1683 | "model_module_version": "1.5.0", 1684 | "model_name": "HBoxModel", 1685 | "state": { 1686 | "children": [ 1687 | "IPY_MODEL_ac4c2b3e307640bdb74f11ec3cf0dafd", 1688 | "IPY_MODEL_e3db17127dba4e609008d860b5cf05c5" 1689 | ], 1690 | "layout": "IPY_MODEL_5e41a5a9f29443f49a84cb3b28cfd887" 1691 | } 1692 | }, 1693 | "5ec351197a1c442a8fa816d034b1eef6": { 1694 | "model_module": "@jupyter-widgets/base", 1695 | "model_module_version": "1.2.0", 1696 | "model_name": "LayoutModel", 1697 | "state": {} 1698 | }, 1699 | "6341affae71049aba97ec2ad0ff9583d": { 1700 | "model_module": "@jupyter-widgets/base", 1701 | "model_module_version": "1.2.0", 1702 | "model_name": "LayoutModel", 1703 | "state": {} 1704 | }, 1705 | "6c0e7d0a22a144458689ec0d86788548": { 1706 | "model_module": "@jupyter-widgets/base", 1707 | "model_module_version": "1.2.0", 1708 | "model_name": "LayoutModel", 1709 | "state": {} 1710 | }, 1711 | "6cb680fde00f4a6e8c0fb454c76857d3": { 1712 | "model_module": "@jupyter-widgets/controls", 1713 | "model_module_version": "1.5.0", 1714 | "model_name": "ToggleButtonModel", 1715 | "state": { 1716 | "description": "Stop", 1717 | "layout": "IPY_MODEL_de5153ef26c14561bb728c1e74b51aac", 1718 | "style": "IPY_MODEL_aed5c18ec1e44b1cb9c1c8a1164530bc" 1719 | } 1720 | }, 1721 | "6d9b43798e7642019c6888b869c409a7": { 1722 | "model_module": "@jupyter-widgets/controls", 1723 | "model_module_version": "1.5.0", 1724 | "model_name": "ButtonStyleModel", 1725 | "state": {} 1726 | }, 1727 | "7042e1d3ab44462087773c8182c56c15": { 1728 | "model_module": "@jupyter-widgets/controls", 1729 | "model_module_version": "1.5.0", 1730 | "model_name": "ToggleButtonModel", 1731 | "state": { 1732 | "description": "Stop", 1733 | "layout": "IPY_MODEL_d869cf27021149409370838cc26ee878", 1734 | "style": "IPY_MODEL_b5d3845cf20e497ea0bddab2ce24c089" 1735 | } 1736 | }, 1737 | "77480c26779c420390eabd1bbd64cbee": { 1738 | "model_module": "@jupyter-widgets/controls", 1739 | "model_module_version": "1.5.0", 1740 | "model_name": "ButtonModel", 1741 | "state": { 1742 | "description": "Start", 1743 | "layout": "IPY_MODEL_7b0edd69218248ec89c22a9b29960928", 1744 | "style": "IPY_MODEL_470de88b8310448d864c97fad609f7de" 1745 | } 1746 | }, 1747 | "77522a5639144548b35db6c4d7dd4fb1": { 1748 | "model_module": "@jupyter-widgets/base", 1749 | "model_module_version": "1.2.0", 1750 | "model_name": "LayoutModel", 1751 | "state": {} 1752 | }, 1753 | "77a43b098d01405690eb7f9256544cc1": { 1754 | "model_module": "@jupyter-widgets/controls", 1755 | "model_module_version": "1.5.0", 1756 | "model_name": "ToggleButtonModel", 1757 | "state": { 1758 | "description": "Stop", 1759 | "layout": "IPY_MODEL_5ec351197a1c442a8fa816d034b1eef6", 1760 | "style": "IPY_MODEL_f9ed9f912ac848a1a61cccea6d4c20c3", 1761 | "value": true 1762 | } 1763 | }, 1764 | "7b0edd69218248ec89c22a9b29960928": { 1765 | "model_module": "@jupyter-widgets/base", 1766 | "model_module_version": "1.2.0", 1767 | "model_name": "LayoutModel", 1768 | "state": {} 1769 | }, 1770 | "7d63afec39bb49df9edf2873be48ac04": { 1771 | "model_module": "@jupyter-widgets/controls", 1772 | "model_module_version": "1.5.0", 1773 | "model_name": "ButtonStyleModel", 1774 | "state": {} 1775 | }, 1776 | "7e5dc995c0d54dc88ffba21751e34fd0": { 1777 | "model_module": "@jupyter-widgets/controls", 1778 | "model_module_version": "1.5.0", 1779 | "model_name": "ButtonStyleModel", 1780 | "state": {} 1781 | }, 1782 | "7fc76b30f0904d1ab285f634f82d7054": { 1783 | "model_module": "@jupyter-widgets/controls", 1784 | "model_module_version": "1.5.0", 1785 | "model_name": "DescriptionStyleModel", 1786 | "state": { 1787 | "description_width": "" 1788 | } 1789 | }, 1790 | "86fd6e4196864369a5e361e09e227412": { 1791 | "model_module": "@jupyter-widgets/controls", 1792 | "model_module_version": "1.5.0", 1793 | "model_name": "ButtonStyleModel", 1794 | "state": {} 1795 | }, 1796 | "892de2da73f84062be6382bed68d98e9": { 1797 | "model_module": "@jupyter-widgets/controls", 1798 | "model_module_version": "1.5.0", 1799 | "model_name": "HBoxModel", 1800 | "state": { 1801 | "children": [ 1802 | "IPY_MODEL_77480c26779c420390eabd1bbd64cbee", 1803 | "IPY_MODEL_16c7c2a79a4a4203be047ae7aeee19fa" 1804 | ], 1805 | "layout": "IPY_MODEL_c65da4d48410402ca720e41ea2b1a532" 1806 | } 1807 | }, 1808 | "a6c7fc4e429c464e8fca3294d830542a": { 1809 | "model_module": "@jupyter-widgets/base", 1810 | "model_module_version": "1.2.0", 1811 | "model_name": "LayoutModel", 1812 | "state": {} 1813 | }, 1814 | "a9d684453fac4de8a1da6b5678a9263d": { 1815 | "model_module": "@jupyter-widgets/controls", 1816 | "model_module_version": "1.5.0", 1817 | "model_name": "HBoxModel", 1818 | "state": { 1819 | "children": [ 1820 | "IPY_MODEL_adf8151b53c0458db8a2931959f9851c", 1821 | "IPY_MODEL_6cb680fde00f4a6e8c0fb454c76857d3" 1822 | ], 1823 | "layout": "IPY_MODEL_6c0e7d0a22a144458689ec0d86788548" 1824 | } 1825 | }, 1826 | "aba427d2152e4e5b95f68cd5fa6b869a": { 1827 | "model_module": "@jupyter-widgets/base", 1828 | "model_module_version": "1.2.0", 1829 | "model_name": "LayoutModel", 1830 | "state": {} 1831 | }, 1832 | "ac4c2b3e307640bdb74f11ec3cf0dafd": { 1833 | "model_module": "@jupyter-widgets/controls", 1834 | "model_module_version": "1.5.0", 1835 | "model_name": "CheckboxModel", 1836 | "state": { 1837 | "description": "Downsampling/Upsampling", 1838 | "disabled": false, 1839 | "layout": "IPY_MODEL_ccebf79f7b6b4954afc304a9a913fe0b", 1840 | "style": "IPY_MODEL_5795130576114428a9f5f86ee4aa8c80", 1841 | "value": false 1842 | } 1843 | }, 1844 | "adf8151b53c0458db8a2931959f9851c": { 1845 | "model_module": "@jupyter-widgets/controls", 1846 | "model_module_version": "1.5.0", 1847 | "model_name": "ButtonModel", 1848 | "state": { 1849 | "description": "Start", 1850 | "layout": "IPY_MODEL_c8e686b7f1fd41fb950f6c64c28d1e38", 1851 | "style": "IPY_MODEL_20f35183b9e74a438f97507b3d10929a" 1852 | } 1853 | }, 1854 | "aed5c18ec1e44b1cb9c1c8a1164530bc": { 1855 | "model_module": "@jupyter-widgets/controls", 1856 | "model_module_version": "1.5.0", 1857 | "model_name": "DescriptionStyleModel", 1858 | "state": { 1859 | "description_width": "" 1860 | } 1861 | }, 1862 | "b40a35cef38e4048b6a2d8149ff7e069": { 1863 | "model_module": "@jupyter-widgets/base", 1864 | "model_module_version": "1.2.0", 1865 | "model_name": "LayoutModel", 1866 | "state": {} 1867 | }, 1868 | "b5d3845cf20e497ea0bddab2ce24c089": { 1869 | "model_module": "@jupyter-widgets/controls", 1870 | "model_module_version": "1.5.0", 1871 | "model_name": "DescriptionStyleModel", 1872 | "state": { 1873 | "description_width": "" 1874 | } 1875 | }, 1876 | "b71122422f634440ba716e8c5537e52d": { 1877 | "model_module": "@jupyter-widgets/controls", 1878 | "model_module_version": "1.5.0", 1879 | "model_name": "CheckboxModel", 1880 | "state": { 1881 | "description": "Downsampling/Upsampling", 1882 | "disabled": false, 1883 | "layout": "IPY_MODEL_c9f9cd5507994921a16488b925690ec8", 1884 | "style": "IPY_MODEL_e3d4389b65684b879575d18283ac20f2", 1885 | "value": false 1886 | } 1887 | }, 1888 | "bd80f1c63a2b4a25900e5e5763317b7a": { 1889 | "model_module": "@jupyter-widgets/controls", 1890 | "model_module_version": "1.5.0", 1891 | "model_name": "DescriptionStyleModel", 1892 | "state": { 1893 | "description_width": "" 1894 | } 1895 | }, 1896 | "c1d5efb6eefa4af38df3245d97590b3a": { 1897 | "model_module": "@jupyter-widgets/controls", 1898 | "model_module_version": "1.5.0", 1899 | "model_name": "DescriptionStyleModel", 1900 | "state": { 1901 | "description_width": "" 1902 | } 1903 | }, 1904 | "c5267597c945478f959c375f44a4d1a7": { 1905 | "model_module": "@jupyter-widgets/controls", 1906 | "model_module_version": "1.5.0", 1907 | "model_name": "ToggleButtonModel", 1908 | "state": { 1909 | "description": "Stop", 1910 | "layout": "IPY_MODEL_6341affae71049aba97ec2ad0ff9583d", 1911 | "style": "IPY_MODEL_c1d5efb6eefa4af38df3245d97590b3a", 1912 | "value": true 1913 | } 1914 | }, 1915 | "c65da4d48410402ca720e41ea2b1a532": { 1916 | "model_module": "@jupyter-widgets/base", 1917 | "model_module_version": "1.2.0", 1918 | "model_name": "LayoutModel", 1919 | "state": {} 1920 | }, 1921 | "c8e686b7f1fd41fb950f6c64c28d1e38": { 1922 | "model_module": "@jupyter-widgets/base", 1923 | "model_module_version": "1.2.0", 1924 | "model_name": "LayoutModel", 1925 | "state": {} 1926 | }, 1927 | "c9f9cd5507994921a16488b925690ec8": { 1928 | "model_module": "@jupyter-widgets/base", 1929 | "model_module_version": "1.2.0", 1930 | "model_name": "LayoutModel", 1931 | "state": {} 1932 | }, 1933 | "ccebf79f7b6b4954afc304a9a913fe0b": { 1934 | "model_module": "@jupyter-widgets/base", 1935 | "model_module_version": "1.2.0", 1936 | "model_name": "LayoutModel", 1937 | "state": {} 1938 | }, 1939 | "d58265f7549a4e979a3c65b9bd5d76a5": { 1940 | "model_module": "@jupyter-widgets/controls", 1941 | "model_module_version": "1.5.0", 1942 | "model_name": "ButtonModel", 1943 | "state": { 1944 | "description": "Start", 1945 | "disabled": true, 1946 | "layout": "IPY_MODEL_0b0c58e6c93a41799e09f406dbdefde6", 1947 | "style": "IPY_MODEL_7e5dc995c0d54dc88ffba21751e34fd0" 1948 | } 1949 | }, 1950 | "d869cf27021149409370838cc26ee878": { 1951 | "model_module": "@jupyter-widgets/base", 1952 | "model_module_version": "1.2.0", 1953 | "model_name": "LayoutModel", 1954 | "state": {} 1955 | }, 1956 | "dc8d5864ac8d4bb38cee8d043d030237": { 1957 | "model_module": "@jupyter-widgets/base", 1958 | "model_module_version": "1.2.0", 1959 | "model_name": "LayoutModel", 1960 | "state": {} 1961 | }, 1962 | "de5153ef26c14561bb728c1e74b51aac": { 1963 | "model_module": "@jupyter-widgets/base", 1964 | "model_module_version": "1.2.0", 1965 | "model_name": "LayoutModel", 1966 | "state": {} 1967 | }, 1968 | "e2f6054e0fe24c10ac5c95a2b687f1ca": { 1969 | "model_module": "@jupyter-widgets/controls", 1970 | "model_module_version": "1.5.0", 1971 | "model_name": "ButtonModel", 1972 | "state": { 1973 | "description": "Start", 1974 | "layout": "IPY_MODEL_dc8d5864ac8d4bb38cee8d043d030237", 1975 | "style": "IPY_MODEL_6d9b43798e7642019c6888b869c409a7" 1976 | } 1977 | }, 1978 | "e35d3e4323234d9287de5cd69a13219c": { 1979 | "model_module": "@jupyter-widgets/controls", 1980 | "model_module_version": "1.5.0", 1981 | "model_name": "ButtonStyleModel", 1982 | "state": {} 1983 | }, 1984 | "e3d4389b65684b879575d18283ac20f2": { 1985 | "model_module": "@jupyter-widgets/controls", 1986 | "model_module_version": "1.5.0", 1987 | "model_name": "DescriptionStyleModel", 1988 | "state": { 1989 | "description_width": "" 1990 | } 1991 | }, 1992 | "e3db17127dba4e609008d860b5cf05c5": { 1993 | "model_module": "@jupyter-widgets/controls", 1994 | "model_module_version": "1.5.0", 1995 | "model_name": "CheckboxModel", 1996 | "state": { 1997 | "description": "LP Filters", 1998 | "disabled": false, 1999 | "layout": "IPY_MODEL_3276b4539f7144b6a21869875e9c4914", 2000 | "style": "IPY_MODEL_fbee3d37ce574d8da66ca40eea646dfc", 2001 | "value": false 2002 | } 2003 | }, 2004 | "e8e1025d1bb44a08a500c0d3b8718796": { 2005 | "model_module": "@jupyter-widgets/controls", 2006 | "model_module_version": "1.5.0", 2007 | "model_name": "ButtonModel", 2008 | "state": { 2009 | "description": "Start", 2010 | "layout": "IPY_MODEL_0b3040b1b58e4b53a4509d1a39fd031d", 2011 | "style": "IPY_MODEL_e35d3e4323234d9287de5cd69a13219c" 2012 | } 2013 | }, 2014 | "f3b755ac64314b4c901f9ecb32965fd6": { 2015 | "model_module": "@jupyter-widgets/base", 2016 | "model_module_version": "1.2.0", 2017 | "model_name": "LayoutModel", 2018 | "state": {} 2019 | }, 2020 | "f61da7386157426ca81a202ffe23e162": { 2021 | "model_module": "@jupyter-widgets/controls", 2022 | "model_module_version": "1.5.0", 2023 | "model_name": "ButtonModel", 2024 | "state": { 2025 | "description": "Start", 2026 | "disabled": true, 2027 | "layout": "IPY_MODEL_f3b755ac64314b4c901f9ecb32965fd6", 2028 | "style": "IPY_MODEL_86fd6e4196864369a5e361e09e227412" 2029 | } 2030 | }, 2031 | "f9ed9f912ac848a1a61cccea6d4c20c3": { 2032 | "model_module": "@jupyter-widgets/controls", 2033 | "model_module_version": "1.5.0", 2034 | "model_name": "DescriptionStyleModel", 2035 | "state": { 2036 | "description_width": "" 2037 | } 2038 | }, 2039 | "fb8ae2a4374c451eb7d78b16edcca16a": { 2040 | "model_module": "@jupyter-widgets/controls", 2041 | "model_module_version": "1.5.0", 2042 | "model_name": "ToggleButtonModel", 2043 | "state": { 2044 | "description": "Stop", 2045 | "layout": "IPY_MODEL_aba427d2152e4e5b95f68cd5fa6b869a", 2046 | "style": "IPY_MODEL_435a7872da0d4c41be05e35d3d9570aa" 2047 | } 2048 | }, 2049 | "fbee3d37ce574d8da66ca40eea646dfc": { 2050 | "model_module": "@jupyter-widgets/controls", 2051 | "model_module_version": "1.5.0", 2052 | "model_name": "DescriptionStyleModel", 2053 | "state": { 2054 | "description_width": "" 2055 | } 2056 | } 2057 | }, 2058 | "version_major": 2, 2059 | "version_minor": 0 2060 | } 2061 | } 2062 | }, 2063 | "nbformat": 4, 2064 | "nbformat_minor": 2 2065 | } 2066 | --------------------------------------------------------------------------------