2017-01-02 3 views
0

Ich versuche, das Zeitsignal aus einer analytischen Formel in der Frequenzdomäne zu erhalten, und zwar ist die Formel:Gewinnung IFFT von Frequenzbereich analytische Formel

Formula implemented

Das Problem tritt auf, wenn ein IFFT Umsetzung da die folgende Impulsantwort erhalten wird:

Impulse response

Es ist klar, dass der erste Teil jedoch in Ordnung zu sein scheint, gibt es ein hohes Maß an Lärm und einem steigende "Steigung", wenn das Signal zu Ende geht.

Nun, wenn ich im Frequenzbereich anfange, definiere ich einen Frequenzvektor mit der Frequenzauflösung, die auf der Größe der FFT basiert.

%% Sampling Frequency + Size FFt 

Fs = 512; %Sampling Frequency 
Nfft = 2^12; %FFT Size 
df = Fs/Nfft; %Frequency Resolution 
f = 0:df:180; %Frequency Vector 

Dann wird die Formel angewendet und ein Frequenzvektor erhalten. Später eine IFFT der Größe NFFT angewandt wird:

%%Obtain impulse response 
x = ifft(P_w,Nfft); %P_w is obtained by formula (1) 
t = (0:(length(x)-1))/Fs; %Time Vector 

Sobald ich den Realteil von x plotten, das Ergebnis in Bild 2 erhaltene gesehen. Gibt es einen Ratschlag, wie man das überwinden kann? Ich meine, ich sollte nicht den letzten 'lauten' Teil des Signals bekommen oder unterbreche ich einen Fehler im Code?

EDIT:

Ich habe einen Fehler in dem Frequenzvektor gemacht habe, es tatsächlich beginnt, von 0:

f = 0:df:180; %Frequency Vector 
+0

Sollte nicht 'P_w' ein Vektor von komplexen Amplituden anstelle von Frequenzen? Wie erstellt man 'Pn' bevor man die Formel anwendet? Für jetzt ist es ziemlich schwierig zu antworten, da dies kein [mcve] – BillBokeey

+0

ist. Tatsächlich ist es. Ich meinte, dass "P_w" das Frequenzdomänensignal ist, das unter Verwendung der ersten Formel erhalten wird. Das ist das Signal, das in den Zeitbereich transformiert werden muss, um eine Impulsantwort zu erhalten. –

+0

Richtig, ich würde vorschlagen, dass Sie "Frequenzvektor" in "Frequenzdomänenvektor" in Ihrer Frage ändern, um Missverständnisse zu vermeiden. Wie baut man 'Pn' vor der Anwendung der Formel? Dies ist entscheidend. – BillBokeey

Antwort

0

In meiner Vermutung, Sie Null-Pad unter 5 Hz auf niedrigen Frequenzbereich verpaßt , wenn Ihr P_w von 5Hz gestartet wird.

Angenommen, meine Annahme ist richtig, plz, setzen Sie 40 Nullen vor P_w vor ift.

40 Nullen entsprechen 0Hz ~ 4,875Hz, da df = 0,125.

Wenn P_w Spaltenvektor ist: P_w=[zeros(40,1);P_w];

Wenn P_w Zeilenvektor ist: P_w=[zeros(1,40) P_w];

+0

Ich habe einen Fehler im Frequenzvektor gemacht, tatsächlich bekomme ich den gleichen 'Fehler' beginnend von 0 Hz. Wie auch immer, vielen Dank! –

Verwandte Themen