Skip to content

Commit c565f01

Browse files
committed
new tests
1 parent 53bafc0 commit c565f01

File tree

6 files changed

+250
-91
lines changed

6 files changed

+250
-91
lines changed

experiments/bars.jl

Lines changed: 0 additions & 66 deletions
This file was deleted.

experiments/interrupted_chirp.jl

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
2+
# Input sound
3+
4+
rate = 16000.
5+
duration = 2
6+
samples = round(Int,duration*rate)
7+
8+
x1 = [ samples/7 <= t <= 2.5*samples/7 ? sin(2000*2*π*t/rate+1000*t/rate*2*π*t/rate) : 0. for t in 1:samples ]
9+
x2= [ 3*samples/7 <= t <= 4.5*samples/7 ? sin(2000*2*π*t/rate+1000*t/rate*2*π*t/rate) : 0. for t in 1:samples ]
10+
11+
x = x1+x2
12+
13+
## Short time Fourier transform
14+
15+
m =stft(x, 500, 450, fs = rate, window = hanning)
16+
17+
18+
## smoothing
19+
20+
using ImageFiltering
21+
22+
λ=2
23+
24+
M = STFT(0.01.*ComplexF64.(imfilter(abs.(m.stft),ImageFiltering.Kernel.gaussian((λ,2λ)))), m.freq, m.time, m.width)
25+
26+
27+
## Lift
28+
29+
Lm = lift(M; νMin=-0.5, νMax=1.5, N=100)
30+
31+
## WC evolution
32+
33+
χ = 20
34+
35+
α = 55
36+
β = 1
37+
γ = 55
38+
39+
τ = χ * step(time(Lm))
40+
41+
b = .05
42+
43+
k = Kern(normalize(freq(Lm)), slopes(Lm), KernParams(τ, b, 1e-6));
44+
45+
W = wc_delay(Lm, α, β, γ, K=k,τdx = χ) |> project
46+
47+
## Save results
48+
49+
try
50+
mkpath("interrupted-chirp-results")
51+
catch
52+
end
53+
54+
cd("interrupted-chirp-results")
55+
56+
save_result(M, W, α, β, γ, χ)
57+
58+
cd("..")

experiments/intersecting_chirps.jl

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# Input sound
2+
3+
rate = 16000.
4+
duration = 2
5+
samples = round(Int,duration*rate)
6+
7+
x1 = [ samples/7 <= t <= 6*samples/14 ? sin(2000*2*π*t/rate + 1000*t/rate*2*π*t/rate) : 0. for t in 1:samples ]
8+
x2 = [ samples/7 <= t <= 6*samples/14 ? sin(6000*2*π*t/rate - 1000*t/rate*2*π*t/rate) : 0. for t in 1:samples ]
9+
10+
11+
x = x1+x2
12+
13+
## Short time Fourier transform
14+
15+
m =stft(x, 500, 450, fs = rate, window = hanning)
16+
17+
18+
## smoothing
19+
20+
using ImageFiltering
21+
22+
λ=2
23+
24+
M = STFT(0.01.*ComplexF64.(imfilter(abs.(m.stft),ImageFiltering.Kernel.gaussian((λ,2λ)))), m.freq, m.time, m.width)
25+
26+
27+
## Lift
28+
29+
Lm = lift(M; νMin=-1, νMax=1, N=100)
30+
31+
## WC evolution
32+
33+
χ = 20
34+
35+
α = 53
36+
β = 1
37+
γ = 55
38+
39+
τ = χ * step(time(Lm))
40+
41+
b = .01
42+
43+
k = Kern(normalize(freq(Lm)), slopes(Lm), KernParams(τ, b, 1e-6));
44+
45+
W = wc_delay(Lm, α, β, γ, K=k,τdx = χ) |> project
46+
47+
## Save results
48+
49+
try
50+
mkpath("intersecting-chirps-results")
51+
catch
52+
end
53+
54+
cd("intersecting-chirps-results")
55+
56+
save_result(M, W, α, β, γ, χ)
57+
58+
cd("..")

experiments/linear_chirp.jl

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,55 @@
1-
# Test with linear chirp
1+
# Input sound
22

33
rate = 16000.
44
duration = 2
55
samples = round(Int,duration*rate)
6-
y = [ t <= 8*samples/14 ? sin(1000*2*π*t/rate+1000*t/rate*2*π*t/rate) : 0. for t in 1:samples ]
76

8-
mkpath("linear-chirp-results")
9-
cd("linear-chirp-results")
10-
wavwrite(y, "linear_chirp.wav", Fs = rate)
7+
x = [ samples/7 <= t <= 8*samples/14 ? sin(2000*2*π*t/rate+1000*t/rate*2*π*t/rate) : 0. for t in 1:samples ]
8+
9+
10+
## Short time Fourier transform
11+
12+
m =stft(x, 500, 450, fs = rate, window = hanning)
13+
14+
15+
## smoothing
16+
17+
using ImageFiltering
18+
19+
λ=2
1120

12-
@time SS = stft(y, 500, 450, fs = rate)
21+
M = STFT(0.01.*ComplexF64.(imfilter(abs.(m.stft),ImageFiltering.Kernel.gaussian((λ,2λ)))), m.freq, m.time, m.width)
22+
1323

14-
@time Lm = lift(SS, threshold = 10, N=30)
24+
## Lift
1525

16-
KK=20
17-
AA=110
18-
BB=50
19-
CC=250
26+
Lm = lift(M; νMin=-0.5, νMax=1.5, N=100)
2027

28+
## WC evolution
2129

22-
τ = KK*step(time(Lm))
23-
@time k = kernel_computation(normalize(freq(Lm)), slopes(Lm), τ, n = 20);
30+
χ = 20
2431

25-
@time W = wc_delay(Lm, AA, BB, CC, K=k)
32+
α = 55
33+
β = 1
34+
γ = 55
35+
36+
τ = χ * step(time(Lm))
37+
38+
b = .05
39+
40+
k = Kern(normalize(freq(Lm)), slopes(Lm), KernParams(τ, b, 1e-6));
41+
42+
W = wc_delay(Lm, α, β, γ, K=k,τdx = χ) |> project
43+
44+
## Save results
45+
46+
try
47+
mkpath("linear-chirp-results")
48+
catch
49+
end
50+
51+
cd("linear-chirp-results")
2652

27-
save_result(W, AA, BB, CC, KK)
53+
save_result(M, W, α, β, γ, χ)
2854

55+
cd("..")

experiments/nonlinear_chirp.jl

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
2+
# Input sound
3+
4+
rate = 16000.
5+
duration = 2
6+
samples = round(Int,duration*rate)
7+
8+
x = [ samples/7 <= t <= 8*samples/14 ? sin(3000*2*π*t/rate+2pi*150*sin(2*pi*t/rate)) : 0. for t in 1:samples ]
9+
10+
## Short time Fourier transform
11+
12+
m =stft(x, 500, 450, fs = rate, window = hanning)
13+
14+
15+
## smoothing
16+
17+
using ImageFiltering
18+
19+
λ=2
20+
21+
M = STFT(0.01.*ComplexF64.(imfilter(abs.(m.stft),ImageFiltering.Kernel.gaussian((λ,2λ)))), m.freq, m.time, m.width)
22+
23+
24+
## Lift
25+
26+
Lm = lift(M; νMin=-1.5, νMax=1.5, N=100)
27+
28+
## WC evolution
29+
30+
χ = 20
31+
32+
α = 53
33+
β = 1
34+
γ = 55
35+
36+
τ = χ * step(time(Lm))
37+
38+
b = .2
39+
40+
k = Kern(normalize(freq(Lm)), slopes(Lm), KernParams(τ, b, 1e-6));
41+
42+
W = wc_delay(Lm, α, β, γ, K=k,τdx = χ) |> project
43+
44+
## Save results
45+
46+
try
47+
mkpath("nonlinear-chirp-results")
48+
catch
49+
end
50+
51+
cd("nonlinear-chirp-results")
52+
53+
save_result(M, W, α, β, γ, χ)
54+
55+
cd("..")
56+

experiments/run_experiments.jl

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,51 @@
11
using Dates
22

3-
function save_result(m, α, β, γ, τdx; rate = 16000.)
3+
function save_result(m_in, m_out, α, β, γ, τdx; rate = 16000.)
44
str = string(Dates.format(now(),"yyyy-mm-dd"), " at ", Dates.format(now(),"HH"),"h",Dates.format(now(),"MM")," - a=",α,", b=",β,", g=",γ,", tdx=",τdx)
55

6-
save(string(str," - STFT.png"), show_stft(m))
7-
save(string(str," - Wave.png"), show_istft(m))
6+
save(string(str," - input - STFT.png"), show_stft(m_in))
7+
save(string(str," - input - Wave.png"), show_istft(m_in))
88

9-
sound = istft(project(m))
10-
sound = 2*(sound .- minimum(sound))/(maximum(sound)-minimum(sound)).-1
11-
wavwrite(sound, string(str," - sound.wav"), Fs = rate)
9+
save(string(str," - output - STFT.png"), show_stft(m_out))
10+
save(string(str," - output - Wave.png"), show_istft(m_out))
11+
12+
normalize(sound) = 2*(sound .- minimum(sound))/(maximum(sound)-minimum(sound)).-1
13+
14+
sound_in = istft(m_in) |> normalize
15+
wavwrite(sound_in, string(str," - input - sound.wav"), Fs = rate)
16+
17+
sound_out = istft(m_out) |> normalize
18+
wavwrite(sound_out, string(str," - output - sound.wav"), Fs = rate)
1219
end
1320

1421
using WAV
22+
using DSP.Windows
1523

1624
import Pkg
1725
Pkg.activate("../../WCA1")
1826
using WCA1
1927

20-
# There is some kind of bug, for which we need to
21-
# precompile `WCA1` before loading `Images`
2228
using Images
2329

24-
# include("linear_chirp.jl")
25-
include("bars.jl")
30+
# TESTS
31+
32+
try
33+
mkpath("results")
34+
catch
35+
end
36+
37+
cd("results")
38+
39+
println("=== LINEAR CHIRP ===")
40+
include("linear_chirp.jl")
41+
42+
println("=== INTERRUPTED CHIRP ===")
43+
include("interrupted_chirp.jl")
44+
45+
println("=== INTERSECTING CHIRPS ===")
46+
include("intersecting_chirps.jl")
47+
48+
println("=== NON-LINEAR CHIRP ===")
49+
include("nonlinear_chirp.jl")
50+
51+
cd("..")

0 commit comments

Comments
 (0)