通过自定义表单配置筛选器参数
让我们构建一个小应用程序(单元格掩码),它将帮助我们选择过滤器参数,而无需离开交互式脚本。
上传数据
假设我们有以下信号:
In [ ]:
Pkg.add(["Statistics", "DSP", "CSV"])
In [ ]:
gr()
using CSV, DataFrames
d = CSV.read( "$(@__DIR__)/scope_data.csv", DataFrame );
让我们以时间步长之间的平均差值作为采样频率。
In [ ]:
using Statistics
Fs = 1 / mean(diff(d.Time)); # Частот дискретизации
Fn = Fs/2; # Частота Найквиста
L = length( d.Time ); # Количество отсчетов в сигнале
让我们尝试构建一个满足一些技术要求的过滤器。
In [ ]:
using FFTW, DSP
Fl = round.(Int, round(L/2)+1) # Количество точек в дискретном преобразовани Фурье
Fv = range(1/Fl, 1, length=Fl) .* Fn; # Вектор частот (исключая первую точку – 0)
Iv = 1:length(Fv); # Вектор индексов
In [ ]:
# @markdown ## Настройка параметров фильтра
# Значения по умолчанию
pT, pB, sT, sB, Rp, Rs = 20, 30, 18, 35, 1, 50;
# @markdown ### Границы пропускаемых частот фильтра
Нижняя_граница_пропускаемых_частот = 19 # @param {type:"slider", min:2, max:100, step:1}
Верхняя_граница_пропускаемых_частот = 45 # @param {type:"slider", min:2, max:100, step:1}
# @markdown ### Границы поглощаемых частот фильтра
Нижняя_граница_поглощамеых_частот = 12 # @param {type:"slider", min:2, max:100, step:1}
Верхняя_граница_поглощаемых_частот = 60 # @param {type:"slider", min:2, max:100, step:1}
# @markdown ### Параметры пиков
Пик_в_полосе_пропускания = 8 # @param {type:"slider", min:2, max:100, step:1}
Пик_в_полосе_поглощения = 39 # @param {type:"slider", min:2, max:100, step:1}
pB, pT = Нижняя_граница_пропускаемых_частот, Верхняя_граница_пропускаемых_частот
sB, sT = Нижняя_граница_поглощамеых_частот, Верхняя_граница_поглощаемых_частот
Rp = Пик_в_полосе_пропускания
Rs = Пик_в_полосе_поглощения
Wp = (pB, pT) ./ Fn;
Ws = (sB, sT) ./ Fn;
n,Ws = ellipord( Wp, Ws, Rp, Rs); # Найдем порядок фильтра с желаемыми характеристиками
designmethod = Elliptic( n, Rp, Rs ); # Создадим эллиптический фильтр
responsetype = Bandpass( Rp, Rs); # И полосной фильтр
# Сглаженный спектр
TF = fft( d.Measurement ) ./ L
TF1 = filt( digitalfilter(responsetype, designmethod; fs=Fn), TF );
plot(
plot( Fv, 20 .* log10.(abs.([TF[Iv] TF1[Iv]])), xscale=:log10, lw=[1 2] ),
plot( Fv, angle.([TF[Iv] TF1[Iv]]) .* 180/pi, xscale=:log10, lw=[1 2] ),
layout=(2,1)
)
plot!( ylabel=["Амплитуда (дБ)" "Фаза (град)"], leg=:false )
plot!( title=["ЛАФЧХ системы" ""], xlabel=["" "Частота (Гц)"] )
Out[0]:
如果你隐藏码,并设置选择"Avtonapovnennya元,如果你改变设置"按钮(按钮 左边的掩细胞),有可能以交互方式调整的过滤器的参数。
结论
代码单元掩码工具包允许您创建自己的接口来配置算法。 在它的帮助下,我们可以选择将适当地影响某一链路的输出信号的滤波器参数。
