Fs = 80e6; % Sampling Frequency [z,p,k] = besself(2,17.5e6); % Bessel analog filter design [zd,pd,kd] = bilinear(z,p,k,Fs); % Analog to digital mapping
sos = zp2sos(zd,pd,kd); % Convert to SOS form
fvtool(sos)% Visualize the digital filter
Der Filter hat 2. Ordnung und wie oben schon geschrieben eine Grenzfrequenz von 17.5 MHz. Diese Codezeilen habe ich von der Dokumentation. Aber das Bodediagramm (welches mit der letzten Zeile erzeugt wird), sieht nicht wie erwartet aus...ich sollte ja bei -3 dB genau 17.5 MHz (oder umgerechnet 109.955 rad/s) erhalten.
Ich würde mich freuen, wenn mir jemand "unter die Arme greifen könnte".
Vielen Dank!
P.S. irgend etwas stimmt mit dem RX_RW_SAMPLE_filtered nicht. Es ist viel grösser als das Originalsignal (min: -24, max: 40). Evtl. ist der Ursprung des Problems in Wn?
Ich glaube, ich habe es fast geschafft! stem plot sieht nun schon viel besser aus und auch das Bodediagramm (fvtool) zeigt nun FAST den erwarteten Slope. Allerdings habe ich bei -3 dB nun ca. 12.5 MHz statt der vorgegebenen cut-off Frequenz von 17.5 MHz...?
Code:
Code:
Fs = 80e6; % Sampling frequency [Hz]
Fc = 17.5e6; % Cut-off frequency [Hz]
Wn = 2*pi*Fc; % Cut-off frequency [rad/s]
% Generate the filter (bessel low pass) and digitalize it [b,a] = besself(2,Wn);
[bd,ad] = bilinear(b,a,Fs);
% Show the bode diagram of the filter
fvtool(bd,ad,'Fs',Fs);
% Applying the filter to the signal
RX_RW_SAMPLE_filtered = filter(bd,ad,RX_RW_SAMPLE);
% Plot signal
t = linspace(0,1,Fs);
stem(t(1:16064),RX_RW_SAMPLE(1:16064),'r') hold on; grid on;
stem(t(1:16064),RX_RW_SAMPLE_filtered(1:16064))
Evtl. ist es nicht möglich mit 2. Ordnung die gewünschte Grenzfrequenz zu erreichen. Hast du mal eine höhere Ordnung ausprobiert, z.B. 6. Ordnung?
Ich weiß zumindest das folgende Code funktioniert:
Code:
%% SAMPLING FREQUENCY
fs = 1000; % Sampling Frequency in Hz
n = 10*fs; % Anzahl der samples
%% BESSEL
order_bes = 6; % Ordnung
fc_bes = 300; % Cut-off Frequenz in Hz [z,p,k] = besself(order_bes,fc_bes); % Bessel analog filter design [zd,pd,kd] = bilinear(z,p,k,fs); % Analog to digital mapping
sos = zp2sos(zd,pd,kd); % Convert to SOS form [b_bes,a_bes] = sos2tf(sos); % convert to num and den coefficents
Wer lesen kann ist klar im Vorteil. Ich habe mir zwar die Doku zum analogen Bessel Filterentwurf angesehen, aber nicht aufmerksam genug gelesen.
Zitat:
[b,a] = besself(n,Wo) designs an order n lowpass analog Bessel filter, where Wo is the frequency up to which the filter's group delay is approximately constant. Larger values of the filter order (n) produce a group delay that better approximates a constant up to frequency Wo.
Wo in rad/s gibt also nicht die gewünschte Grenzfrequenz des Filters an, sondern jene Frequenz, bis zu dem die Gruppenlaufzeit des Filters konstant ist.
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.