### A Pluto.jl notebook ### # v1.0.3 using Markdown using InteractiveUtils # This Pluto notebook uses @bind for interactivity. When running this notebook outside of Pluto, the following 'mock version' of @bind gives bound variables a default value (instead of an error). macro bind(def, element) #! format: off return quote local iv = try Base.loaded_modules[Base.PkgId(Base.UUID("6e696c72-6542-2067-7265-42206c756150"), "AbstractPlutoDingetjes")].Bonds.initial_value catch; b -> missing; end local el = $(esc(element)) global $(esc(def)) = Core.applicable(Base.get, el) ? Base.get(el) : iv(el) el end #! format: on end # ╔═╡ acaedbac-4402-11ed-3b9c-17a6ab36557c begin #using Pkg; Pkg.update() using Plots using Plots.PlotMeasures # for the `mm` unit (or write Plots.mm) using LaTeXStrings using DSP using FFTW using Statistics using Printf # increase font sizes in all plots by 20% Plots.resetfontsizes() Plots.scalefontsizes(1.2) # for plotting time-domain discrete sequences stem(x, y; kw...) = plot(x, y; legend=false, line=:stem, linecolor=:blue, marker=:circle, markercolor=:blue, markerstrokecolor=:blue, kw...) stem(y; kw...) = stem(0:length(y)-1, y; kw...) # for plotting frequency-domain discrete sequences stemf(x, y; kw...) = plot(x, y; legend=false, line=:stem, linecolor=:blue, marker=:circle, markercolor=:white, markerstrokecolor=:blue, kw...) stemf(y; kw...) = stemf(0:length(y)÷2-1, y[1:length(y)÷2]; kw...) # for plotting FFT input/outputs fftplot(f, x; kw...) = plot(circshift(f, length(f)÷2), circshift(x, length(x)÷2); label=false, kw...); md"(Some setup code and definitions)" end # ╔═╡ c41a9e82-4163-4bdf-a2fa-0376546a1e9b md""" Julia versions of some of the numerical demonstrations from Digital Signal Processing (DSP, L314) Michaelmas 2026. Markus Kuhn """ # ╔═╡ 4630de8d-5de1-4e63-95cd-a53bcd671878 md""" # Analog electronics (slide 4) An analog RLC band-pass filter, consisting of resistor ``R`` in series with a parallel ``LC`` circuit: ```math \frac{U_\mathrm{in}-U_\mathrm{out}}{R} = \frac1L\int_{-\infty}^t U_\mathrm{out}\,\mathrm{d}\tau + C\frac{\mathrm{d}U_\mathrm{out}}{\mathrm{d}t} ``` """ # ╔═╡ b95c0a44-7649-46ca-9229-27d4e176d7d5 md""" (slide 32) An analog ``RC`` filter: ```math \frac{U_\mathrm{in}-U_\mathrm{out}}{R} = C\frac{\mathrm{d}U_\mathrm{out}}{\mathrm{d}t} ``` """ # ╔═╡ 26a371f9-a77a-4528-a62b-c020f18c1d89 md""" # Sinusoidal sequences (slide 11) """ # ╔═╡ 20efaf3a-7a12-4c12-8623-5d66cbc799f6 md""" Try $f=1000, 2000, 3000, 4000, 5000$ Hz. Try negative $f$. Try sine instead of cosine. Try adding phase offsets $\varphi$ of $\pm\frac\pi4$, $\pm\frac\pi2$, and $\pm\pi$. """ # ╔═╡ 07d3cb1b-01a8-441a-b731-83519c9ae94e let x = [ 0, 0, 0, -4, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0, -3, -3, -3, 0, 0, 0, 0, 0, 1, -4, 0, 4, 3, -1, 2, -3, -1, 0, 2, -4, -2, 1, 0, 0, 0, 3, -3, 3, -3, 3, -3, 3, -3, 3, -3, 0, 0, 0, 0, 0, 0 ]; y = filt([1, 1, 1, 1]/4, [1], x) plot([x y], linecolor=[:blue :red], markercolor=[:blue :red], markershape=[:x :circle], markerstrokewidth=3, size = (800, 250), xticks=[], yticks=[0], label=["x" "y"], legend=true, ylim=[-7,7]) end # ╔═╡ dfdfb0a0-a157-4053-90b8-016b54101419 md""" # Discrete Time Fourier Transform """ # ╔═╡ 9a7d108d-b8c3-483d-ae59-46c659dc000a md""" dtft_plot(x::AbstractVector, n1::Int; show_complex=0, show_dft=0) Plot a finite-support discrete sequence `x`, as well as its Discrete-Time Fourier Transform. Vector `x` contains the sequence elements. By default the middle element of an odd-length sequence or the first element of an even-length sequence is $x_0$ (i.e., at index $0$). Optional parameter `n1` can be used to set the sequence index of `x[1]`. """ # ╔═╡ 016e53cc-919e-4aa1-88b3-95b560869b3b function dtft_plot(x::AbstractVector, n1=iseven(length(x)) ? 0 : -div(length(x)-1, 2); show_complex=0, show_dft=0, kwargs...) l = length(x) n = range(n1, length=l) nfft = nextpow(2, max(l, 1024)) x2 = zeros(typeof(x[begin] + 0.0), nfft) for i in eachindex(x) x2[mod(n1+i-1, nfft) + 1] = x[i]; end f = circshift(fft(x2), div(nfft,2)) td = plot(n,x; legend=false, line=:stem, marker=:circle) w = range(-pi, step=2pi/nfft, length=nfft) if show_complex > 0 fd = plot(w, [real(f) imag(f)]; label=["DTFT real" "DTFT imag"], kwargs...) else fd = plot(w, abs.(f); label="DTFT mag", kwargs...) end xticks!(fd, (pi.*(-1.0:0.25:1.0),[L"-\pi", L"-0.75\pi", L"-\pi/2", L"-\pi/4", L"0", L"\pi/4", L"\pi/2", L"0.75\pi", L"\pi"])) if show_complex>0; ylims!((-2.2,7.2)); end if show_dft > 0 wn = 2pi*(0:l-1)/l # DFT frequencies (positive) wn = mod.(wn .+ pi, 2pi) .- pi dft = fft(x) .* cis.(-n1*wn) # timeshift DFT output to n1 if show_complex > 0 plot!(wn, [real(dft) imag(dft)]; line=:stem, marker=:circle, label=["DFT real" "DFT imag"]) else plot!(wn, abs.(dft); line=:stem, marker=:circle, label="DFT mag") end end plot(td, fd; layout=(1, 2), size=(800,300)) end; # ╔═╡ 0dee1763-9ead-4693-b45d-e6e9367825a4 dtft_plot([0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0]; show_complex=1) # ╔═╡ 8eeec730-65fb-4c56-b506-ed566e38a0ae dtft_plot([0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0]; show_complex=1) # ╔═╡ d06ffc45-2fa3-4d15-a63d-5d4ed8c1536b dtft_plot([0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0]; show_complex=1) # ╔═╡ 63493e61-48fb-479f-973c-8dcf0ebf5097 md""" ## Windowing """ # ╔═╡ 66ae2ff3-afd0-4753-99d6-56c4ca437482 let n = 255 padding = 8 label = ["rect" "triangle" "Hann" "Hamming"] b = [Windows.rect(n) Windows.triang(n) Windows.hanning(n) Windows.hamming(n)] b = [zeros(padding, size(b,2)); b; zeros(padding, size(b,2))] t = 0-padding/(n-1):1/(n-1):1+padding/(n-1) plot(t, b; label, xticks=[]) end # ╔═╡ eb46da1f-5350-4d34-8f52-9fec32bc9024 dtft_plot(cos.(2pi*(0:15)/16*4); show_dft=1, ylims=(-0.1, 8.5)) # ╔═╡ 398e8a64-b950-48aa-888b-32ad90161da8 dtft_plot(cos.(2pi*(0:15)/16*4.2); show_dft=1, ylims=(-0.1, 8.5)) # ╔═╡ b0f80781-8ad2-4218-8042-358230c5e52f dtft_plot(cos.(2pi*(0:15)/16*4.2) .* Windows.hamming(16); show_dft=1, ylims=(-0.1, 8.5)) # ╔═╡ 6514ae0b-2958-4291-a27c-22694c50d579 dtft_plot(Windows.rect(33); yaxis=:log, ylims=(0.02,40)) # ╔═╡ 95373cb6-945f-451e-998d-17c296423df9 dtft_plot(Windows.triang(33); yaxis=:log, ylims=(0.02,40)) # ╔═╡ fa56b2b3-5d56-4ea0-83ba-79a40171fa82 dtft_plot(Windows.hanning(33); yaxis=:log, ylims=(0.02,40)) # ╔═╡ 8d963f3d-6291-4463-b028-aeab74be175b dtft_plot(Windows.hamming(33); yaxis=:log, ylims=(0.02,40)) # ╔═╡ 86cbe90a-77f5-4665-8f89-ea69d7a0af5d md""" # IIR example: a single-pole filter The $z$-transform of the impulse response of an IIR filter is a rational function, which defines a complex-valued surface over the complex plane. The DTFT can be read off there on the unit circle. """ # ╔═╡ 190fc757-6c83-4f10-aadd-7a0a5582c97c let b = [0.8]; a = [1, -0.2] H(z) = sum(b .* z.^-(eachindex(b).-1)) ./ sum(a .* z.^-(eachindex(a).-1)) r = nextfloat(-1.0):0.05:1.0 # nextfloat() avoids hitting 0 or 0.2 exactly z = r .+ (1im * r') u = cis.(2pi * (0:1/64:1)) plot(real(u), imag(u), zeros(length(u)), label="unit circle") scatter!([0],[0],[0], marker=:circle, label="zero"); scatter!([0],[0.2],[0], marker=:xcross, label="pole"); plot!(real(u), imag(u), abs.(H.(u)), line=:stem, label="DTFT") wireframe!(r, r, min.(abs.(H.(z)),2); camera=(50,15), xlabel="real", ylabel="imag", zlabel=L"|H(z)|", zlim=(0,2)) end # ╔═╡ b4bdd709-54f1-4ca0-999b-cc6011b29082 md""" ## Visual verification Predict the effect that an IIR filter has on a sinusoidal test signal of frequency $f$, by evaluating the $z$-transform of its impulse response on the unit circle, and compare it visually with the result of applying it using the `filt` function. """ # ╔═╡ cccbf053-7b75-4751-a407-40f846e3ef2e let n = 0:15; fs = 8000; f = 1500; x = cos.(2*pi*f*n/fs); b = [0.8]; a = [1, -0.2]; y1 = filt(b, a, x); z = exp(1im*2*pi*f/fs); H = 0.8 * z / (z-0.2); A = abs(H); theta = atan(imag(H), real(H)); y2 = A * cos.(2*pi*f*n/fs.+theta); plot(n, [x y1 y2]; color=[:blue :green :red], marker=[:cross :diamond :xcross], markersize=8, markerstrokewidth = 2, label=["x" "y (time domain)" "y (z-transform)"], ylim=(-1.1, 1.5)) end # ╔═╡ 662ba58f-ac54-40a1-8a9c-cfe3d1728ba1 md""" # How do poles affect the time domain? """ # ╔═╡ 95623aa6-b4e2-4d50-a14c-829246893747 function zeropole_plot(f::Filters.ZeroPoleGain; kw...) u = cis.(2pi * (0:1/64:1)) plot(u; aspect_ratio=:equal, size=(400, 400), label="unit circle") scatter!(real(f.z), imag(f.z); markers=:circle, markersize=6, markerstrokewidth=2, label="zeros") scatter!(real(f.p), imag(f.p); markers=:xcross, markersize=5, markerstrokewidth=4, label="poles", legend=false, kw...) end # ╔═╡ 8c31c56e-89fd-4e4f-84e0-e8f304766943 function impulse_response_plot(f) x = [1; zeros(31)] y = filt(f, x) stem(0:length(y)-1, y) end # ╔═╡ 57ed2ed3-ba8c-4048-988f-f3599226035f function filter_plot(f) zp = zeropole_plot(f) ir = impulse_response_plot(f) plot(zp, ir; size=(600,300), bottom_margin=3mm) end # ╔═╡ 164d9fd1-8835-406b-bd6f-ae04f262f6e0 filter_plot(ZeroPoleGain([0.0], [0.7], 1)) # ╔═╡ 35bb671b-d314-4d8f-aa53-fdb02f72ac87 filter_plot(ZeroPoleGain([0.0], [0.9], 1)) # ╔═╡ 042ab4f1-e2db-4d06-96ea-b5f518b77de9 filter_plot(ZeroPoleGain([0.0], [1.0], 1)) # ╔═╡ 44a7ebb5-e268-47d9-9169-2bb037db4fb7 filter_plot(ZeroPoleGain([0.0], [1.1], 1)) # ╔═╡ 130e7ff3-ae1d-43d8-907d-4440ee4b0dd2 filter_plot(ZeroPoleGain([0.0, 0.0], 0.9 * cis.([-1,1] .* pi/6), 1)) # ╔═╡ 0bad950f-6def-473d-9bb0-d9e9b9cf35c7 filter_plot(ZeroPoleGain([0.0, 0.0], 1.0 * cis.([-1,1] .* pi/6), 1)) # ╔═╡ f6f299cf-36b9-438f-9389-649c46132c4a md""" # Some IIR filter design methods """ # ╔═╡ 977a6687-1ac1-4c39-b7e6-bc146a1529cd function filter2_plot(f::ZeroPoleGain) zp = zeropole_plot(f) ir = impulse_response_plot(f) H, w = freqresp(f) xticks = (pi.*(0:0.25:1.0),[L"0", L"\pi/4", L"\pi/2", L"0.75\pi", L"\pi"]) fr = plot(w, 20*log10.(abs.(H)); xticks, legend=false, ylabel="amplitude (dB)", ylims=(-50, 3)) yticks = (pi.*(-1.0:0.25:1.0),[L"-\pi", L"-0.75\pi", L"-\pi/2", L"-\pi/4", L"0", L"\pi/4", L"\pi/2", L"0.75\pi", L"\pi"]) pr = plot(w, angle.(H); xticks, yticks, legend=false, ylims=(-1,1).*pi, ylabel="phase") plot(zp, ir, fr, pr; size=(600,600)) end # ╔═╡ 992ddca1-7e69-4521-aa74-1795b88a2e45 md""" ## Butterworth filter (order 1) """ # ╔═╡ 018ec4b5-9bc0-46c9-9559-306adb2c3308 md""" ## Butterworth filter (order 5) """ # ╔═╡ 76e95a11-f0b8-4a1d-8726-5525ca4555ba md""" ## Chebyshev filter (type I) """ # ╔═╡ e19f5d17-2e25-4a0b-b59f-f8755456cf25 md""" ## Chebyshev filter (type II) """ # ╔═╡ 70cdad35-2c3f-4b21-b743-2029bfc6622b md""" ## Elliptic filter """ # ╔═╡ 016b2e85-fa42-438d-8867-f5ae2dfc20ca md""" ## Notch filter """ # ╔═╡ 443b6594-c50f-429e-a21e-a145808986ba md""" ## Peak filter """ # ╔═╡ 8621a483-4db2-4e29-91f6-fdf0a06e4966 md""" ## Window-based FIR filter (order 30, i.e. 31 taps) """ # ╔═╡ 8e1470ad-fad9-42ba-9399-c6206c27b3b1 filter2_plot(b::Vector{<:Number}) = filter2_plot(convert(ZeroPoleGain, PolynomialRatio(b, [1]))) # ╔═╡ 0d5d9934-3ae2-4371-9d0d-d9d02b75b09a filter2_plot(digitalfilter(Lowpass(0.3), Butterworth(1))) # ╔═╡ 8aa9d2e3-d445-438b-8491-d87d14eeef66 filter2_plot(digitalfilter(Lowpass(0.3), Butterworth(5))) # ╔═╡ 4feeb297-c9d4-4f91-9f03-d18c1a9610f3 filter2_plot(digitalfilter(Lowpass(0.5), Chebyshev1(5, 3))) # ╔═╡ 85f77adf-9a23-42ef-bd6f-75f5c0bf9f40 filter2_plot(digitalfilter(Lowpass(0.5), Chebyshev2(5, 20))) # ╔═╡ cf75f102-a156-490e-af6b-db5d8414f2dd filter2_plot(digitalfilter(Lowpass(0.5), Elliptic(5, 3, 20))) # ╔═╡ 519ccc83-8c52-40be-99a7-fb45e5540a01 filter2_plot(ZeroPoleGain(cis.(0.25pi.*[-1, 1]), 0.9*cis.(0.25pi.*[-1, 1]), 1)) # ╔═╡ 3bdc232d-22b9-415c-a082-29c10d129c9a filter2_plot(ZeroPoleGain([-1, 1], 0.9*cis.(0.25pi.*[-1, 1]), 1e-1)) # ╔═╡ 0ae75fa3-6333-44ac-a9c7-01bbe802138c filter2_plot(digitalfilter(Lowpass(0.25), FIRWindow(hamming(31)))) # ╔═╡ e8a16d5e-a5b9-4bc1-a9f2-a6e526115402 md""" ## Comparison of required filter order """ # ╔═╡ 2eba9819-9cc2-4dad-8c4d-967795678e2e # A Butterworth low-pass filter with a transition band from 0.4*fs/2 to 0.5*fs/2 # with at most 1 dB ripple in the pass band and at least 30 dB attenuation # in the stop band requires filter order 13 Filters.buttord(0.4, 0.5, 1, 30; domain=:z) # ╔═╡ d9217802-6293-4d32-a71a-90c3b843129f # Chebyshev 1/2 filters can do the same in order 6 Filters.cheb1ord(0.4, 0.5, 1, 30; domain=:z) # ╔═╡ 575012fd-7225-4ed9-930e-42b84cfa98c5 Filters.cheb2ord(0.4, 0.5, 1, 30; domain=:z) # ╔═╡ b8218263-2c23-4fc3-a6aa-e6c5e64c63ba # Elliptic can do the same in order 4 Filters.ellipord(0.4, 0.5, 1, 30; domain=:z) # ╔═╡ 131cd5e2-e190-424d-bc57-8f57ae72571b # An FIR filter needs 29 taps, i.e. order 28 (28 taps reach only 29.4 dB) filter2_plot(remez(29, [(0, 0.4) => 1, (0.5, 1.0) => 0]; Hz = 2)) # ╔═╡ 98086cbd-ce41-457c-add4-fe85867df85b md""" ## Covert spread-spectrum communication demo """ # ╔═╡ 772d4275-51c2-476d-a3fe-2906de0a3753 let n = randn(10000) a = 0.3; l = 1000 pattern = rand((-a, a), l) b0 = [zeros(2000); pattern; zeros(7000)] b1 = [zeros(4000); -pattern; zeros(5000)] r = n .+ b0 .+ b1 f1 = plot([n b0 b1 r] .- [0 -3 -4 -7]; label = ["n" "b0" "b1" "r"], yticks=[]) x = conv(r,reverse(pattern)) # or: x = xcorr(r,pattern) f2 = plot(x; label="xcorr") xlims!.((f1, f2), 1, length(n)+l) plot(f1, f2; layout=(2,1)) end # ╔═╡ 39483220-98b2-4404-b660-97d8d2dfd368 md""" ## Covert spread-spectrum radar demo """ # ╔═╡ 02056c94-7e84-424d-9b70-25e3edd7bdcd let x = randn(10000) h = [0, 0, 0.4, 0, 0, 0.3, 0, 0, 0.2, 0, 0]; y = conv(x, h); f1 = plot(1:length(x), x; label = "x beam") plot!(f1, 1:length(y), y .- 5, label = "y return", yticks=[]); c = conv(reverse(x),y); lags = -20:20 f2 = stem(lags, c[(length(c)-length(h))÷2 .+ lags .+ 1]); plot(f1, f2; layout=(2,1)) end # ╔═╡ 0c350605-fa57-4488-a074-dc7e92f1442b md""" ## Spectral estimation """ # ╔═╡ da2607e6-e7a2-4ad4-b28f-380035c4097e let n = 64 # block length m = 1000 # blocks averaged k = 1:(n*m) x = randn(n*m) + sin.(2*pi*k * 8.00 ./ n) + sin.(2*pi*k * 14.32 ./ n) xx = reshape(x, n, m) s1 = abs.(fft(x[1:n])/n) s2 = abs.(fft(x[1:8n])/8n) s3 = mean(abs.(fft(xx, 1)/n),dims=2) s4 = abs.(mean(fft(xx, 1)/n,dims=2)) plots = stemf.([s1,s2,s3,s4]; ylims=(0, 0.75), yticks = [0]); plot(plots...) end # ╔═╡ 2b63af4a-344b-4e8c-9f44-462c5d031fd7 md"## Raised-cosine filter" # ╔═╡ 14adc351-3e39-4b4a-81ca-3df154d109f5 function raised_cosine(f, T, beta) if abs(f) <= (1-beta)/(2T) return T elseif abs(f) <= (1+beta)/(2T) return 0.5T*(1.0 + cos(pi*T/beta*(abs(f)-(1-beta)/(2T)))) else return 0.0 end end; # ╔═╡ 1e0dd8f8-0bfd-4692-b8ac-4ebfc6c67e7f @bind beta_slider html"Choose roll-off factor β: " # ╔═╡ bbcd399b-b3d5-4a0a-b516-d5d8bc4316ac let n = 2048 # FFT block size beta = beta_slider/100 # roll-off factor if ismissing(beta) ; beta = 0.5 ; end d = 16 fn = n ÷ d # Nyquist frequency index 1/(2T) / (fs/n) fs = 1 T = n/(2*fn*fs) Ts = d÷2 # = T/fs symbol period in samples nn = vcat(0:(n÷2-1),(-n÷2):-1) f = (fs/n).*nn X = raised_cosine.(f, T, beta) # X = sqrt.(X) # root raised cosine p1 = fftplot(f, X; title=@sprintf("β = %0.2f", beta), gridalpha=0.3, xlim=[-3/d,3/d], xticks=([-1/d, 1/d], ["−1/(2T)", "1/(2T)"]), yticks=([0.0, 0.5T, T], ["0", "T/2", "T"])) x = ifft(X) # xx = zero(x) ; for i = -4:4; xx += circshift(x, Ts*i); end; x = xx p2 = fftplot(nn, real.(x); xlim=[-4d, 4d], ylim=[-0.25, 1.25], xticks=(-4d:d÷2:4d, ["$(i)T" for i=-d÷2:d÷2]), gridalpha=0.3) plot(p1, p2; layout=(2,1)) end # ╔═╡ 0e38d1bf-765c-4687-a385-33db2a67d78d # Lookup table to map slide framenumberlabel to slide number, generated with # perl -nE 'BEGIN{print("Dict("),}END{print(")")}/^\\newlabel\{(.+?)\}\{\{(\d+)\}\{/ && print "\"$1\"=>$2,"' dsp-slides.aux begin slide=Dict("ref:impulse-sequence"=>10,"weberfechner"=>14,"lti-avr"=>19,"lti-exp"=>20,"lti-acc"=>21,"lti-diff"=>22,"ref:direct-form1"=>25,"convolution<1>"=>26,"convolution"=>26,"convolution<2>"=>27,"convolution<3>"=>27,"convolution<4>"=>28,"convolution<5>"=>28,"stars"=>31,"hz"=>38,"diracprop"=>48,"am"=>53,"ex:dac"=>7,"ex:sampling"=>10,"deconv"=>86,"deconv-noise"=>88,"ex:dtmf"=>14,"ztransform"=>118,"ex:ztrans"=>16,"iqdown"=>166,"fmdemo1"=>19,"dct2bases"=>218,) nothing end # ╔═╡ 006e7bf0-8423-4399-9545-7a943effd13e md""" # $M$-point moving average system (slide $(slide["lti-avr"])) """ # ╔═╡ ba7277c4-8750-4239-98cc-d3f9f42ddd21 # @fig "exampleplot" plot(sin) # Saves the plot in file "$_figdir/exampleplot.pdf" if the global # string constant _figdir is defined, for example if run with # julia --project -e 'const _figdir="nbfigs";include("dsp-notebook.jl")' # If the global variable _onlypath is defined, only save the figure # if the resulting saved file path matches _onlypath. begin macro fig(filename, plot) return :( let p, path if @isdefined(_figdir) path = joinpath(_figdir, $filename * ".pdf") if !@isdefined(_onlypath) || _onlypath == path p = $plot; savefig(p, path) p end else $plot end end ) end nothing end # ╔═╡ 85ed177a-5cc8-40d9-b79c-6ae4154b5ab8 @fig "analog" let # circuit parameters L = 1.0 C = 1.0 R = 5.0 Uin = 1.0 # frequency-domain response ω = 1e-10:0.01:4 Uout = Uin * 1.0im ./ (R * (1 ./ (ω*L) - ω*C) .+ 1.0im) pf = plot(ω, abs.(Uout); legend=false, color=:black, xticks = ([1/sqrt(L*C)], [L"1/\sqrt{LC}"]), yticks = ([Uin], [L"U_\mathrm{in}"]), xlabel = L"\omega\qquad(2\pi f)", ylabel = L"$|U_\mathrm{out}|$") # time-domain response x=zeros(500) x[30] = 1 x[200:350] .= 1 f = digitalfilter(Bandpass(0.1, 0.12), Butterworth(1)) pt = plot([x.+0.3,filt(f, x)]; legend=false, color=:black, label=[L"U_\mathrm{in}" L"U_\mathrm{out}"], xlabel=L"t", xticks=false, yticks=([0, 0.3],[L"U_\mathrm{out}",L"U_\mathrm{in}"])) pt[1][:yaxis][:tickfontsize] = pt[1][:yaxis][:guidefontsize] plot(pf, pt; layout=(2,1), size=0.6.*(600,2*400), left_margin=3mm) end # ╔═╡ 92c16957-3e16-42eb-8c18-ee01e71c72c1 @fig "analog2" let C=1.0 R=1.0 Uin=1.0 # frequency-domain response ω = 1e-10:0.01:4; Uout = Uin * 1im ./ sqrt.(1 .+ (ω * R * C).^2) pf = plot(ω, abs.(Uout); legend=false, color=:black, xticks = ([1/(R*C)], [L"1/RC"]), yticks = ([Uin], [L"U_\mathrm{in}"]), xlabel = L"\omega\qquad(2\pi f)", ylabel = L"$|U_\mathrm{out}|$") # time-domain response x=zeros(500) x[[30,120,140,160,170,180,190]] .= 5 x[250:400] .= 1 f = digitalfilter(Lowpass(0.02), Butterworth(1)) pt = plot([x.+1.5,filt(f, x)]; legend=false, color=:black, size=0.6.*(600,400), label=[L"U_\mathrm{in}" L"U_\mathrm{out}"], xlabel=L"t", xticks=false, yticks=([0, 1.5],[L"U_\mathrm{out}",L"U_\mathrm{in}"])) pt[1][:yaxis][:tickfontsize] = pt[1][:yaxis][:guidefontsize] pt end # ╔═╡ 624ede40-e5b5-4546-acd8-450f3283cf38 @fig "sinusoid" let n = 0:40 fs = 8000 f = 400 φ = 2π x = cos.(2π * f * n/fs .+ φ) stem(n, x) end # ╔═╡ 00000000-0000-0000-0000-000000000001 PLUTO_PROJECT_TOML_CONTENTS = """ [deps] DSP = "717857b8-e6f2-59f4-9121-6e50c889abd2" FFTW = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" [compat] DSP = "~0.8.6" FFTW = "~1.10.0" LaTeXStrings = "~1.4.1" Plots = "~1.41.7" """ # ╔═╡ 00000000-0000-0000-0000-000000000002 PLUTO_MANIFEST_TOML_CONTENTS = """ # This file is machine-generated - editing it directly is not advised julia_version = "1.10.12" manifest_format = "2.0" project_hash = "310ddbb3610f05b71cde87bd1f0f85f297140274" [[deps.AbstractFFTs]] deps = ["LinearAlgebra"] git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" version = "1.5.0" [deps.AbstractFFTs.extensions] AbstractFFTsChainRulesCoreExt = "ChainRulesCore" AbstractFFTsTestExt = "Test" [deps.AbstractFFTs.weakdeps] ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [[deps.AliasTables]] deps = ["PtrArrays", "Random"] git-tree-sha1 = "9876e1e164b144ca45e9e3198d0b689cadfed9ff" uuid = "66dad0bd-aa9a-41b7-9441-69ab47430ed8" version = "1.1.3" [[deps.ArgTools]] uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" version = "1.1.1" [[deps.Artifacts]] uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" [[deps.Base64]] uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" [[deps.Bessels]] git-tree-sha1 = "4435559dc39793d53a9e3d278e185e920b4619ef" uuid = "0e736298-9ec6-45e8-9647-e4fc86a2fe38" version = "0.2.8" [[deps.Bzip2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "1b96ea4a01afe0ea4090c5c8039690672dd13f2e" uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" version = "1.0.9+0" [[deps.Cairo_jll]] deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] git-tree-sha1 = "1fa950ebc3e37eccd51c6a8fe1f92f7d86263522" uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" version = "1.18.7+0" [[deps.ColorSchemes]] deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] git-tree-sha1 = "b0fd3f56fa442f81e0a47815c92245acfaaa4e34" uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" version = "3.31.0" [[deps.ColorTypes]] deps = ["FixedPointNumbers", "Random"] git-tree-sha1 = "67e11ee83a43eb71ddc950302c53bf33f0690dfe" uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" version = "0.12.1" [deps.ColorTypes.extensions] StyledStringsExt = "StyledStrings" [deps.ColorTypes.weakdeps] StyledStrings = "f489334b-da3d-4c2e-b8f0-e476e12c162b" [[deps.ColorVectorSpace]] deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statistics", "TensorCore"] git-tree-sha1 = "8b3b6f87ce8f65a2b4f857528fd8d70086cd72b1" uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" version = "0.11.0" weakdeps = ["SpecialFunctions"] [deps.ColorVectorSpace.extensions] SpecialFunctionsExt = "SpecialFunctions" [[deps.Colors]] deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] git-tree-sha1 = "37ea44092930b1811e666c3bc38065d7d87fcc74" uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" version = "0.13.1" [[deps.CompilerSupportLibraries_jll]] deps = ["Artifacts", "Libdl"] uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" version = "1.1.2+1" [[deps.ConstructionBase]] git-tree-sha1 = "b4b092499347b18a015186eae3042f72267106cb" uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" version = "1.6.0" [deps.ConstructionBase.extensions] ConstructionBaseIntervalSetsExt = "IntervalSets" ConstructionBaseLinearAlgebraExt = "LinearAlgebra" ConstructionBaseStaticArraysExt = "StaticArrays" [deps.ConstructionBase.weakdeps] IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" [[deps.Contour]] git-tree-sha1 = "439e35b0b36e2e5881738abc8857bd92ad6ff9a8" uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" version = "0.6.3" [[deps.DSP]] deps = ["Bessels", "FFTW", "IterTools", "LinearAlgebra", "Polynomials", "Random", "Reexport", "SpecialFunctions", "Statistics"] git-tree-sha1 = "a65cfc2999988f5ba09fc4bd8049e3ed914e5a04" uuid = "717857b8-e6f2-59f4-9121-6e50c889abd2" version = "0.8.6" [deps.DSP.extensions] OffsetArraysExt = "OffsetArrays" [deps.DSP.weakdeps] OffsetArrays = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" [[deps.DataAPI]] git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" version = "1.16.0" [[deps.DataStructures]] deps = ["OrderedCollections"] git-tree-sha1 = "b0bc6d2cad1fed8b7fd59a1551a991cb3d2809e6" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" version = "0.19.6" [[deps.Dates]] deps = ["Printf"] uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" [[deps.Dbus_jll]] deps = ["Artifacts", "Expat_jll", "JLLWrappers", "Libdl"] git-tree-sha1 = "473e9afc9cf30814eb67ffa5f2db7df82c3ad9fd" uuid = "ee1fde0b-3d02-5ea6-8484-8dfef6360eab" version = "1.16.2+0" [[deps.DelimitedFiles]] deps = ["Mmap"] git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" version = "1.9.1" [[deps.DocStringExtensions]] git-tree-sha1 = "7442a5dfe1ebb773c29cc2962a8980f47221d76c" uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" version = "0.9.5" [[deps.Downloads]] deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" version = "1.6.0" [[deps.EpollShim_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "8a4be429317c42cfae6a7fc03c31bad1970c310d" uuid = "2702e6a9-849d-5ed8-8c21-79e8b8f9ee43" version = "0.0.20230411+1" [[deps.Expat_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "2bfb1e047e2ad0a5ca94365340bde8005d637568" uuid = "2e619515-83b5-522b-bb60-26c02a35a201" version = "2.8.4+0" [[deps.FFMPEG]] deps = ["FFMPEG_jll"] git-tree-sha1 = "95ecf07c2eea562b5adbd0696af6db62c0f52560" uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" version = "0.4.5" [[deps.FFMPEG_jll]] deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libva_jll", "libvorbis_jll", "x264_jll", "x265_jll"] git-tree-sha1 = "7a58e45171b63ed4782f2d36fdee8713a469e6e0" uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" version = "8.1.2+0" [[deps.FFTW]] deps = ["AbstractFFTs", "FFTW_jll", "Libdl", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] git-tree-sha1 = "97f08406df914023af55ade2f843c39e99c5d969" uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" version = "1.10.0" [[deps.FFTW_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "6866aec60ef98e3164cd8d6855225684207e9dff" uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" version = "3.3.12+0" [[deps.FileWatching]] uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" [[deps.FixedPointNumbers]] deps = ["Random", "Statistics"] git-tree-sha1 = "59af96b98217c6ef4ae0dfe065ac7c20831d1a84" uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" version = "0.8.6" [[deps.Fontconfig_jll]] deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Zlib_jll"] git-tree-sha1 = "f85dac9a96a01087df6e3a749840015a0ca3817d" uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" version = "2.17.1+0" [[deps.Format]] git-tree-sha1 = "9c68794ef81b08086aeb32eeaf33531668d5f5fc" uuid = "1fa38f19-a742-5d3f-a2b9-30dd87b9d5f8" version = "1.3.7" [[deps.FreeType2_jll]] deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] git-tree-sha1 = "70329abc09b886fd2c5d94ad2d9527639c421e3e" uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" version = "2.14.3+1" [[deps.FriBidi_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "7a214fdac5ed5f59a22c2d9a885a16da1c74bbc7" uuid = "559328eb-81f9-559d-9380-de523a88c83c" version = "1.0.17+0" [[deps.Future]] deps = ["Random"] uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" [[deps.GLFW_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll", "libdecor_jll", "xkbcommon_jll"] git-tree-sha1 = "64bbbb7d1499297751b536dd39c58b20750ab1db" uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" version = "3.5.1+0" [[deps.GR]] deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "JSON", "Libdl", "LinearAlgebra", "Preferences", "Printf", "Qt6Wayland_jll", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "p7zip_jll"] git-tree-sha1 = "4d777f73c46b46b8b5276206059cf8a195499314" uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" version = "0.73.27" [deps.GR.extensions] IJuliaExt = "IJulia" [deps.GR.weakdeps] IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" [[deps.GR_jll]] deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "FreeType2_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Qt6Base_jll", "Zlib_jll", "libpng_jll"] git-tree-sha1 = "f8eb8f7ba13ea75083531647fc8faeda8d541f07" uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" version = "0.73.27+0" [[deps.GettextRuntime_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll"] git-tree-sha1 = "45288942190db7c5f760f59c04495064eedf9340" uuid = "b0724c58-0f36-5564-988d-3bb0596ebc4a" version = "0.22.4+0" [[deps.Ghostscript_jll]] deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Zlib_jll"] git-tree-sha1 = "38044a04637976140074d0b0621c1edf0eb531fd" uuid = "61579ee1-b43e-5ca0-a5da-69d92c66a64b" version = "9.55.1+0" [[deps.Glib_jll]] deps = ["Artifacts", "GettextRuntime_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] git-tree-sha1 = "090526e65de8f69648ac156daae153de8b56df62" uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" version = "2.88.3+0" [[deps.Graphite2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "69ffb934a5c5b7e086a0b4fee3427db2556fba6e" uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" version = "1.3.16+0" [[deps.HarfBuzz_jll]] deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll"] git-tree-sha1 = "9d9531a9cb63a9edc33836414e82a07e81710de2" uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" version = "100.14004.0+0" [[deps.IntelOpenMP_jll]] deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] git-tree-sha1 = "ec1debd61c300961f98064cfb21287613ad7f303" uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" version = "2025.2.0+0" [[deps.InteractiveUtils]] deps = ["Markdown"] uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" [[deps.IrrationalConstants]] git-tree-sha1 = "b2d91fe939cae05960e760110b328288867b5758" uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" version = "0.2.6" [[deps.IterTools]] git-tree-sha1 = "42d5f897009e7ff2cf88db414a389e5ed1bdd023" uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" version = "1.10.0" [[deps.JLFzf]] deps = ["REPL", "Random", "fzf_jll"] git-tree-sha1 = "82f7acdc599b65e0f8ccd270ffa1467c21cb647b" uuid = "1019f520-868f-41f5-a6de-eb00f4b6a39c" version = "0.1.11" [[deps.JLLWrappers]] deps = ["Artifacts", "Preferences"] git-tree-sha1 = "7204148362dafe5fe6a273f855b8ccbe4df8173e" uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" version = "1.8.0" [[deps.JSON]] deps = ["Dates", "Logging", "Parsers", "PrecompileTools", "StructUtils", "UUIDs", "Unicode"] git-tree-sha1 = "88352712893ec50bee3680605891eaf0e9ed6368" uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" version = "1.8.0" [deps.JSON.extensions] JSONArrowExt = ["ArrowTypes"] [deps.JSON.weakdeps] ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" [[deps.JpegTurbo_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "037babc10853eeb8e585418922246cb97b8e5b74" uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" version = "3.2.0+1" [[deps.LAME_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "059aabebaa7c82ccb853dd4a0ee9d17796f7e1bc" uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" version = "3.100.3+0" [[deps.LERC_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "39bca05343661c347aae0bca57a5994a0bf4f08d" uuid = "88015f11-f218-50d7-93a8-a6af411a945d" version = "4.2.0+0" [[deps.LLVMOpenMP_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "b7970cef8ae1c990ba0c09cd8bdc1145e006632f" uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" version = "22.1.7+0" [[deps.LaTeXStrings]] git-tree-sha1 = "f88f3ccef05a6a72a0cf0ed417c8fd68530f4ab2" uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" version = "1.4.1" [[deps.Latexify]] deps = ["Format", "Ghostscript_jll", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "OrderedCollections", "Requires"] git-tree-sha1 = "df7566479bd64f20bd16b09960145e70160ffb3b" uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" version = "0.16.12" [deps.Latexify.extensions] DataFramesExt = "DataFrames" SparseArraysExt = "SparseArrays" SymEngineExt = "SymEngine" TectonicExt = "tectonic_jll" [deps.Latexify.weakdeps] DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" SymEngine = "123dc426-2d89-5057-bbad-38513e3affd8" tectonic_jll = "d7dd28d6-a5e6-559c-9131-7eb760cdacc5" [[deps.LazyArtifacts]] deps = ["Artifacts", "Pkg"] uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" [[deps.LibCURL]] deps = ["LibCURL_jll", "MozillaCACerts_jll"] uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" version = "0.6.4" [[deps.LibCURL_jll]] deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" version = "8.4.0+0" [[deps.LibGit2]] deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" [[deps.LibGit2_jll]] deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" version = "1.6.4+0" [[deps.LibSSH2_jll]] deps = ["Artifacts", "Libdl", "MbedTLS_jll"] uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" version = "1.11.0+1" [[deps.Libdl]] uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" [[deps.Libffi_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "c8da7e6a91781c41a863611c7e966098d783c57a" uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" version = "3.4.7+0" [[deps.Libglvnd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll", "Xorg_libXext_jll"] git-tree-sha1 = "d36c21b9e7c172a44a10484125024495e2625ac0" uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" version = "1.7.1+1" [[deps.Libiconv_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "be484f5c92fad0bd8acfef35fe017900b0b73809" uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" version = "1.18.0+0" [[deps.Libmount_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "cc3ad4faf30015a3e8094c9b5b7f19e85bdf2386" uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" version = "2.42.0+0" [[deps.Libtiff_jll]] deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"] git-tree-sha1 = "aebd334d06cee9f24cea70bd19a39749daf73881" uuid = "89763e89-9b03-5906-acba-b20f662cd828" version = "4.7.3+0" [[deps.Libuuid_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "d620582b1f0cbe2c72dd1d5bd195a9ce73370ab1" uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" version = "2.42.0+0" [[deps.LinearAlgebra]] deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" [[deps.LogExpFunctions]] deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] git-tree-sha1 = "bba2d9aa057d8f126415de240573e86a8f39d2a1" uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" version = "1.0.1" [deps.LogExpFunctions.extensions] LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" LogExpFunctionsInverseFunctionsExt = "InverseFunctions" [deps.LogExpFunctions.weakdeps] ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" [[deps.Logging]] uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" [[deps.MKL_jll]] deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "oneTBB_jll"] git-tree-sha1 = "282cadc186e7b2ae0eeadbd7a4dffed4196ae2aa" uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" version = "2025.2.0+0" [[deps.MacroTools]] git-tree-sha1 = "1e0228a030642014fe5cfe68c2c0a818f9e3f522" uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" version = "0.5.16" [[deps.Markdown]] deps = ["Base64"] uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" [[deps.MbedTLS_jll]] deps = ["Artifacts", "Libdl"] uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" version = "2.28.1010+0" [[deps.Measures]] git-tree-sha1 = "b513cedd20d9c914783d8ad83d08120702bf2c77" uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" version = "0.3.3" [[deps.Missings]] deps = ["DataAPI"] git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d" uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" version = "1.2.0" [[deps.Mmap]] uuid = "a63ad114-7e13-5084-954f-fe012c677804" [[deps.MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" version = "2025.12.2" [[deps.NaNMath]] deps = ["OpenLibm_jll"] git-tree-sha1 = "dbd2e8cd2c1c27f0b584f6661b4309609c5a685e" uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" version = "1.1.4" [[deps.NetworkOptions]] uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" version = "1.2.0" [[deps.Ogg_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "b6aa4566bb7ae78498a5e68943863fa8b5231b59" uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" version = "1.3.6+0" [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" version = "0.3.23+5" [[deps.OpenLibm_jll]] deps = ["Artifacts", "Libdl"] uuid = "05823500-19ac-5b8b-9628-191a04bc5112" version = "0.8.5+0" [[deps.OpenSSL_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "7787087cbc5ec110986e94d9aa1f17639a79c5de" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" version = "3.5.8+0" [[deps.OpenSpecFun_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] git-tree-sha1 = "1346c9208249809840c91b26703912dff463d335" uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" version = "0.5.6+0" [[deps.Opus_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "e2bb57a313a74b8104064b7efd01406c0a50d2ff" uuid = "91d4177d-7536-5919-b921-800302f37372" version = "1.6.1+0" [[deps.OrderedCollections]] git-tree-sha1 = "05f45c2e0de6259db764adbfd2f1dc6d3f8de13c" uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" version = "2.0.1" [[deps.PCRE2_jll]] deps = ["Artifacts", "Libdl"] uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" version = "10.42.0+1" [[deps.Pango_jll]] deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl"] git-tree-sha1 = "1912a9f1b9ca55005b03ba075f8e19993583e237" uuid = "36c8627f-9965-5494-a995-c6b170f724f3" version = "1.58.2+0" [[deps.Parsers]] deps = ["Dates", "PrecompileTools"] git-tree-sha1 = "663e8b48b789916221e0765393b289ca6c88f24e" uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" version = "3.0.0" [[deps.Pixman_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"] git-tree-sha1 = "e4a6721aa89e62e5d4217c0b21bd714263779dda" uuid = "30392449-352a-5448-841d-b1acce4e97dc" version = "0.46.4+0" [[deps.Pkg]] deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" version = "1.10.0" [[deps.PlotThemes]] deps = ["PlotUtils", "Statistics"] git-tree-sha1 = "41031ef3a1be6f5bbbf3e8073f210556daeae5ca" uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" version = "3.3.0" [[deps.PlotUtils]] deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "StableRNGs", "Statistics"] git-tree-sha1 = "26ca162858917496748aad52bb5d3be4d26a228a" uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" version = "1.4.4" [[deps.Plots]] deps = ["Base64", "Contour", "Dates", "Downloads", "FFMPEG", "FixedPointNumbers", "GR", "JLFzf", "JSON", "LaTeXStrings", "Latexify", "LinearAlgebra", "Measures", "NaNMath", "Pkg", "PlotThemes", "PlotUtils", "PrecompileTools", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "RelocatableFolders", "Requires", "Scratch", "Showoff", "SparseArrays", "Statistics", "StatsBase", "TOML", "UUIDs", "UnicodeFun", "Unzip"] git-tree-sha1 = "83bd514e8ff16b5858ac54c53fa0bcf6002a3b00" uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" version = "1.41.7" [deps.Plots.extensions] FileIOExt = "FileIO" GeometryBasicsExt = "GeometryBasics" IJuliaExt = "IJulia" ImageInTerminalExt = "ImageInTerminal" UnitfulExt = "Unitful" [deps.Plots.weakdeps] FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" ImageInTerminal = "d8c32880-2388-543b-8c61-d9f865259254" Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" [[deps.Polynomials]] deps = ["LinearAlgebra", "OrderedCollections", "Setfield", "SparseArrays"] git-tree-sha1 = "9aa2cf5b3a0f55ef0ac4f26c8b92cc6d08b06fbf" uuid = "f27b6e38-b328-58d1-80ce-0feddd5e7a45" version = "4.1.3" [deps.Polynomials.extensions] PolynomialsChainRulesCoreExt = "ChainRulesCore" PolynomialsFFTWExt = "FFTW" PolynomialsMakieExt = "Makie" PolynomialsMutableArithmeticsExt = "MutableArithmetics" PolynomialsRecipesBaseExt = "RecipesBase" [deps.Polynomials.weakdeps] ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" FFTW = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" MutableArithmetics = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" [[deps.PrecompileTools]] deps = ["Preferences"] git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" version = "1.2.1" [[deps.Preferences]] deps = ["TOML"] git-tree-sha1 = "8b770b60760d4451834fe79dd483e318eee709c4" uuid = "21216c6a-2e73-6563-6e65-726566657250" version = "1.5.2" [[deps.Printf]] deps = ["Unicode"] uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" [[deps.PtrArrays]] git-tree-sha1 = "4fbbafbc6251b883f4d2705356f3641f3652a7fe" uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" version = "1.4.0" [[deps.Qt6Base_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Vulkan_Loader_jll", "Xorg_libSM_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_cursor_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "libinput_jll", "xkbcommon_jll"] git-tree-sha1 = "144895f6166994730ee7ff8113b981fc360638f1" uuid = "c0090381-4147-56d7-9ebc-da0b1113ec56" version = "6.10.2+2" [[deps.Qt6Declarative_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Qt6Base_jll", "Qt6ShaderTools_jll", "Qt6Svg_jll"] git-tree-sha1 = "159d253ab126d5b29230cf53521899bea4ef4648" uuid = "629bc702-f1f5-5709-abd5-49b8460ea067" version = "6.10.2+2" [[deps.Qt6ShaderTools_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Qt6Base_jll"] git-tree-sha1 = "4d85eedf69d875982c46643f6b4f66919d7e157b" uuid = "ce943373-25bb-56aa-8eca-768745ed7b5a" version = "6.10.2+1" [[deps.Qt6Svg_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Qt6Base_jll"] git-tree-sha1 = "81587ff5ff25a4e1115ce191e36285ede0334c9d" uuid = "6de9746b-f93d-5813-b365-ba18ad4a9cf3" version = "6.10.2+0" [[deps.Qt6Wayland_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Qt6Base_jll", "Qt6Declarative_jll"] git-tree-sha1 = "672c938b4b4e3e0169a07a5f227029d4905456f2" uuid = "e99dba38-086e-5de3-a5b1-6e4c66e897c3" version = "6.10.2+1" [[deps.REPL]] deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" [[deps.Random]] deps = ["SHA"] uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" [[deps.RecipesBase]] deps = ["PrecompileTools"] git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" version = "1.3.4" [[deps.RecipesPipeline]] deps = ["Dates", "NaNMath", "PlotUtils", "PrecompileTools", "RecipesBase"] git-tree-sha1 = "45cf9fd0ca5839d06ef333c8201714e888486342" uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" version = "0.6.12" [[deps.Reexport]] git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" uuid = "189a3867-3050-52da-a836-e630ba90ab69" version = "1.2.2" [[deps.RelocatableFolders]] deps = ["SHA", "Scratch"] git-tree-sha1 = "ffdaf70d81cf6ff22c2b6e733c900c3321cab864" uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" version = "1.0.1" [[deps.Requires]] deps = ["UUIDs"] git-tree-sha1 = "62389eeff14780bfe55195b7204c0d8738436d64" uuid = "ae029012-a4dd-5104-9daa-d747884805df" version = "1.3.1" [[deps.SHA]] uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" version = "0.7.0" [[deps.Scratch]] deps = ["Dates"] git-tree-sha1 = "9b81b8393e50b7d4e6d0a9f14e192294d3b7c109" uuid = "6c6a2e73-6563-6170-7368-637461726353" version = "1.3.0" [[deps.Serialization]] uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" [[deps.Setfield]] deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] git-tree-sha1 = "c5391c6ace3bc430ca630251d02ea9687169ca68" uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" version = "1.1.2" [[deps.Showoff]] deps = ["Dates"] git-tree-sha1 = "8238217340ad0aaabe11afe39c1098b5bc9f4c8e" uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" version = "1.1.1" [[deps.Sockets]] uuid = "6462fe0b-24de-5631-8697-dd941f90decc" [[deps.SortingAlgorithms]] deps = ["DataStructures"] git-tree-sha1 = "13cd91cc9be159e3f4d95b857fa2aa383b53772a" uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" version = "1.2.3" [[deps.SparseArrays]] deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" version = "1.10.0" [[deps.SpecialFunctions]] deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] git-tree-sha1 = "429071b23f4c9a13fb6582f807cc2ef454082408" uuid = "276daf66-3868-5448-9aa4-cd146d93841b" version = "2.9.0" [deps.SpecialFunctions.extensions] SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" [deps.SpecialFunctions.weakdeps] ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" [[deps.StableRNGs]] deps = ["Random"] git-tree-sha1 = "4f96c596b8c8258cc7d3b19797854d368f243ddc" uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" version = "1.0.4" [[deps.StaticArraysCore]] git-tree-sha1 = "6ab403037779dae8c514bad259f32a447262455a" uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" version = "1.4.4" [[deps.Statistics]] deps = ["LinearAlgebra", "SparseArrays"] uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" version = "1.10.0" [[deps.StatsAPI]] deps = ["LinearAlgebra"] git-tree-sha1 = "178ed29fd5b2a2cfc3bd31c13375ae925623ff36" uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" version = "1.8.0" [[deps.StatsBase]] deps = ["AliasTables", "DataAPI", "DataStructures", "IrrationalConstants", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] git-tree-sha1 = "adb9da019510162e67a4493fc235c23203d8b09e" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" version = "0.34.13" [[deps.StructUtils]] deps = ["Dates", "UUIDs"] git-tree-sha1 = "2d0fc55c61321ba245c47be599570d11bac50303" uuid = "ec057cc2-7a8d-4b58-b3b3-92acb9f63b42" version = "2.8.5" [deps.StructUtils.extensions] StructUtilsMeasurementsExt = ["Measurements"] StructUtilsStaticArraysCoreExt = ["StaticArraysCore"] StructUtilsTablesExt = ["Tables"] [deps.StructUtils.weakdeps] Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" [[deps.SuiteSparse_jll]] deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" version = "7.2.1+1" [[deps.TOML]] deps = ["Dates"] uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" version = "1.0.3" [[deps.Tar]] deps = ["ArgTools", "SHA"] uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" version = "1.10.0" [[deps.TensorCore]] deps = ["LinearAlgebra"] git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6" uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50" version = "0.1.1" [[deps.Test]] deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [[deps.UUIDs]] deps = ["Random", "SHA"] uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" [[deps.Unicode]] uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" [[deps.UnicodeFun]] deps = ["REPL"] git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf" uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" version = "0.4.1" [[deps.Unzip]] git-tree-sha1 = "ca0969166a028236229f63514992fc073799bb78" uuid = "41fe7b60-77ed-43a1-b4f0-825fd5a5650d" version = "0.2.0" [[deps.Vulkan_Loader_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Wayland_jll", "Xorg_libX11_jll", "Xorg_libXrandr_jll", "xkbcommon_jll"] git-tree-sha1 = "2f0486047a07670caad3a81a075d2e518acc5c59" uuid = "a44049a8-05dd-5a78-86c9-5fde0876e88c" version = "1.3.243+0" [[deps.Wayland_jll]] deps = ["Artifacts", "EpollShim_jll", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll"] git-tree-sha1 = "96478df35bbc2f3e1e791bc7a3d0eeee559e60e9" uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89" version = "1.24.0+0" [[deps.XZ_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "b29c22e245d092b8b4e8d3c09ad7baa586d9f573" uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" version = "5.8.3+0" [[deps.Xorg_libICE_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "a3ea76ee3f4facd7a64684f9af25310825ee3668" uuid = "f67eecfb-183a-506d-b269-f58e52b52d7c" version = "1.1.2+0" [[deps.Xorg_libSM_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libICE_jll"] git-tree-sha1 = "9c7ad99c629a44f81e7799eb05ec2746abb5d588" uuid = "c834827a-8449-5923-a945-d239c165b7dd" version = "1.2.6+0" [[deps.Xorg_libX11_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] git-tree-sha1 = "808090ede1d41644447dd5cbafced4731c56bd2f" uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" version = "1.8.13+0" [[deps.Xorg_libXau_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "aa1261ebbac3ccc8d16558ae6799524c450ed16b" uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" version = "1.0.13+0" [[deps.Xorg_libXcursor_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"] git-tree-sha1 = "6c74ca84bbabc18c4547014765d194ff0b4dc9da" uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724" version = "1.2.4+0" [[deps.Xorg_libXdmcp_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "52858d64353db33a56e13c341d7bf44cd0d7b309" uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" version = "1.1.6+0" [[deps.Xorg_libXext_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] git-tree-sha1 = "1a4a26870bf1e5d26cd585e38038d399d7e65706" uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" version = "1.3.8+0" [[deps.Xorg_libXfixes_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] git-tree-sha1 = "75e00946e43621e09d431d9b95818ee751e6b2ef" uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" version = "6.0.2+0" [[deps.Xorg_libXi_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] git-tree-sha1 = "dcb316b3ce0941f195537dda56bea4517fcd3ff5" uuid = "a51aa0fd-4e3c-5386-b890-e753decda492" version = "1.8.4+0" [[deps.Xorg_libXinerama_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXext_jll"] git-tree-sha1 = "0ba01bc7396896a4ace8aab67db31403c71628f4" uuid = "d1454406-59df-5ea1-beac-c340f2130bc3" version = "1.1.7+0" [[deps.Xorg_libXrandr_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXext_jll", "Xorg_libXrender_jll"] git-tree-sha1 = "6c174ef70c96c76f4c3f4d3cfbe09d018bcd1b53" uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484" version = "1.5.6+0" [[deps.Xorg_libXrender_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] git-tree-sha1 = "7ed9347888fac59a618302ee38216dd0379c480d" uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" version = "0.9.12+0" [[deps.Xorg_libpciaccess_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] git-tree-sha1 = "58972370b81423fc546c56a60ed1a009450177c3" uuid = "a65dc6b1-eb27-53a1-bb3e-dea574b5389e" version = "0.19.0+0" [[deps.Xorg_libxcb_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXau_jll", "Xorg_libXdmcp_jll"] git-tree-sha1 = "bfcaf7ec088eaba362093393fe11aa141fa15422" uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" version = "1.17.1+0" [[deps.Xorg_libxkbfile_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] git-tree-sha1 = "ed756a03e95fff88d8f738ebc2849431bdd4fd1a" uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a" version = "1.2.0+0" [[deps.Xorg_xcb_util_cursor_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_jll", "Xorg_xcb_util_renderutil_jll"] git-tree-sha1 = "9750dc53819eba4e9a20be42349a6d3b86c7cdf8" uuid = "e920d4aa-a673-5f3a-b3d7-f755a4d47c43" version = "0.1.6+0" [[deps.Xorg_xcb_util_image_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_jll"] git-tree-sha1 = "f4fc02e384b74418679983a97385644b67e1263b" uuid = "12413925-8142-5f55-bb0e-6d7ca50bb09b" version = "0.4.1+0" [[deps.Xorg_xcb_util_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll"] git-tree-sha1 = "68da27247e7d8d8dafd1fcf0c3654ad6506f5f97" uuid = "2def613f-5ad1-5310-b15b-b15d46f528f5" version = "0.4.1+0" [[deps.Xorg_xcb_util_keysyms_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_jll"] git-tree-sha1 = "44ec54b0e2acd408b0fb361e1e9244c60c9c3dd4" uuid = "975044d2-76e6-5fbe-bf08-97ce7c6574c7" version = "0.4.1+0" [[deps.Xorg_xcb_util_renderutil_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_jll"] git-tree-sha1 = "5b0263b6d080716a02544c55fdff2c8d7f9a16a0" uuid = "0d47668e-0667-5a69-a72c-f761630bfb7e" version = "0.3.10+0" [[deps.Xorg_xcb_util_wm_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_jll"] git-tree-sha1 = "f233c83cad1fa0e70b7771e0e21b061a116f2763" uuid = "c22f9ab0-d5fe-5066-847c-f4bb1cd4e361" version = "0.4.2+0" [[deps.Xorg_xkbcomp_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxkbfile_jll"] git-tree-sha1 = "801a858fc9fb90c11ffddee1801bb06a738bda9b" uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4" version = "1.4.7+0" [[deps.Xorg_xkeyboard_config_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xkbcomp_jll"] git-tree-sha1 = "2e59214e017a55cb87474a00fa76035c82ac0e17" uuid = "33bec58e-1273-512f-9401-5d533626f822" version = "2.47.0+2" [[deps.Xorg_xtrans_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "a63799ff68005991f9d9491b6e95bd3478d783cb" uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" version = "1.6.0+0" [[deps.Zlib_jll]] deps = ["Libdl"] uuid = "83775a58-1f1d-513f-b197-d71354ab007a" version = "1.2.13+1" [[deps.Zstd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "446b23e73536f84e8037f5dce465e92275f6a308" uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" version = "1.5.7+1" [[deps.eudev_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "c3b0e6196d50eab0c5ed34021aaa0bb463489510" uuid = "35ca27e7-8b34-5b7f-bca9-bdc33f59eb06" version = "3.2.14+0" [[deps.fzf_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "b6a34e0e0960190ac2a4363a1bd003504772d631" uuid = "214eeab7-80f7-51ab-84ad-2988db7cef09" version = "0.61.1+0" [[deps.libaom_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "ef17c47d22224aaecc76e597ab21a072e025cf7b" uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" version = "3.14.1+0" [[deps.libass_jll]] deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Zlib_jll"] git-tree-sha1 = "cb007192783c56d8249db4cf0e3495001edfe414" uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" version = "0.17.5+0" [[deps.libblastrampoline_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" version = "5.11.0+0" [[deps.libdecor_jll]] deps = ["Artifacts", "Dbus_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pango_jll", "Wayland_jll", "xkbcommon_jll"] git-tree-sha1 = "9bf7903af251d2050b467f76bdbe57ce541f7f4f" uuid = "1183f4f0-6f2a-5f1a-908b-139f9cdfea6f" version = "0.2.2+0" [[deps.libdrm_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libpciaccess_jll"] git-tree-sha1 = "28e57478e8a160d346a19c28b3fffb9273bcc9c2" uuid = "8e53e030-5e6c-5a89-a30b-be5b7263a166" version = "2.4.134+0" [[deps.libevdev_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "56d643b57b188d30cccc25e331d416d3d358e557" uuid = "2db6ffa8-e38f-5e21-84af-90c45d0032cc" version = "1.13.4+0" [[deps.libfdk_aac_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "646634dd19587a56ee2f1199563ec056c5f228df" uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" version = "2.0.4+0" [[deps.libinput_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "eudev_jll", "libevdev_jll", "mtdev_jll"] git-tree-sha1 = "91d05d7f4a9f67205bd6cf395e488009fe85b499" uuid = "36db933b-70db-51c0-b978-0f229ee0e533" version = "1.28.1+0" [[deps.libpng_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] git-tree-sha1 = "e51150d5ab85cee6fc36726850f0e627ad2e4aba" uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" version = "1.6.58+0" [[deps.libva_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll", "Xorg_libXext_jll", "Xorg_libXfixes_jll", "libdrm_jll"] git-tree-sha1 = "7dbf96baae3310fe2fa0df0ccbb3c6288d5816c9" uuid = "9a156e7d-b971-5f62-b2c9-67348b8fb97c" version = "2.23.0+0" [[deps.libvorbis_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll"] git-tree-sha1 = "11e1772e7f3cc987e9d3de991dd4f6b2602663a5" uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" version = "1.3.8+0" [[deps.mtdev_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "b4d631fd51f2e9cdd93724ae25b2efc198b059b1" uuid = "009596ad-96f7-51b1-9f1b-5ce2d5e8a71e" version = "1.1.7+0" [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" version = "1.52.0+1" [[deps.oneTBB_jll]] deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] git-tree-sha1 = "da8c1f6eee04831f14edcfa5dae611d309807e57" uuid = "1317d2d5-d96f-522e-a858-c73665f53c3e" version = "2022.3.0+0" [[deps.p7zip_jll]] deps = ["Artifacts", "Libdl"] uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" version = "17.6.1+0" [[deps.x264_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "14cc7083fc6dff3cc44f2bc435ee96d06ed79aa7" uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" version = "10164.0.1+0" [[deps.x265_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "e7b67590c14d487e734dcb925924c5dc43ec85f3" uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" version = "4.1.0+0" [[deps.xkbcommon_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"] git-tree-sha1 = "a1fc6507a40bf504527d0d4067d718f8e179b2b8" uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd" version = "1.13.0+0" """ # ╔═╡ Cell order: # ╟─c41a9e82-4163-4bdf-a2fa-0376546a1e9b # ╟─4630de8d-5de1-4e63-95cd-a53bcd671878 # ╟─85ed177a-5cc8-40d9-b79c-6ae4154b5ab8 # ╟─b95c0a44-7649-46ca-9229-27d4e176d7d5 # ╟─92c16957-3e16-42eb-8c18-ee01e71c72c1 # ╟─26a371f9-a77a-4528-a62b-c020f18c1d89 # ╠═624ede40-e5b5-4546-acd8-450f3283cf38 # ╟─20efaf3a-7a12-4c12-8623-5d66cbc799f6 # ╟─006e7bf0-8423-4399-9545-7a943effd13e # ╟─07d3cb1b-01a8-441a-b731-83519c9ae94e # ╟─dfdfb0a0-a157-4053-90b8-016b54101419 # ╟─9a7d108d-b8c3-483d-ae59-46c659dc000a # ╠═016e53cc-919e-4aa1-88b3-95b560869b3b # ╠═0dee1763-9ead-4693-b45d-e6e9367825a4 # ╠═8eeec730-65fb-4c56-b506-ed566e38a0ae # ╠═d06ffc45-2fa3-4d15-a63d-5d4ed8c1536b # ╟─63493e61-48fb-479f-973c-8dcf0ebf5097 # ╟─66ae2ff3-afd0-4753-99d6-56c4ca437482 # ╠═eb46da1f-5350-4d34-8f52-9fec32bc9024 # ╠═398e8a64-b950-48aa-888b-32ad90161da8 # ╠═b0f80781-8ad2-4218-8042-358230c5e52f # ╠═6514ae0b-2958-4291-a27c-22694c50d579 # ╠═95373cb6-945f-451e-998d-17c296423df9 # ╠═fa56b2b3-5d56-4ea0-83ba-79a40171fa82 # ╠═8d963f3d-6291-4463-b028-aeab74be175b # ╟─86cbe90a-77f5-4665-8f89-ea69d7a0af5d # ╠═190fc757-6c83-4f10-aadd-7a0a5582c97c # ╟─b4bdd709-54f1-4ca0-999b-cc6011b29082 # ╠═cccbf053-7b75-4751-a407-40f846e3ef2e # ╟─662ba58f-ac54-40a1-8a9c-cfe3d1728ba1 # ╠═95623aa6-b4e2-4d50-a14c-829246893747 # ╠═8c31c56e-89fd-4e4f-84e0-e8f304766943 # ╠═57ed2ed3-ba8c-4048-988f-f3599226035f # ╠═164d9fd1-8835-406b-bd6f-ae04f262f6e0 # ╠═35bb671b-d314-4d8f-aa53-fdb02f72ac87 # ╠═042ab4f1-e2db-4d06-96ea-b5f518b77de9 # ╠═44a7ebb5-e268-47d9-9169-2bb037db4fb7 # ╠═130e7ff3-ae1d-43d8-907d-4440ee4b0dd2 # ╠═0bad950f-6def-473d-9bb0-d9e9b9cf35c7 # ╟─f6f299cf-36b9-438f-9389-649c46132c4a # ╠═977a6687-1ac1-4c39-b7e6-bc146a1529cd # ╟─992ddca1-7e69-4521-aa74-1795b88a2e45 # ╠═0d5d9934-3ae2-4371-9d0d-d9d02b75b09a # ╟─018ec4b5-9bc0-46c9-9559-306adb2c3308 # ╠═8aa9d2e3-d445-438b-8491-d87d14eeef66 # ╟─76e95a11-f0b8-4a1d-8726-5525ca4555ba # ╠═4feeb297-c9d4-4f91-9f03-d18c1a9610f3 # ╟─e19f5d17-2e25-4a0b-b59f-f8755456cf25 # ╠═85f77adf-9a23-42ef-bd6f-75f5c0bf9f40 # ╟─70cdad35-2c3f-4b21-b743-2029bfc6622b # ╠═cf75f102-a156-490e-af6b-db5d8414f2dd # ╟─016b2e85-fa42-438d-8867-f5ae2dfc20ca # ╠═519ccc83-8c52-40be-99a7-fb45e5540a01 # ╟─443b6594-c50f-429e-a21e-a145808986ba # ╠═3bdc232d-22b9-415c-a082-29c10d129c9a # ╟─8621a483-4db2-4e29-91f6-fdf0a06e4966 # ╠═8e1470ad-fad9-42ba-9399-c6206c27b3b1 # ╠═0ae75fa3-6333-44ac-a9c7-01bbe802138c # ╟─e8a16d5e-a5b9-4bc1-a9f2-a6e526115402 # ╠═2eba9819-9cc2-4dad-8c4d-967795678e2e # ╠═d9217802-6293-4d32-a71a-90c3b843129f # ╠═575012fd-7225-4ed9-930e-42b84cfa98c5 # ╠═b8218263-2c23-4fc3-a6aa-e6c5e64c63ba # ╠═131cd5e2-e190-424d-bc57-8f57ae72571b # ╟─98086cbd-ce41-457c-add4-fe85867df85b # ╠═772d4275-51c2-476d-a3fe-2906de0a3753 # ╟─39483220-98b2-4404-b660-97d8d2dfd368 # ╠═02056c94-7e84-424d-9b70-25e3edd7bdcd # ╟─0c350605-fa57-4488-a074-dc7e92f1442b # ╠═da2607e6-e7a2-4ad4-b28f-380035c4097e # ╟─2b63af4a-344b-4e8c-9f44-462c5d031fd7 # ╠═14adc351-3e39-4b4a-81ca-3df154d109f5 # ╟─bbcd399b-b3d5-4a0a-b516-d5d8bc4316ac # ╟─1e0dd8f8-0bfd-4692-b8ac-4ebfc6c67e7f # ╟─acaedbac-4402-11ed-3b9c-17a6ab36557c # ╟─0e38d1bf-765c-4687-a385-33db2a67d78d # ╟─ba7277c4-8750-4239-98cc-d3f9f42ddd21 # ╟─00000000-0000-0000-0000-000000000001 # ╟─00000000-0000-0000-0000-000000000002