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

DFT/FFT: Quinn's Frequency Estimator funktioniert nicht

 

SignalRocker

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.02.2018, 13:25     Titel: DFT/FFT: Quinn's Frequency Estimator funktioniert nicht
  Antworten mit Zitat      
Hallo zusammen,

ich stehe gerade vor der Aufgabe, die Frequenz von einem Signal möglichst präzise bestimmen zu müssen. Dazu soll das Signal mittels FFT in den Frequenzbereich transormiert werden um anschließend das Maximum bestimmen zu können. Um die Frequenz genauer als die Frequenzauflösung der FFT bestimmen zu können, soll anschließend das Maximum mittels dem Quinn Estimator bestimmt werden. Dieser Algotithmus wird mit dem diskreten Maximum sowie den beiden benachbarten Bins gefüttert und soll dann ein  \delta \in \left(-0.5,...,0.5\right) ausgeben, welches die Abweichung vom diskreten Maximum zum geschätzen Maximum angibt. Also als Beispiel:

Code:

% Testsignal generieren
t = 0:1/1e6:10e-3;
signal=sin(2*pi*10e3*t);

% FFT und zugehörigen Frequenzvektor berechnen
freq = 0 : (1e6/2^16) : 1e6 - (1e6/2^16);
Hsignal = fft(signal,2^16)/length(t)*2^16;

% Index d. Maximums bestimmen
[~,nmax]=max(abs(Hsignal(1:length(Hsignal)/2)));

% Quinn Estimator
delta = quin(Hsignal(nmax-1:nmax+1));
freqEstimated = freq(nmax) +  delta*(1e6/2^16);
 


mit

Code:

function [x] = quin(pk3vect)

% Adapted by Eric Jacobsen, 1994.
%
% pk3vect is a three-element complex vector with the
% DFT output magnitude maximizer as the center element.
%
% Returns -0.5 < x < 0.5, which is the fraction of the sample
% spacing (i.e., bin width) about the center element where the
% peak is estimated to be.
%
% Ref: Quinn, BG, "Estimating frequency by interpolation using
% Fourier coefficients," IEEE Trans. Sig. Proc. Vol 42 No 5,
% May 1994, pp1264-1268.

% $Id: Quinn.m,v 1.1 1999/02/21 12:27:45 PeterK Exp PeterK $

alpha1=real(pk3vect(1)/pk3vect(2));
alpha2=real(pk3vect(3)/pk3vect(2));

delta1= alpha1/(1-alpha1);
delta2=-alpha2/(1-alpha2);

if ((delta1>0) && (delta2>0))
   x=delta2;
else
        x=delta1;

end
 


Ähm, naja, wenn ihr den Code per copy&paste mal testet, seht ihr, dass das errechnete [math]\delta[\math] leider alles andere als zwischen -0.5 und 0.5 liegt, was ja in dem Sinne keinen Sinn ergibt. Aber warum? Ich finde den Fehler nicht... Die Implementierung des Quinn Estimator ist auf jeden identisch mit Quinns Paper dazu:

B. G. Quinn, "Estimating frequency by interpolation using Fourier coefficients," in IEEE Transactions on Signal Processing, vol. 42, no. 5, pp. 1264-1268, May 1994.
doi: 10.1109/78.295186
URL: http://ieeexplore.ieee.org/stamp/st.....=295186&isnumber=7292

Hat jemand ne Idde, warum da trotzdem irgendwas nicht ganz funktioniert? Bin für jeden Tipp dankbar.

Vielen Dank und schönen Gruß,
SignalRocker.


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.