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

Weighted Overlap-Add (WOLA)

 

alexxela
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 08.10.10
Wohnort: ---
Version: R2008b
     Beitrag Verfasst am: 21.09.2012, 14:05     Titel: Weighted Overlap-Add (WOLA)
  Antworten mit Zitat      
Mahlzeit Liebe goMATLAB-Community...

Ich beschäftige mich privat gerade mit der Weighted Overlap-Add oder auch Overlap-Add mit überlappender Segmentierung (vgl. Kammeyer, Digitale Signalverarbeitung).
Bevor ich den Algorithmus jedoch auf einem DSP laufen lasse, wollte ich mir die Vorgehensweise in einem MATLAB-Script noch einmal veranschaulichen.

Die Ergebnisse einer "normalen Filterung" also: komplettes gefenstertes Signal + Impulsantwort mit der DFT in den Frequensbereich transformiert dort multipliziert und mit der inversen DFT wieder zurück oder direkt über ein Faltung im Zeitbereich berechnet - Sind dem meiner Weighted Overlap-Add zwar ähnlich aber "mehr" auch nicht.

Falls jemand Erfahrung mit der WOLA hat wäre es nett einen Blick auf mein WOLA TEST-Script zu werfen...


mit freundlichem Gruß

Alex

TestFenster05.m
 Beschreibung:
WOLA Test-Script

Download
 Dateiname:  TestFenster05.m
 Dateigröße:  1.34 KB
 Heruntergeladen:  841 mal
Private Nachricht senden Benutzer-Profile anzeigen


DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 04.10.2012, 12:16     Titel:
  Antworten mit Zitat      
Hallo,

ich habe dir jetzt mal das Overlap-Add Verfahren erstellt. Allerdings komme ich mit der zusätzlichen Fensterung auch noch nicht auf das richtige Ergebnis. In dem angegeben Buch (ich habe die 4. Auflage) ist das Verfahren nur ohne eine Fensterung erklärt. Dafür liefert der Code das richtige Ergebnis.

Ich bin ebenfalls der Meinung, dass man nicht jeden Block fenstern darf, sondern zunächst das komplette Signal x fenstert und erst dann die Faltung in den Blocken erfolgt. Hier gibt es dann aber dennoch eine Abweichung. Ich werde da mal noch weiter forschen...

Code:

clear;
%close all;
%clc;

% init
Fs = 100; % Hz
Fn = Fs/2;
Ts = 1/Fs;
N = 256; % Anzahl Messwerte
df = Fs/N; % Frequenzauflösung
fsignal = df*20; % damit kein Leakage auftritt
% Zeitvektor
t=0:Ts:(N-1)*Ts;

% Eingangssignal
x=sin(2*pi*fsignal * t) + sin(2*pi*fsignal*4 * t);

% Ordnung FIR-Filter
m=32; %L/2
% Impulsantwort h mit der Länge m+1
% sinus mit fsignal*4 soll gefiiltert werden
h=fir1(m, (fsignal*2)/Fn); % FIR Tiefpass


% ---------- START WOLA ----------
% Blocklaenge
L = 64;
R = N/L; % Anzahl Bloecke
% Frequenzantwort des Filters
H = fft(h, L + m); % Blocklaenge + N

% Grenzen für Index des aktuellen Blocks
low = 1;
high = L;

% preallocate
x_win = zeros(L,1);
X_Win = zeros(L + m,1);
Y = zeros(L + m,1);
y_R = zeros(L + m,R);
y_wola = zeros(N,1);

% Hann-Fenster
wHann=rectwin(L); % zu Testzwecken ein Rechteckfenster

% ---------- WOLA ----------
for i=1:R
    % Fensterung des Blocks
    x_win = x(low:high) .* wHann';
    % FFT der Bloecke
    X_win = fft(x_win, L + m); % Nullen werden angefügt auf die Länge L + M
    % Faltung von H und X_win
    Y = X_win .* H;
    % Rücktransformation in Zeitbereich
    y_R(:,i) = ifft(Y, L + m);
    % Ergebniskorrektur mittels Overlapp-Add
    % Überlappung von m Werten der benachbarten Bloecke addieren
    if i > 1
        % neuen Block anhängen
        y_wola(low:high+m) = y_R(:,i);
        % Überlappung addieren
        y_wola(L*(i-1) + 1:L*(i-1) + m) = y_R(L+1:L+m,i-1) + y_R(1:m,1);    
    else
        y_wola(1:L+m) = y_R(:,i); % nur für ersten Block
    end;    
    % nächsten Block holen
    low = high + 1;
    high = high + L;
end
   
% ---------- END WOLA ----------

% ---------- Vergleich mit Filterung als Gesamtsignal ----------
% Hann-Fenster
wHann=rectwin(N)';% zu Testzwecken ein Rechteckfenster

% zyklische Faltung des kompletten Signals
X = fft(x.*wHann,N+m);
H2 = fft(h,N+m);
Y2 = X.*H2;
y2=ifft(Y2);

% Alternative zu y2
y3=conv(x.*wHann,h);


% ---------- PLOT ----------
figure;
plot([0:N-1],x,'y',[0:N+m-1],y_wola,'b.-',[0:N+m-1],y2,'m', [0:N+m-1],y3,'ko');
grid on;
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Josepppe
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 03.11.12
Wohnort: Jena
Version: ---
     Beitrag Verfasst am: 08.01.2013, 15:01     Titel:
  Antworten mit Zitat      
Hallo,

hab mir den Code gerade mal angeschaut. Ich bin noch relativ neu hier und hab mit Matlab relativ bescheidene Erfahrungen. Mich verwirrt das klein m oben bei Filter-Ordnung. Bei fir1 wird es als Ordnung verwendet und unten sieht es so aus als wäre es die Überlappung der Blöcke oder?

Gruß Thomas
_________________

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 11.01.2013, 12:55     Titel:
  Antworten mit Zitat      
Deine Annahme ist richtig...soll daran etwas falsch sein?
Private Nachricht senden Benutzer-Profile anzeigen
 
Josepppe
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 03.11.12
Wohnort: Jena
Version: ---
     Beitrag Verfasst am: 21.01.2013, 20:14     Titel:
  Antworten mit Zitat      
Naja, ich hatte dass so verstanden das m die Filter-Ordnung ist und eine Überlappung bei Overlap-Add zwei unterschiedliche Variablen sein müssten weil es unterschiedliche Paramater sind oder?
_________________

MfG
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.