Hello,
I am not yet fully familiar with Julia and am currently struggling with the DSP / Butterworth filter. My original Matlab-Code is
x = linspace(0, 10, 100);
y1 = sin(x);
[b,a] = butter(3,0.1,'high')
y2 = filter(b,a,y1)
plot(x, y1);
hold on;
plot(x, y2);
hold off;
grid;
I got the following filter parameter and the following result of the Butterworth/Highpass filter (here as a plot, blue: input signal, red: output signal)
a = [1,-2.374094743709352,1.929355669091215,-0.532075368312092]
b = [0.729440722639082,-2.188322167917247,2.188322167917247,-0.729440722639082]
I tried to rewrite the code as seen below, but I got significant different results: Corresponding to a and b of the former result, I got
ZeroPoleGain{:z, ComplexF64, ComplexF64, Float64}(
ComplexF64[1.0 + 0.0im, 1.0 + 0.0im, 1.0 + 0.0im],
ComplexF64[0.8237761078519955 - 0.2318012972462002im, 0.8237761078519955 + 0.2318012972462002im, 0.726542528005361 - 0.0im], 0.7294407226390823)
which now includes complex data (the real part is also different) and with the plot
using Plots;
using DSP;
function highpassfilter(signals, cutoff, order)
filth = digitalfilter(Highpass(cutoff), Butterworth(order));
println(filth);
filtfilt(filth, signals);
end
x = vcat(range(0,10,100));
y1 = sin.(x);
y2 = highpassfilter(y1,0.1,3);
println(y2);
img = plot(x, [y1,y2], gridlinewidth=1, xticks = 0:1:10, yticks = -1:0.2:1, xlims = (0,10), ylims = (-1,1))
Did I use the functions correctly or did I use the wrong functions?
Maybe someone has an idea what is wrong here.
Best wishes,
Martin