[autoqueue commit] r261 - in trunk: . res

0 views
Skip to first unread message

codesite...@google.com

unread,
Mar 11, 2009, 4:57:59 AM3/11/09
to auto...@googlegroups.com
Author: this...@gmail.com
Date: Wed Mar 11 01:57:22 2009
New Revision: 261

Modified:
trunk/mirage.py
trunk/res/dct.filter
trunk/test_mirage.py

Log:
works with mirage 0.5

Modified: trunk/mirage.py
==============================================================================
--- trunk/mirage.py (original)
+++ trunk/mirage.py Wed Mar 11 01:57:22 2009
@@ -73,19 +73,26 @@
def distance(scms1, scms2, scmsconf):
val = 0.0
dim = scmsconf.get_dimension()
- covlen = (dim * dim + dim) / 2
- s1cov = scms1.cov.d
- s2icov = scms2.icov.d
- s1icov = scms1.icov.d
- s2cov = scms2.cov.d
- s1mean = scms1.mean.d
- s2mean = scms2.mean.d
+ covlen = scmsconf.get_covariance_length()
+ s1cov = scms1.cov
+ s2icov = scms2.icov
+ s1icov = scms1.icov
+ s2cov = scms2.cov
+ s1mean = scms1.mean
+ s2mean = scms2.mean

for i in range(covlen):
- val += s1cov[i] * s2icov[i] + s2cov[i] * s1icov[i]
scmsconf.aicov[i] = s1icov[i] + s2icov[i]

for i in range(dim):
+ idx = i * dim - (i * i + i) / 2
+ val += s1cov[idx + i] * s2icov[idx + i] + s2cov[idx + i] * s1icov[
+ idx + i]
+ for k in range (i+1, dim):
+ val += 2 * s1cov[idx + k] * s2icov[idx + k] + 2 * s2cov[
+ idx + k] * s1icov[idx + k];
+
+ for i in range(dim):
scmsconf.mdiff[i] = s1mean[i] - s2mean[i]

for i in range(dim):
@@ -98,7 +105,7 @@
idx += 1
tmp1 += scmsconf.aicov[idx] * scmsconf.mdiff[k]
val += tmp1 * scmsconf.mdiff[i]
- val = val/2 - scms1.cov.dim
+ val = val / 4 - scmsconf.get_dimension() / 2
return val

def gauss_jordan(a, n, b, m):
@@ -337,20 +344,6 @@
def __init__(self, rows):
super(Vector, self).__init__(rows, 1)

-class CovarianceMatrix(object):
- def __init__(self, dim_or_matrix):
- from_matrix = isinstance(dim_or_matrix, Matrix)
- if not from_matrix:
- self.dim = dim_or_matrix
- self.d = zeros([(self.dim * self.dim + self.dim) / 2])
- else:
- self.dim = dim_or_matrix.rows
- self.d = zeros([(self.dim * self.dim + self.dim) / 2])
- l = 0
- for i in range(self.dim):
- for j in range(i, dim_or_matrix.columns):
- self.d[l] = dim_or_matrix.d[i,j];
- l += 1

class Db(object):
def __init__(self, path):
@@ -507,6 +500,7 @@
neighbours1.sort()
return neighbours1

+
class Mfcc(object):
def __init__(self, winsize, srate, filters, cc):
here = os.path.dirname( __file__)
@@ -516,6 +510,18 @@
self.filterweights.load(os.path.join(
here, 'res', 'filterweights.filter'))

+ self.fwft = [[0, 0]] * self.filterweights.rows
+ for i in range(self.filterweights.rows):
+ last = 0.0
+ for j in range(self.filterweights.columns):
+ if self.filterweights.d[i, j] and last:
+ self.fwft[i][0] = j
+ elif last and not self.filterweights.d[i, j]:
+ self.fwft[i][1] = j
+ last = self.filterweights.d[i, j]
+ if last:
+ self.fwft[i][1] = self.filterweights.columns
+
def apply(self, m):
def f(x):
if x < 1.0:
@@ -526,8 +532,6 @@
t = DbgTimer()
t.start()
mel = Matrix(self.filterweights.rows, m.columns)
- mel = self.filterweights.multiply(m)
- mel.d = vf(mel.d)
mel.d = mel.d + dot(self.filterweights.d, m.d)
mel.d = vf(mel.d)

@@ -539,25 +543,6 @@
except MatrixDimensionMismatchException:
raise MfccFailedException

-def scms_factory(mfcc):
- t = DbgTimer()
- t.start()
- s = Scms()
- s.mean = mfcc.mean()
- full_cov = mfcc.covariance(s.mean)
-
- s.cov = CovarianceMatrix(full_cov)
- for i in range(s.cov.dim):
- for j in range(i + 1, s.cov.dim):
- s.cov.d[i * s.cov.dim + j - (i * i + i)/2] *= 2
- try:
- full_icov = full_cov.inverse()
- s.icov = CovarianceMatrix(full_icov)
- except MatrixSingularException:
- raise ScmsImpossibleException
- t.stop()
- write_line("Mirage: scms created in: %s" % t.time)
- return s

def instance_from_picklestring(picklestring):
f = StringIO(picklestring)
@@ -589,14 +574,40 @@


class Scms(object):
- def __init__(self):
- self.mean = None
- self.cov = None
- self.icov = None
+ def __init__(self, dim):
+ self.mean = []
+ self.cov = []
+ self.icov = []
+ self.dim = dim
+ self.sym_dim = (dim * dim + dim) / 2


-class Mir(object):
+def scms_factory(mfcc):
+ t = DbgTimer()
+ t.start()
+
+ m = mfcc.mean()
+
+ c = mfcc.covariance(m)
+
+ try:
+ ic = c.inverse()
+ except MatrixSingularException:
+ raise ScmsImpossibleException
+
+ dim = m.rows
+ s = Scms(dim)
+ for i in range(dim):
+ s.mean.append(m.d[i])
+ for j in range(i, dim):
+ s.cov.append(c.d[i, j])
+ s.icov.append(ic.d[i, j])
+ t.stop()
+ write_line("Mirage: scms created in: %s" % t.time)
+ return s

+
+class Mir(object):
def __init__(self):
self.samplingrate = 22050
self.windowsize = 1024

Modified: trunk/res/dct.filter
==============================================================================
Binary files. No diff available.

Modified: trunk/test_mirage.py
==============================================================================
--- trunk/test_mirage.py (original)
+++ trunk/test_mirage.py Wed Mar 11 01:57:22 2009
@@ -1,7 +1,7 @@
import sqlite3
from numpy import array, zeros
from nose.tools import assert_equals
-from mirage import Mir, CovarianceMatrix, Matrix, Vector, Db,
ScmsConfiguration
+from mirage import Mir, Matrix, Vector, Db, ScmsConfiguration
from mirage import distance
from decimal import Decimal, getcontext

@@ -17,11 +17,6 @@
scmses = [scms, scms2, scms3, scms4, scms5]

class TestMir(object):
- def test_covariance_matrix(self):
- cov = CovarianceMatrix(10)
- assert_equals(cov.dim, 10)
- assert_equals(list(cov.d), list(zeros([(10 * 10 + 10) / 2])))
-
def test_matrix(self):
getcontext().prec = 6
mat = Matrix(8, 5)
@@ -38,7 +33,7 @@
0.833333333333, 1.0, 1.16666666667, 1.33333333333, 1.5,
0.857142857143, 1.0, 1.14285714286, 1.28571428571,
1.42857142857,
0.875, 1.0, 1.125, 1.25, 1.375]])
-
+
def test_multiply(self):
getcontext().prec = 6
mat = Matrix(8, 5)
@@ -49,7 +44,7 @@
for i in range(mat2.rows):
for j in range(mat2.columns):
mat2.d[i, j] = j / (i + 1.0)
-
+
mat3 = mat.multiply(mat2)
assert_equals(
[decimize(t) for t in list(mat3.d.flatten())],
@@ -62,57 +57,37 @@
0.0, 2.34523809524, 4.69047619048, 7.03571428571,
0.0, 2.3375, 4.675, 7.0125]])

- def test_covariance_matrix2(self):
- getcontext().prec = 11
- mat = Matrix(8, 5)
- for i in range(mat.rows):
- for j in range(mat.columns):
- mat.d[i, j] = (i + j) / (i + 1.0)
- mat2 = Matrix(5, 4)
- for i in range(mat2.rows):
- for j in range(mat2.columns):
- mat2.d[i, j] = j / (i + 1.0)
- mat3 = mat.multiply(mat2)
- cov2 = CovarianceMatrix(mat3)
- assert_equals(cov2.dim, 8)
- assert_equals(
- [decimize(t) for t in list(cov2.d)][:10],
- [decimize(t) for t in [
- 0.0, 2.71666666667, 5.43333333333, 8.15, 2.5, 5.0, 7.5,
- 4.85555555556, 7.28333333333, 7.175]]
- )
-
def test_analysis(self):
c = ScmsConfiguration(20)

assert_equals(0, int(distance(scms, scms, c)))
- assert_equals(67, int(distance(scms, scms2, c)))
- assert_equals(43, int(distance(scms, scms3, c)))
- assert_equals(113, int(distance(scms, scms4, c)))
- assert_equals(80, int(distance(scms, scms5, c)))
+ assert_equals(70, int(distance(scms, scms2, c)))
+ assert_equals(49, int(distance(scms, scms3, c)))
+ assert_equals(69, int(distance(scms, scms4, c)))
+ assert_equals(235, int(distance(scms, scms5, c)))

- assert_equals(67, int(distance(scms2, scms, c)))
+ assert_equals(70, int(distance(scms2, scms, c)))
assert_equals(0, int(distance(scms2, scms2, c)))
- assert_equals(27, int(distance(scms2, scms3, c)))
- assert_equals(88, int(distance(scms2, scms4, c)))
- assert_equals(60, int(distance(scms2, scms5, c)))
+ assert_equals(16, int(distance(scms2, scms3, c)))
+ assert_equals(59, int(distance(scms2, scms4, c)))
+ assert_equals(124, int(distance(scms2, scms5, c)))

- assert_equals(43, int(distance(scms3, scms, c)))
- assert_equals(27, int(distance(scms3, scms2, c)))
+ assert_equals(49, int(distance(scms3, scms, c)))
+ assert_equals(16, int(distance(scms3, scms2, c)))
assert_equals(0, int(distance(scms3, scms3, c)))
- assert_equals(86, int(distance(scms3, scms4, c)))
- assert_equals(63, int(distance(scms3, scms5, c)))
+ assert_equals(49, int(distance(scms3, scms4, c)))
+ assert_equals(84, int(distance(scms3, scms5, c)))

- assert_equals(113, int(distance(scms4, scms, c)))
- assert_equals(88, int(distance(scms4, scms2, c)))
- assert_equals(86, int(distance(scms4, scms3, c)))
+ assert_equals(69, int(distance(scms4, scms, c)))
+ assert_equals(59, int(distance(scms4, scms2, c)))
+ assert_equals(49, int(distance(scms4, scms3, c)))
assert_equals(0, int(distance(scms4, scms4, c)))
- assert_equals(58, int(distance(scms4, scms5, c)))
+ assert_equals(124, int(distance(scms4, scms5, c)))

- assert_equals(80, int(distance(scms5, scms, c)))
- assert_equals(60, int(distance(scms5, scms2, c)))
- assert_equals(63, int(distance(scms5, scms3, c)))
- assert_equals(58, int(distance(scms5, scms4, c)))
+ assert_equals(235, int(distance(scms5, scms, c)))
+ assert_equals(124, int(distance(scms5, scms2, c)))
+ assert_equals(84, int(distance(scms5, scms3, c)))
+ assert_equals(124, int(distance(scms5, scms4, c)))
assert_equals(0, int(distance(scms5, scms5, c)))

def test_add_track(self):
@@ -131,7 +106,7 @@
scms3_db = testdb.get_track('3')
scms4_db = testdb.get_track('4')
c = ScmsConfiguration(20)
- assert_equals(58, int(distance(scms3_db, scms4_db, c)))
+ assert_equals(124, int(distance(scms3_db, scms4_db, c)))

def test_add_and_compare(self):
testdb = Db(":memory:")
@@ -142,9 +117,9 @@
distances = [
row for row in connection.execute("SELECT * FROM distance")]
assert_equals(
- [(1, 0, 67616), (2, 1, 27516), (2, 0, 43465), (3, 2, 86641),
- (3, 1, 88447), (3, 0, 113935), (4, 3, 58181), (4, 1, 60046),
- (4, 2, 63272), (4, 0, 80452)],
+ [(1, 0, 70338), (2, 1, 16563), (2, 0, 49060), (3, 2, 49652),
+ (3, 1, 59503), (3, 0, 69551), (4, 2, 84223), (4, 1, 124312),
+ (4, 3, 124450), (4, 0, 235246)],
distances)

def test_get_neighbours(self):
@@ -153,6 +128,6 @@
for dummy in testdb.add_and_compare(i, testscms):
pass
assert_equals(
- [(43465, 2), (67616, 1), (80452, 4), (113935, 3)],
+ [(49060, 2), (69551, 3), (70338, 1), (235246, 4)],
[a for a in testdb.get_neighbours(0)])
-
+

Reply all
Reply to author
Forward
0 new messages