Verfasst am: 19.07.2011, 15:24
Titel: Fensterfunktion - Hamming, Hann u. Blackman
Hallo zusammen,
wer nicht über die Signal Processing Toolbox verfügt, kann sich mit Hilfe dieser Funktion 3 verschiedene Fenstertypen beliebiger Länge erstellen.
Code:
function[output] = Fenster(window_size,window_typ) ;
% Input der Funktion: % window_size = Fensterlänge % window_typ = 0,1 oder 2
N = window_size; % Fensterlänge
output = zeros(N,1); % Init
if(window_typ ~= 0)&&(window_typ ~= 1)&&(window_typ ~= 2) disp('falsches Window ausgewählt: 0 = Hamming, 1 = Hann, 2 = Blackman');
else ifmod(N,2)==0% N gerade
m = fix(N/2);
n = m;
else% N ungerade
m = fix((N/2))+1;
n = m-1;
end
Verfasst am: 19.07.2011, 18:29
Titel: Re: Fensterfunktion - Hamming, Hann u. Blackman
Hallo DSP,
Das ist sehr hilfreich, denn es gibt viele Nutzer, die die Signal Processing Toolbox nicht installiert haben.
Wie kann man diese Fenster nun ohne SPT anwenden?
Noch ein paar kleine Vereinfachungen:
Code:
function output = Fenster(window_size, window_type) % Input der Funktion: % window_size = Fensterlänge % window_typ = 'Hamming', 'Hann', 'Blackman'
N = window_size; % Fensterlänge
output = zeros(N, 1); % Init ifmod(N, 2) == 0% N gerade
m = fix(N / 2);
n = m;
else% N ungerade
m = fix(N / 2)+1;
n = m-1;
end
Anmerkungen:
1. "fliplr(window(1:n)')'" ist so einfacher: "flipud(window(1:n))" oder "window(n:-1:1)".
2. Ich habe den Vektor aus der FOR-Schleife einfach in die Formel gezogen. Das sieht einfacher aus und ist schneller.
3. Ich habe statt 0, 1, 2 die Namen gewählt, weil man sich die leichter merken kann.
4. Alleine hätte ich das übrigens nicht schreiben können, weil ich von Signal-Processing keine Ahnung habe.
vielen Dank!! Wo es dir an Wissen über Signalverarbeitung fehlt, fehlen mir die Kenntnisse über Matlab. Deine Fragen will ich auch noch gleich beantworten, da das ja dazu gehört.
Die Fensterung benutzt man z.B. um den Leakage-Effekt eines Frequenzspektrums zu minimieren, das mittels DFT/FFT erstellt wird. Eine weitere Anwendung wäre im Bereich digitaler Filterung, z.B. zur Erstellung eines Window-Sinc FIR Filter.
Code:
% Zur Fensterung des Frequenzspektrums % N = Anzahl der Messwerte % Signal(N) = das abgetastete Signal mit N Messwerten
% Fensterung erfolgt im Zeitbereich
window = Fenster(N,'Hann'); % erstellt ein Hann Fenster mit der Länge N
Signal_win = Signal .* window; % Multiplikation von Signal und Fenster % Frequenzspektrum berechnen
Y = fft(Signal_win,N);
Noch als Ergänzung für die Fensterung des Zeitsignals...die Normierung für die Amplitude.
Code:
% Zur Fensterung des Frequenzspektrums % N = Anzahl der Messwerte % Signal(N) = das abgetastete Signal mit N Messwerten
% Fensterung erfolgt im Zeitbereich
window = Fenster(N,'Hann'); % erstellt ein Hann Fenster mit der Länge N % Multiplikation von Signal und Fenster
Signal_win = Signal .* window; % Fensterung ohne Amplitudenkorrektur
Signal_win = Signal .* window * N / sum(window); % Fensterung mit Amplitudenkorrektur % Frequenzspektrum berechnen
Y = fft(Signal_win,N);
Habe noch ein Blackman Harris Fenster hinzugefügt.
Code:
function output = Fenster(window_size, window_type) % Input der Funktion: % window_size = Fensterlänge % window_typ = 'Hamming', 'Hann', 'Blackman', 'Blackman-Harris'
N = window_size; % Fensterlänge
output = zeros(N, 1); % Init ifmod(N, 2) == 0% N gerade
m = fix(N / 2);
n = m;
else% N ungerade
m = fix(N / 2)+1;
n = m-1;
end
N = window_size; % Fensterlänge
output = zeros(N, 1); % Init ifmod(N, 2) == 0% N gerade
m = fix(N / 2);
n = m;
else% N ungerade
m = fix(N / 2)+1;
n = m-1;
end
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.