Showing the changes to python (1 of 1 file). Show all
Unified · Split
| @@ -1,12 +1,19 @@ | ||
| 1 | 1 | #! /usr/bin/env python |
| 2 | 2 | |
| 3 | −from numpy.testing import TestCase, assert_equal, assert_almost_equal | |
| 3 | +from numpy.testing import TestCase, assert_equal, assert_array_less | |
| 4 | 4 | from aubio import fvec, cvec, pvoc, float_type |
| 5 | 5 | from numpy import array, shape |
| 6 | 6 | from numpy.random import random |
| 7 | 7 | import numpy as np |
| 8 | 8 | |
| 9 | −precision = 4 | |
| 9 | +max_sq_error = 1.e-12 | |
| 10 | + | |
| 11 | +def create_sine(hop_s, freq, samplerate): | |
| 12 | + t = np.arange(hop_s).astype(float_type) | |
| 13 | + return np.sin( 2. * np.pi * t * freq / samplerate) | |
| 14 | + | |
| 15 | +def create_noise(hop_s): | |
| 16 | + return np.random.rand(hop_s).astype(float_type) * 2. - 1. | |
| 10 | 17 | |
| 11 | 18 | class aubio_pvoc_test_case(TestCase): |
| 12 | 19 | """ pvoc object test case """ |
| @@ -44,28 +51,45 @@ class aubio_pvoc_test_case(TestCase): · 31 unmodified lines | ||
| 44 | 51 | hop_s = 1024 |
| 45 | 52 | ratio = 8 |
| 46 | 53 | freq = 445; samplerate = 22050 |
| 47 | − sigin = np.sin( 2. * np.pi * np.arange(hop_s).astype(float_type) * freq / samplerate) | |
| 48 | − r2 = self.reconstruction( sigin, hop_s, ratio) | |
| 49 | − error = ((r2 - sigin)**2).mean() | |
| 50 | − self.assertLessEqual(error , 1.e-3) | |
| 54 | + sigin = create_sine(hop_s, freq, samplerate) | |
| 55 | + self.reconstruction( sigin, hop_s, ratio) | |
| 51 | 56 | |
| 52 | 57 | def test_resynth_8_steps(self): |
| 53 | 58 | """ check the resynthesis of is correct with 87.5% overlap """ |
| 54 | 59 | hop_s = 1024 |
| 55 | 60 | ratio = 8 |
| 56 | − sigin = np.random.rand(hop_s).astype(float_type) * 2. - 1. | |
| 57 | − r2 = self.reconstruction( sigin, hop_s, ratio) | |
| 58 | − error = ((r2 - sigin)**2).mean() | |
| 59 | − self.assertLessEqual(error , 1.e-2) | |
| 61 | + sigin = create_noise(hop_s) | |
| 62 | + self.reconstruction(sigin, hop_s, ratio) | |
| 63 | + | |
| 64 | + def test_resynth_4_steps_sine(self): | |
| 65 | + """ check the resynthesis of is correct with 87.5% overlap """ | |
| 66 | + hop_s = 1024 | |
| 67 | + ratio = 4 | |
| 68 | + freq = 445; samplerate = 22050 | |
| 69 | + sigin = create_sine(hop_s, freq, samplerate) | |
| 70 | + self.reconstruction(sigin, hop_s, ratio) | |
| 60 | 71 | |
| 61 | 72 | def test_resynth_4_steps(self): |
| 62 | 73 | """ check the resynthesis of is correct with 75% overlap """ |
| 63 | 74 | hop_s = 1024 |
| 64 | 75 | ratio = 4 |
| 65 | − sigin = np.random.rand(hop_s).astype(float_type) * 2. - 1. | |
| 66 | − r2 = self.reconstruction( sigin, hop_s, ratio) | |
| 67 | − error = ((r2 - sigin)**2).mean() | |
| 68 | − self.assertLessEqual(error , 1.e-2) | |
| 76 | + sigin = create_noise(hop_s) | |
| 77 | + self.reconstruction(sigin, hop_s, ratio) | |
| 78 | + | |
| 79 | + def test_resynth_2_steps_sine(self): | |
| 80 | + """ check the resynthesis of is correct with 50% overlap """ | |
| 81 | + hop_s = 1024 | |
| 82 | + ratio = 2 | |
| 83 | + freq = 445; samplerate = 22050 | |
| 84 | + sigin = create_sine(hop_s, freq, samplerate) | |
| 85 | + self.reconstruction(sigin, hop_s, ratio) | |
| 86 | + | |
| 87 | + def test_resynth_2_steps(self): | |
| 88 | + """ check the resynthesis of is correct with 50% overlap """ | |
| 89 | + hop_s = 1024 | |
| 90 | + ratio = 2 | |
| 91 | + sigin = create_noise(hop_s) | |
| 92 | + self.reconstruction(sigin, hop_s, ratio) | |
| 69 | 93 | |
| 70 | 94 | def reconstruction(self, sigin, hop_s, ratio): |
| 71 | 95 | buf_s = hop_s * ratio |
| @@ -74,15 +98,10 @@ class aubio_pvoc_test_case(TestCase): · 2 unmodified lines | ||
| 74 | 98 | r2 = f.rdo( f(sigin) ) |
| 75 | 99 | for i in range(1, ratio): |
| 76 | 100 | r2 = f.rdo( f(zeros) ) |
| 77 | − | |
| 78 | − # FIXME: if we don't return a copy here, test_phasevoc.py will crash | |
| 79 | − # once in a while | |
| 80 | − return np.copy(r2) | |
| 81 | − | |
| 82 | − def plot_this( self, this ): | |
| 83 | − from pylab import semilogy, show | |
| 84 | − semilogy ( this ) | |
| 85 | − show () | |
| 101 | + # compute square errors | |
| 102 | + sq_error = (r2 - sigin)**2 | |
| 103 | + # make sure all square errors are less than desired precision | |
| 104 | + assert_array_less(sq_error, max_sq_error) | |
| 86 | 105 | |
| 87 | 106 | if __name__ == '__main__': |
| 88 | 107 | from unittest import main |