zdenˇek pr˚uˇsa acoustics research ... - gnu octave...
TRANSCRIPT
Zdenek Prusa
Acoustics Research Institute, Austrian Academy of Sciences
OctConf 2013, June 25, 2013
Overview
Wavelets in the LTFAT.
Real-time audio block-stream processing framework.
Example of a real-time audio wavelet processing inOctave.
Zdenek Prusa http://ltfat.sourceforge.net/
2/ 23
Introduction
LTFAT is a modern Octave/Matlab toolbox for doingtime/frequency, wavelet and frame analysis.
Started in 2004 by Peter L. Søndergaard. Version 1.0 released in2011.
Its purposes are:
To support teaching and learning in Fourier analysis, harmonicanalysis and digital signal processing.To provide a tested and documented toolbox of such qualitythat it can be used for new scientific developments.As a method for engineers and researchers to quickly try out amethod/transform.As a method for researchers to push their discoveries to alarger audience.
Zdenek Prusa http://ltfat.sourceforge.net/
3/ 23
Time-frequency representation example
Zdenek Prusa http://ltfat.sourceforge.net/
4/ 23
Features
Basic Fourier analysis and signal processing, FIR windows
Discrete Gabor transform and its inverse
Time-frequency bases: Wilson and WMDCT
Filterbanks and non-stationary Gabor systems
Reassignment (sharpening) and instantaneous frequencyestimation
Non-linear analysis and synthesis methods
Backend in C linked to OCT interfaces.
(NEW) Discrete Wavelet Transform
(NEW) Block-stream processing framework
. . .
Zdenek Prusa http://ltfat.sourceforge.net/
5/ 23
Wavelets in the LTFAT overview
fwt – Discrete Wavelet Transform (Mallat’s algorithm)
ufwt – Undecimated fwt (A-trous algorithm).
wfbt/uwfbt – (Undecimated) Arbitrary tree-shaped Waveletfilterbank.
wpfbt/uwpfbt – (Undecimated) Arbitrary tree-shapedWavelet filterbank.
wpbest – Best basis selection from bases derived from thewavelet packet.
fwt2 – Basic 2D Discrete wavelet transform.
Wavelet filters library.
Plotting routines.
Zdenek Prusa http://ltfat.sourceforge.net/
6/ 23
DWT as a matrix multiplication
c = f
f = c
Daubechies 4, 3 scale levels, N = 64
Zdenek Prusa http://ltfat.sourceforge.net/
7/ 23
DWT as a filterbank
f b
h4
h3
h2
h1 ↓8
↓8
↓4
↓2
f
g4
g3
g2
g1c1
c2
c3
c4
↑8
↑8
↑4
↑2
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10
0.5
1
1.5
2
2.5
3
|G4(ω)|
|G3(ω)|
|G2(ω)|
|G1(ω)|
ω[π · rad] →
|G(ω
)|→
0 5 10 15 20 25 30 35 40 45 50−0.6
−0.4
−0.2
0
0.2
0.4
0.6
0.8
1
1.2
g4
g3
g2
g1
n →
g[n]→
Daubechies 4, 3 scale levels.
To ufwtZdenek Prusa http://ltfat.sourceforge.net/
8/ 23
Fast Wavelet Transform
↓2
↓2
↓2
↓2
↓2
↓2
f b
h1
h2
b
h1
h2
h1
h2
b
c4
c3
c1
c2
f
g1
g2c4
g1
g2c3
g1
g2
c1
c2
↑2
↑2
↑2
↑2
↑2
↑2
Mallat’s fast algorithm, h1/h2 (g1/g2) – lowpass/highpass filters.
Zdenek Prusa http://ltfat.sourceforge.net/
9/ 23
Fast Wavelet Transform – fwt/ifwt
Example:
c = fwt(f,’db4’,3);
fhat = ifwt(c,’db4’,3,size(f,1));
Other filterbank constructions with different number of filters inthe basic filterbank. Offers more convenient filters.
db4, 3 levels
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10
0.5
1
1.5
2
2.5
3
dden2, 3 levels
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10
0.5
1
1.5
2
2.5
3
Zdenek Prusa http://ltfat.sourceforge.net/
10/ 23
Fast Undecimated Wavelet Transform
f b
h1
h2
b
↑2h1
↑2h2
↑4h1
↑4h2
b
f
g1
g2c4
↑2g1
↑2g2c3
↑4g1
↑4g2
c1
c2
A-trous algorithm, h1/h2 (g1/g2) – lowpass/highpass filters, ↑N –upsampling by factor of N
Zdenek Prusa http://ltfat.sourceforge.net/
11/ 23
Undec. Wavelet Transform – ufwt/iufwt
c = f , f = c
Example:
c = ufwt(f,’db4’,3);
fhat = iufwt(c,’db4’,3);
Highly redundant, shift-independent transform.
To fwt
Zdenek Prusa http://ltfat.sourceforge.net/
12/ 23
Arbitrary Wavelet filterbank – wfbt/iwfbt
↓2
↓2
↓2
↓2
↓2
↓2
↓2
↓2
↓2
↓2
↓2
↓2
↓2
↓2f b
h1
h2
b
h1
h2
h1
h2
b
h1
h2
b
h1
h2
b
h1
h2
b
h1
h2
b
c1
c2
c3
c4
c5
c6
c7
c8
Example of a full 3 level tree:
c = wfbt(f,{’db4’,3,’full’});
fhat = iwfbt(c,{’db4’,3,’full’},size(f,1));
Zdenek Prusa http://ltfat.sourceforge.net/
13/ 23
Arbitrary Wavelet filterbank – wfbt/iwfbt
c = f , f = c
Allows flexible frequency covering via splitting further thehigh-pass output.
db4, 3 levels
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10
0.5
1
1.5
2
2.5
3
Zdenek Prusa http://ltfat.sourceforge.net/
14/ 23
Wavelet Packet filterbank – wpfbt/iwpfbt
c = f , f = c
Example of a full 3 level tree:
c = wpfbt(f,{’db4’,3,’full’});
fhat = iwpfbt(c,{’db4’,3,’full’},size(f,1));
Zdenek Prusa http://ltfat.sourceforge.net/
15/ 23
Best subtree – wpbest
↓2
↓2
↓2
↓2
↓2
↓2
↓2
↓2
↓2
↓2
f b
h1
h2
b
h1
h2
h1
h2
b
h1
h2
b
h1
h2
b
c1
c2
c3
c4
c5
c6
Example
[c,wt] = wpbest(f,’db4’,3,’entropy’,’shannon’);
fhat = iwfbt(c,wt,size(f,1));
Zdenek Prusa http://ltfat.sourceforge.net/
16/ 23
Best subtree – wpbest
c = f , f = c
db4, 3 levels
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10
0.5
1
1.5
2
2.5
3
Zdenek Prusa http://ltfat.sourceforge.net/
17/ 23
Real-time audio processing in LTFAT
Simple framework for a non-blocking real-time audioprocessing and playback.
Based on Playrec (http://www.playrec.co.uk/) MEXinterface to Portaudio library(http://www.portaudio.com/).
Takes input from a sound file or any audio input (microphone,line-in) and routes to any output device (speakers, line-out)allowing processing sample blocks on-the-fly.
Zdenek Prusa http://ltfat.sourceforge.net/
18/ 23
Real-time audio processing in LTFAT cont.
Example:
block(’gspi.wav’); % Input is a wav file.
% block(’playrec’); % Input is an microphone.
% Setup GUI control panel containing one slider.
p = blockpanel({’GdB’,’Gain’,-20,20,0,21});
while p.flag
% Obtain parameter from a GUI
gain = 10^(p.getParam(’GdB’)/20);
% Read 1024 samples from the input
f = blockread(1024);
% Enqueue samples to be played
blockplay(f*gain);
end
p.close();
SegDWT (Prusa, Rajmic 2012)
Avoiding block-artifacts after coefficient manipulation.
x[n]
y [n]
90 275
14
16
2117
21
15
17
45
22
11
11
6
2
46
23
11
11
7
2
46
23
12
12
9
3
47
24
12
12
7
2
0 183 369
16
0 90 275183 36921
Currently only fwt/ifwt routines are supported. The plan is toextend the idea of SegDWT to more filterbank types.
Zdenek Prusa http://ltfat.sourceforge.net/
20/ 23
SegDWT example
block(’gspi.wav’); % block(’playrec’);
F = frame(’fwt’,’sym8’,4);
% Setup GUI control panel containing two sliders.
p = blockpanel({{’GdB’,’Gain’,-20,20,0,21},...
{’Thr’,’Treshold’,0,0.1,0,1000}});
while p.flag
% Get the current slider value.
gain = 10^(p.getParam(’GdB’)/20);
thres = p.getParam(’Thr’);
% Read 1024 samples of the input and process.
f = blockread(1024);
c = blockana(F, f*gain);
c = thresh(c,thres,’soft’);
fhat = blocksyn(F, c, size(f,1));
% Enqueue the samples to be played.
blockplay(fhat);
end
p.close();
Wavelet-related plans
Long standing inclusion request from YAWTBhttp://sites.uclouvain.be/ispgroup/yawtb/.
(Discretized) Continuous Wavelet Transfom – CWT (Morlet,Mexican hat, . . . ).Directional ”framed” 2D Wavelet Transform.Wavelet transform on a sphere.
General Wavelets frames.
Making LTFAT a proper Octave package ;)
Zdenek Prusa http://ltfat.sourceforge.net/
22/ 23