I keep all my scripts out of the way in a file in this directory.
using DSP, PyPlot, Polynomials, FFTW, Statistics
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")
As a working test case I pick the AR(2) process $y_n = 5/4y_{n-1} - 3/8y_{n-2} + e_n$ as signal to be estimated and $x_n = y_n + u_n$
N = 10^4; D = 10^3; p = 2;
e = randn(N+D)
l = [1, -5/4, 3/8]
w = [1]
r = 1.0
pred = at.ARMA_gen(;l, w, r, e, steps = N, discard = D);
A = 2*rand(10) .- 1
f = coeffs(Polynomial([1])*prod(Polynomial([1, -a]) for a in A))
sig = filt(f,pred)
Nex = 2^12; Θ = 2pi*(0:Nex-1)/Nex;
Spred_num = at.z_crossspect_dm(pred,pred;Nex, L = 150)
Hpred(z) = Polynomial(w)(z)/Polynomial(l)(z)
Spred_ana = map(z -> abs2(Hpred(z)),exp.(im*Θ))
semilogy(Θ,Spred_num, label = "Spred_num")
semilogy(Θ,Spred_ana, label = "Spred_ana")
legend()
Ssig_num = at.z_crossspect_dm(sig,sig;Nex)
Hsig(z) = Polynomial(f)(z)*Hpred(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 = reshape(sig, 1,:)
pred = reshape(pred, 1,:)
[sig; pred]
sig, pred = sc.KSEdata(10^5; pred_ind = 1:1, sig_ind= 1:1, geni = 1)
[sig; pred]
# Benchmark
h = mrb.get_wf_bs(sig,pred; M_out = 20)
# plot(f,"k.-",label = "exact")
plot(h[:],"r.:",label = "approx")
xlabel("lag")
sig_hat = at.my_filt(h,pred);
vew = 90:200
res = util.TakeLook(sig,sig_hat; vew)
var(res[100:end])
Now using old CKMS
# Benchmark
h = mr.get_wf(sig,pred; M_out = 20)
# plot(f,"k.-",label = "exact")
plot(h[:],"r.:",label = "approx")
xlabel("lag")
sig_hat = at.my_filt(h,pred);
vew = 90:2000
res = util.TakeLook(sig,sig_hat; vew)
var(res[100:end])
Now we look at new CKMS.
h_num_fft = sc.vector_wiener_filter_fft(sig,pred, maxit = 2)
# plot(f,"k.-",label = "exact")
plot(h_num_fft[:],"r.:",label = "approx")
xlabel("lag")
sig_hat = at.my_filt(h_num_fft,pred);
res = util.TakeLook(sig,sig_hat; vew)
var(res[100:end])