WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

FIR-Filter: Beispiel

 

Nils
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 23.01.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.01.2008, 13:02     Titel: FIR-Filter: Beispiel
  Antworten mit Zitat      
Hallo,

Hier ein Beispiel zum FIR-Filterentwurf und Darstellung des Amplitudengangs sowie der Koeffizienten in der z-Ebene:



Code:

clc
clear

%Ordnung n:
n = 87; % Anzahl der Nullstellen in der kompl. Ebene
fa = 48000; % Abtastfrequenz in Hz passend zur Signalverarbeitungs-Hardware wählen
fn = fa/2; % Nyquistfrequenz
%Wn = 4000/fn; % -6 dB – Grenzfrequenz in Hz
%FIRkoeff = fir1(n, Wn, 'low'); % TP-Filter

% Alternativ der Entwurf eines Bandpasses:
pass1 = 2500; % -6 dB – Grenzfrequenz in Hz
pass2 = 3800; % -6 dB – Grenzfrequenz in Hz
Wn = [pass1/fn pass2/fn];
FIRkoeff = fir1(n, Wn, 'bandpass'); % BP-Filter

% Darstellung der Koeffizienten:
fig = figure(1);
plot(FIRkoeff, '--')
hold on;
plot(FIRkoeff, '.')
hold off
title('Koeffizienten (Impulsantwort) des FIR-Filters')

% Zunächst den Nennerkoeffizientenvektor erstellen:
% (nötig zur korrekten Rechnung mit freqz, grpdelay, zplane)
a = zeros(size(FIRkoeff)); % oder: a = zeros(1, n+1);
a(1) = 1;
% freqz über Aufruf mit Koeffizientenvektoren
cntW = 4096;
% Standardmäßig (ohne zusätzliche Parameterangabe cntW) werden nur 512 Frequenzpunkte
% berechnet!
[Hfir, Wfir] = freqz(FIRkoeff, a, cntW); % mit 0 <= Wfir <= pi
df = Wfir(2)/pi*fn; % oder: df = fn/length(Wfir);
% df (delta_f) ist der Abstand zwischen den Frequenzpunkten in Hz
% d.h. df entspricht der Frequenzauflösung in Hz
amplFIR = abs(Hfir);
phaseFIR = angle(Hfir);
% Darstellung des Amplitudengangs (linear):
fig = figure(fig+1);
plot(Wfir/pi*fn, amplFIR, 'b');
axis([0 fn -0.1 1.1]);
title('Amplitudengang des FIR-Filters')
ylabel('Verstärkung')
xlabel(['Auflösung: ',num2str(df),' Hz Frequenz in Hz'])
hold on;
plot(Wn*fn,1,'rx')
hold off;
% Darstellung der Phase:
fig = figure(fig+1);
plot(Wfir/pi*fn, -unwrap(phaseFIR)/pi*180)
title('Phasengang des FIR-Filters')
ylabel('Phase in Grad')
xlabel(['Auflösung: ',num2str(df),' Hz Frequenz in Hz'])
grid

% Darstellung des Amplitudengangs (logarithmisch):
fig = figure(fig+1);
semilogx(Wfir/pi*fn, 20*log10(amplFIR), 'b');
axis([1 fa -105 5]); % 1 Hz bis fa, -105 dB bis +5 dB
title('Amplitudengang des FIR-Filters')
ylabel('Verstärkung in dB')
xlabel(['Auflösung: ',num2str(df),' Hz Frequenz in Hz'])
grid
hold on;
plot(Wn*fn,0,'rx')
hold off;

% Darstellung der Nullstellen in der z-Ebene:
fig = figure(fig+1);
zplane(FIRkoeff, a)
title('Nullstellen des FIR-Filters')
ylabel('Imaginaerteil')
xlabel('Realteil')

% Erzeugen der Koeffizientendatei:
fid = fopen('FIRkoeff.h', 'w'); % file-id
fprintf(fid,'const float FIRkoeff[] = {\n');
fprintf(fid,'%1.7e,\n',FIRkoeff(1:end-1));
fprintf(fid,'%1.7e};\n',FIRkoeff(end));
fclose(fid);
 


Gruß
Nils
Private Nachricht senden Benutzer-Profile anzeigen


Snowdog
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 57
Anmeldedatum: 12.07.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.07.2010, 16:45     Titel:
  Antworten mit Zitat      
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.