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.
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"):