Datei:Bessel-butterworth-filter 2.png
aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen
Zur Suche springen
Größe dieser Vorschau: 266 × 599 Pixel. Weitere Auflösungen: 106 × 240 Pixel | 213 × 480 Pixel | 640 × 1.440 Pixel
Originaldatei (640 × 1.440 Pixel, Dateigröße: 11 KB, MIME-Typ: image/png)
Diese Datei und die Informationen unter dem roten Trennstrich werden aus dem zentralen Medienarchiv Wikimedia Commons eingebunden.
File:Bessel-butterworth-filter.svg ist eine vektorisierte Version dieses Bildes. Diese sollte an Stelle des Rasterbildes verwendet werden, sofern sie nicht schlechter ist.
File:Bessel-butterworth-filter 2.png → File:Bessel-butterworth-filter.svg
Für weitere Informationen siehe Help:SVG.
|
Beschreibung
BeschreibungBessel-butterworth-filter 2.png |
English: Comparison of a bessel filter, a Butterworth filter and 3 cascaded 1st order lowpass filters
Deutsch: de:Besselfilter |
Quelle | Eigenes Werk |
Urheber | Eigenes Werk |
Dieser Plot wurde mit Gnuplot erstellt.
Lizenz
Diese Datei ist unter der Creative-Commons-Lizenz „Namensnennung 3.0 nicht portiert“ lizenziert.
- Dieses Werk darf von dir
- verbreitet werden – vervielfältigt, verbreitet und öffentlich zugänglich gemacht werden
- neu zusammengestellt werden – abgewandelt und bearbeitet werden
- Zu den folgenden Bedingungen:
- Namensnennung – Du musst angemessene Urheber- und Rechteangaben machen, einen Link zur Lizenz beifügen und angeben, ob Änderungen vorgenommen wurden. Diese Angaben dürfen in jeder angemessenen Art und Weise gemacht werden, allerdings nicht so, dass der Eindruck entsteht, der Lizenzgeber unterstütze gerade dich oder deine Nutzung besonders.
GNU Octave
% Main program to calculate group delay of a butterworth bessel
% Author: mik81@de.wikipedia.org
% bessel especially butterworth with 3rd Order
clear all;
omega = (-2.:0.01:2.);
omega = 10..^omega;
time = (0.:0.01:20.);
step = zeros(length(time),1);
for i=200:1:length(step)
step(i) = 1;
end
%
% Functions
%
besselThirdOrder = 1 ./ \
( 1 .+ ( omega .* 1i ) \
+ ( omega .* 1i).^2 .* (2 ./ 5) \
+ ( omega .* 1i).^3 .* (1 ./ 15) \
);
besselFourthOrder = 1 ./ \
( 1 .+ ( omega .* 1i ) \
+ ( omega .* 1i).^2 .* (3 ./ 7) \
+ ( omega .* 1i).^3 .* (2 ./ 21) \
+ ( omega .* 1i).^4 .* (1 ./ 105) \
);
besselFifthOrder = 1 ./ \
( 1 .+ ( omega .* 1i ) \
+ ( omega .* 1i ).^2 .* (4 ./ 9) \
+ ( omega .* 1i ).^3 .* (1 ./ 9) \
+ ( omega .* 1i ).^4 .* (1 ./ 63) \
+ ( omega .* 1i ).^5 .* (1 ./ 945) \
);
butterworthThirdOrder = 1 ./ \
( (1 .+ (omega .* (1/1.8) .* 1i)) \
.* ( 1 .+ (omega .* (1/1.8) .* 1i) .+ (omega .* (1/1.8) .* 1i).^2 ));
% butterworthThirdOrderIIR_y_a = 1 ./ (1+ y_a_1 )
% butterworthThirdOrderIIR_y_b = ( 1 ./ ( 1 .+ y_b_1 .+ y_b_2^2 ))
threeFilterFirstOrder = 1 ./ \
( (1 .+ ( 1/3.6 .* omega .* 1i)) \
.* (1 .+ ( 1/3.6 .* omega .* 1i)) \
.* (1 .+ ( 1/3.6 .* omega .* 1i)) \
);
%
% Calculate and plot gain
%
xlabel("Normalized omega / omega_0");
ylabel("Gain");
loglog( \
omega, abs(butterworthThirdOrder), ";Butterworth 3. Ordnung;" \
, omega, abs(besselThirdOrder), ";Besselfilter 3. Ordnung;" \
% , omega, abs(besselFourthOrder), ";Besselfilter 4. Ordnung;" \
, omega, abs(threeFilterFirstOrder), ";3 Tiefpaesse 1. Ordnung;" \
, [0.01, 100.], [1/sqrt(2), 1/sqrt(2)], ";-3dB;");
axis ([0.01, 100., 0.00001, 5.]);
grid ("on");
print ("butterworthFrequency.png", "-dpng", "-landscape");
%
% Calculate and plot phase
%
% Butterworth
butterworthThirdOrderAngle = angle(butterworthThirdOrder);
% correct roll over of phase
shift = 0;
lastAngle = butterworthThirdOrderAngle(1);
for i=2:1:length(butterworthThirdOrderAngle)
if ( lastAngle < 0 && butterworthThirdOrderAngle(i) > 0)
shift = shift - 2*pi;
end
lastAngle = butterworthThirdOrderAngle(i);
butterworthThirdOrderAngle(i) = butterworthThirdOrderAngle(i) + shift;
end
% Bessel
besselThirdOrderAngle = angle(besselThirdOrder);
% correct roll over of phase
shift = 0;
lastAngle = besselThirdOrderAngle(1);
for i=2:1:length(besselThirdOrderAngle)
if ( lastAngle < 0 && besselThirdOrderAngle(i) > 0)
shift = shift - 2*pi;
end
lastAngle = besselThirdOrderAngle(i);
besselThirdOrderAngle(i) = besselThirdOrderAngle(i) + shift;
end
besselFourthOrderAngle = angle(besselFourthOrder);
% correct roll over of phase
shift = 0;
lastAngle = besselFourthOrderAngle(1);
for i=2:1:length(besselFourthOrderAngle)
if ( lastAngle < 0 && besselFourthOrderAngle(i) > 0)
shift = shift - 2*pi;
end
lastAngle = besselFourthOrderAngle(i);
besselFourthOrderAngle(i) = besselFourthOrderAngle(i) + shift;
end
% three filter first order
threeFilterFirstOrderAngle = angle(threeFilterFirstOrder);
% correct roll over of phase
shift = 0;
lastAngle = threeFilterFirstOrderAngle(1);
for i=2:1:length(threeFilterFirstOrderAngle)
if ( lastAngle < 0 && threeFilterFirstOrderAngle(i) > 0)
shift = shift - 2*pi;
end
lastAngle = threeFilterFirstOrderAngle(i);
threeFilterFirstOrderAngle(i) = threeFilterFirstOrderAngle(i) + shift;
end
xlabel("Normalized omega / omega_0");
ylabel("phase in rad");
% !!! unavoidable !!!
__gnuplot_set__ ytics pi/2;
semilogx( \
omega, butterworthThirdOrderAngle, ";Butterworthfilter 3. Ordnung;"
, omega, besselThirdOrderAngle, ";Besselfilter 3. Ordnung;"
% , omega, besselFourthOrderAngle, ";Besselfilter 4. Ordnung;" );
, omega, threeFilterFirstOrderAngle, ";3 Tiefpaesse 1. Ordnung;");
% legend (, );
axis ([0.01, 100., -pi*9/4, pi/4]);
grid ("on");
print ("butterworthAngle.png", "-dpng", "-landscape");
%
% Calculate and plot group delay with phase
%
% -deltaAngle/deltaOmega
% butterworth
lastAngle = butterworthThirdOrderAngle(1);
lastOmega = omega(1);
butterworthThirdOrderGroupDelay = zeros(length(butterworthThirdOrder),1);
for i=2:1:length(butterworthThirdOrderAngle)
butterworthThirdOrderGroupDelay(i) = \
-1. * (butterworthThirdOrderAngle(i)-lastAngle)/(omega(i)-lastOmega);
lastOmega = omega(i);
lastAngle = butterworthThirdOrderAngle(i);
end
butterworthThirdOrderGroupDelay(1) = butterworthThirdOrderGroupDelay(2);
% bessel
lastAngle = besselThirdOrderAngle(1);
lastOmega = omega(1);
besselThirdOrderGroupDelay = zeros(length(besselThirdOrder),1);
for i=2:1:length(besselThirdOrderAngle)
besselThirdOrderGroupDelay(i) = \
-1. * (besselThirdOrderAngle(i)-lastAngle)/(omega(i)-lastOmega);
lastOmega = omega(i);
lastAngle = besselThirdOrderAngle(i);
end
besselThirdOrderGroupDelay(1) = besselThirdOrderGroupDelay(2);
lastAngle = besselFourthOrderAngle(1);
lastOmega = omega(1);
besselFourthOrderGroupDelay = zeros(length(besselFourthOrder),1);
for i=2:1:length(besselFourthOrderAngle)
besselFourthOrderGroupDelay(i) = \
-1. * (besselFourthOrderAngle(i)-lastAngle)/(omega(i)-lastOmega);
lastOmega = omega(i);
lastAngle = besselFourthOrderAngle(i);
end
besselFourthOrderGroupDelay(1) = besselFourthOrderGroupDelay(2);
% three first order
lastAngle = threeFilterFirstOrderAngle(1);
lastOmega = omega(1);
threeFilterFirstOrderGroupDelay = zeros(length(threeFilterFirstOrder),1);
for i=2:1:length(threeFilterFirstOrderAngle)
threeFilterFirstOrderGroupDelay(i) = \
-1. * (threeFilterFirstOrderAngle(i)-lastAngle)/(omega(i)-lastOmega);
lastOmega = omega(i);
lastAngle = threeFilterFirstOrderAngle(i);
end
threeFilterFirstOrderGroupDelay(1) = threeFilterFirstOrderGroupDelay(2);
xlabel("Normalized omega / omega_0");
ylabel("Groupdelay");
% !!! unavoidable !!!
__gnuplot_set__ ytics auto;
semilogx( \
omega, butterworthThirdOrderGroupDelay, ";Butterworth 3. Ordnung;"
, omega, besselThirdOrderGroupDelay, ";Bessel 3. Ordnung;"
% , omega, besselFourthOrderGroupDelay, ";Besselfilter 4. Ordnung;");
, omega, threeFilterFirstOrderGroupDelay, ";3 Tiefpaesse 1. Ordnung;");
axis ("auto");
grid ("on");
print ("butterworthGroupDelay.png", "-dpng", "-landscape");
In dieser Datei abgebildete Objekte
Motiv
image/png
5c22e7d083529c9bebdaf4b631f7471a889494a5
11.234 Byte
1.440 Pixel
640 Pixel
Dateiversionen
Klicke auf einen Zeitpunkt, um diese Version zu laden.
Version vom | Vorschaubild | Maße | Benutzer | Kommentar | |
---|---|---|---|---|---|
aktuell | 22:03, 16. Jan. 2008 | 640 × 1.440 (11 KB) | Mik81 | == Summary == {{Information |Description= de:Besselfilter |Source= selfmade |Date= |Author= |Permission= |other_versions= }} Category:Linear filters == Licensing == {{cc-by-3.0}} | |
22:01, 16. Jan. 2008 | 640 × 1.440 (14 KB) | Mik81 | {{Information |Description= de:Besselfilter |Source= selfmade |Date= |Author= |Permission= |other_versions= }} Category:Linear filters |
Dateiverwendung
Keine Seiten verwenden diese Datei.