using DSP, PyPlot, Polynomials, FFTW, Statistics, Suppressor
sc = include("WFbyCKMSplus_scripts.jl")
at = include("../AnalysisToolbox.jl")
mrb = include("../WFMR_bs.jl")
mr = include("../WFMR.jl")
whf = include("../WhiteningFilters.jl")
util = include("../Utils.jl")
N = 10^4; D = 10^3; p = 2; q = 0
e1 = randn(N+D)
e2 = randn(N+D)
Zeros1 = 2*rand(p) .- 1
Zeros2 = 2*rand(p) .- 1
Poles = 2*rand(q) .- 1;
l1 = coeffs(Polynomial([1])*prod(Polynomial([1, -z]) for z in Zeros1))
l2 = coeffs(Polynomial([1])*prod(Polynomial([1, -z]) for z in Zeros2))
w = [1] #coeffs(Polynomial([1])*prod(Polynomial([1, -z]) for z in Poles))
r = 1.0
pred1 = at.ARMA_gen(; l = l1, w, r, e = e1, steps = N, discard = D);
pred2 = at.ARMA_gen(; l = l2, w, r, e = e2, steps = N, discard = D);
pred1 = reshape(pred1, 1,:)
pred2 = reshape(pred2, 1,:)
pred = [pred1; pred2]
A1 = 2*rand(10) .- 1
A2 = 2*rand(10) .- 1
f1 = coeffs(Polynomial([1])*prod(Polynomial([1, -a]) for a in A1))
f2 = coeffs(Polynomial([1])*prod(Polynomial([1, -a]) for a in A2))
f = zeros(1,2,11); f[1,1,:] = f1; f[1,2,:] = f2;
sig = at.my_filt(f,pred)
Nex = 2^13; Θ = 2pi*(0:Nex-1)/Nex;
Spred1_num = at.z_crossspect_dm(pred1,pred1;Nex, L = 1500)
Hpred1(z) = Polynomial(w)(z)/Polynomial(l1)(z)
Spred1_ana = map(z -> abs2(Hpred1(z)),exp.(im*Θ))
semilogy(Θ,Spred1_num, label = "Spred_num")
semilogy(Θ,Spred1_ana, label = "Spred_ana")
legend()
figure()
Spred2_num = at.z_crossspect_dm(pred2,pred2;Nex, L = 1500)
Hpred2(z) = Polynomial(w)(z)/Polynomial(l2)(z)
Spred2_ana = map(z -> abs2(Hpred2(z)),exp.(im*Θ))
semilogy(Θ,Spred2_num, label = "Spred_num")
semilogy(Θ,Spred2_ana, label = "Spred_ana")
legend()
Ssig_num = at.z_crossspect_dm(sig,sig;Nex)
Hsig(z) = Polynomial(f1)(z)*Hpred1(z) + Polynomial(f2)(z)*Hpred2(z)
Ssig_ana = map(z -> abs2(Hsig(z)),exp.(im*Θ))
figure()
semilogy(Θ,Ssig_num, label = "Ssig_num")
semilogy(Θ,Ssig_ana, label = "Ssig_ana")
legend()
[sig; pred]
function testdisp(h,sig,pred; vew = 90:200, f)
figure(figsize=(12,4))
title("The filters")
if f!= 0
plot(f[1,1,:],"k.-",label = "exact1")
plot(h[1,1,:],"r.:",label = "approx1")
plot(f[1,2,:],"k.-",label = "exact2")
plot(h[1,2,:],"r.:",label = "approx2")
xlabel("lag"); legend()
end
sig_hat = at.my_filt(h,pred);
vew = 90:200
res = util.TakeLook(sig,sig_hat; vew)
suptitle("A trajectory and Error over a Window")
println("MSE: ",var(res[100:end]))
end
# Benchmark
h = @timed mrb.get_wf_bs(sig,pred; M_out = 20)
tim = h.time; h = h.value
testdisp(h,sig,pred; f)
println("Time: ",tim," sec")
# Benchmark
h = @timed mr.get_wf(sig,pred; M_out = 20)
tim = h.time; h = h.value
testdisp(h,sig,pred; f)
println("Time: ",tim," sec")
# Benchmark
h = @timed sc.vector_wiener_filter_fft(sig,pred, maxit = 1)
tim = h.time; h = h.value
testdisp(h,sig,pred; f)
println("Time: ",tim," sec")
# Benchmark
h = @timed sc.vector_wiener_filter_fft(sig,pred, maxit = 2)
tim = h.time; h = h.value
testdisp(h,sig,pred; f)
println("Time: ",tim," sec")
# Benchmark
h = @timed sc.vector_wiener_filter_fft(sig,pred, maxit = 3, verb = true)
tim = h.time; h = h.value
testdisp(h,sig,pred; f)
println("Time: ",tim," sec")
# Benchmark
h = @timed sc.vector_wiener_filter_fft(sig,pred, maxit = 4, verb = true)
tim = h.time; h = h.value
testdisp(h,sig,pred; f)
println("Time: ",tim," sec")