goMatlab - Mein MATLAB Forum

Mein MATLAB Forum

 
Login  | Registrieren
Bücher:

Digitale Signalverarbeitung: Filterung und Spektralanalyse

Studierende:
Feldorientierte Regelung von elektrischen Maschinen
Antriebs- und Fahrwerktechnik
ZF Friedrichshafen AG - Friedrichshafen

Studienabschlussarbeit im Bereich Vorentwicklung Klimatisierung
Kfz-Zulieferindustrie
Behr GmbH & Co. KG - Stuttgart

Praktikant / Werkstudent Nachrichtentechnik (m/w)
Telefonanbieter
OnePhone Deutschland GmbH - Erkrath

Praktikum Modellgetriebene Software-Entwicklung für PV-Wechselrichter (Elektrotechnik, Technische Informatik, Automatisierungstechnik)
Energieversorgung
SMA Solar Technology AG - Niestetal

Praktikum Sensorik zur Überwachung von Solaranlagen (Elektrotechnik, Informatik, Physik, Mathematik)
Energieversorgung
SMA Solar Technology AG - Niestetal

weitere Angebote

Partner:




Vermarktungspartner


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, 14: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, 17:45     Titel:
  Antworten mit Zitat      
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Options and Permissions
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2012 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.