Risolto un problema con la convoluzione che impediva a molti filtri di

Leonardo Robol [2010-03-03 15:35]
Risolto un problema con la convoluzione che impediva a molti filtri di
funzionare.
Filename
Filtering/Filtering.py
Filtering/Splitting.py
diff --git a/Filtering/Filtering.py b/Filtering/Filtering.py
index b7ad706..d02827a 100644
--- a/Filtering/Filtering.py
+++ b/Filtering/Filtering.py
@@ -25,8 +25,11 @@ class FIR(AbstractFilter):

     def __call__(self, samples):
         """Apply the FIR to samples"""
-        return convolve (self.coefficients,
-                         samples, 'same')
+        # Per tronchiamo brutalmente la convoluzione, anche se
+        # questo vuol dire perdere dei samples finali. d'altronde
+        # sembra essere l'unico modo per prevere i delay.
+        sz = len(samples)
+        return convolve (self.coefficients, samples)[0:sz]


     def GetResponse(self):
@@ -188,7 +191,7 @@ class FilterBank():
             # Sfortunatamente questo ci rovinerà tutta l'ultima parte del
             # segnale, ma per ora non vedo una soluzione comoda.
             print "Rolling! Yepeee!"
-            low = roll(low, -1)
+            low = roll(low, -1 * self.length)

         return low

diff --git a/Filtering/Splitting.py b/Filtering/Splitting.py
index d017313..80168a8 100755
--- a/Filtering/Splitting.py
+++ b/Filtering/Splitting.py
@@ -17,8 +17,8 @@ class SplittingExample():

         # Scelgo la filterbank da utilizzare
         # filterBank = Filtering.HaarFilterBank
-        filterBank = Filtering.DaubechiesFilterBank
-        # filterBank = Filtering.StrangFilterBank
+        # filterBank = Filtering.DaubechiesFilterBank
+        filterBank = Filtering.StrangFilterBank
         filterBank.SetDepth(8)

         samples = self.LoadSamples ("sunny.pcm")
@@ -29,10 +29,10 @@ class SplittingExample():
             self.Show (wavelets)


-
-        rebuilt = filterBank.Rebuild (wavelets)
-        Output ("||rebuilt - samples|| = %f" % norm(rebuilt - samples[0:len(rebuilt)]))
-        self.WriteSamples(rebuilt, "rebuilt.pcm")
+        if len(sys.argv) > 1 and sys.argv[1] == "rebuild":
+            rebuilt = filterBank.Rebuild (wavelets)
+            Output ("||rebuilt - samples|| = %f" % norm(rebuilt - samples[0:len(rebuilt)]))
+            self.WriteSamples(rebuilt, "rebuilt.pcm")


     def LoadSamples(self, filename = "sunny.pcm"):
ViewGit