DFT/FFT: Quinn's Frequency Estimator funktioniert nicht - Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:

Fachkräfte:
Informatiker (m/w) für den Bereich Toolkette Embedded Software
Weiterentwicklung einer MATLAB-/Simulink-Toolkette, Automatisierung der Code-Generierung mit TargetLink und Embedded Coder
cbb-Software GmbH - Stuttgart

Softwareentwickler (m/w) automatische Codegenerierung
Umsetzung, Neuprogrammierung und Weiterentwicklung in Simulink, TargetLink und C
EFS - Ingolstadt, Wolfsburg

PreMaster (m/w) MEMS pressure sensor development
You will define the characterization standards in collaboration with sensor experts and project managers
Robert Bosch GmbH - Reutlingen

Entwickler Fahrerassistenzsysteme / Automatisiertes Fahren - Fahrversuch (m/w)
Entwicklung von Funktionen für assistiertes und pilo­tiert­es Fahren
Knorr-Bremse Systeme für Nutzfahrzeuge GmbH - Schwieberdingen bei Stuttgart

Funktionsentwickler/Systementwickler (m/w) vorausschauende Sicherheitsfunktionen / Fahrerassistenzfunktionen
Erstellen von Anforderungsspezifikationen
Automotive Safety Technologies GmbH - Gaimersheim

weitere Angebote

Partner:


Vermarktungspartner


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, 14: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
.



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


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


Copyright © 2007 - 2018 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.