www.mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP FIR-Filter in Matlab


Autor: Chukky (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen.
Beschäftige mich seit ein par Tagen mit FIR-Filtern und bin dabei auf 
folgenden Code im Netz gestossen. Der Code ist ein Ausschnit aus einem 
grösseren Programm das mit Matlab (Guide) realisiert wurde. In dem 
Programm gehts um Modulation und Demodulation von Wav-Dateien. Vor der 
Modulation kann die Wave-Datei, indem man die untere und obere 
Grenzfrequenz in ein Textfeld eingibt, gefiltert werden. Dies ist der 
Teil den ich selber auch brauche, aber teilweise nicht verstehe.
Den Code für die FIR-Filter habe ich der Übersichtsheit halber 
ausgeschnitten (komplettes Programm im Anhang).

function [h] = firFilter(minFreq,maxFreq,hDuration,sampleFreq,windowType,handles)
% Computes the impulse time response filter based on a rectangular frequency response
% with "baseBdWidth" frequency bandwidth. The impulse time response is then windowed
% by one of the following windows:
% Hanning, Hamming, Blackman.
% minFreq,maxFreq are the frequencies boundaries of the UNILATERAL bandpass spectrum obtained  
% after the filter operation.
% In case of lowpass filter, choose minFreq = -maxFreq; don't forget that h will be
% affected by a factor 2 to take into account in the filtering operation.
% hDuration is the time duration of impulse response expressed in 1/baseBdWidth unit.

baseBdWidth = maxFreq - minFreq;    % Bandwidth of rectangular frequency response
freqShift = (maxFreq + minFreq)/2;  % Frequency shift if band pass filter required


Nk = floor(hDuration*sampleFreq/baseBdWidth);
if mod(Nk,2) == 0
    Nk = Nk + 1;
end
   

% Cardinal-sinus impulse response calculation
k = 1:(Nk-1)/2;
h = sin(pi*baseBdWidth*k/sampleFreq)./(pi*baseBdWidth*k/sampleFreq);
h = [fliplr(h) 1 h]*baseBdWidth/sampleFreq;
k = -(Nk-1)/2:(Nk-1)/2;

% Windowing the impulse response

switch windowType
    case 'Hanning'  % Hanning window
        window = 0.5*(1- cos(2*pi*[0:length(k)-1]/Nk));  
    case 'Hamming'  % Hamming window
        window = 0.54 - 0.46*cos(2*pi*[0:length(k)-1]/Nk);
    case 'Blackman' % Blackman window
        window = 0.42 -0.5*cos(2*pi*[0:length(k)-1]/Nk) ...
   + 0.08*cos(4*pi*[0:length(k)-1]/Nk);                  
    otherwise
        return
end
h = h.* window;
h = 2*h.*cos(2*pi*k*freqShift/sampleFreq);   % Frequency shift 


Mein grösstest Problem gibts gleich am Anfang.
Würde gerne wissen, wieso man mit dieser Formel Nk = 
floor(hDuration*sampleFreq/baseBdWidth) die Ordnung berechnen kann und 
wie man darauf kommt??

Für mich ergibt das keinen Sinn: Dauer der Impulsantwort * Abtastfrq. / 
Bandbreite

Vielleicht kann mir das jmd. erklären und ein bischen Licht ins Dunkel 
bringen.

Autor: Alexander Liebhold (lippi2000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey Chukky,

für mich sieht das so aus, dass hier mit Nk die Anzahl der Samplewerte 
des Fensters berechnet wird. Das Verhältnis der Bandbreite des 
Bandpassignal zur Basisbandbreite multipliziert mit der Abtastfrequenz 
ergibt die Anzahl der benötigten Fensterwerte (Hamming etc.)

k beschreibt doch das Fenster im Basisband. Also von -Nk/2 bis +Nk/2.

Am Ende wird das Signal ja auch mit der Fensterfunktion gefaltet.

Gruß Alexander

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.