2016-04-19 1 views
0

J'ai un signal mesuré dans le temps qui est connu pour avoir une réponse en fréquence variable (j'ai des données de fréquence et de fréquence pour le dispositif de mesure). Je veux déconvolution en utilisant:MATLAB: Utilisation de ifft() pour déconvoluer le signal et la réponse en fréquence

pt = ifft(fft(vt)./Mf) 

où vt est le signal de temps variable et Mf est la réponse en fréquence.

Je prends l'ampleur

abs(fft(vt)) 

et diviser par le fréq. par rapport à la courbe de réponse Mf (interpoler à la même plage de fréquence).

Cependant si je mets Mf = 1 (pour toutes les valeurs f = 0 à nMHz) je n'obtiens pas le signal d'origine vt quand je fais l'ifft. Si je comprends bien, j'ai besoin d'effectuer la division (fft (vt) ./ Mf) en utilisant la grandeur vt fft (puisque Mf est effectivement la fréquence vs données de magnitude) mais ensuite utiliser des données fft réelles/complexes pour ifft obtenir le signal original, mais je ne sais pas comment le faire fonctionner correctement.

Répondre

0

Il me semble que vous affirmez est que

pt = ifft(fft(vt)./1) 

ne se traduit pas en pt étant égale à vt. Ceci est vrai jusqu'à une certaine précision en virgule flottante. Je regarderais le maximum de l'erreur absolue entre les échantillons de pt et vt. Cela devrait au moins dix ordres de grandeur de moins que ceux de vos échantillons en vt.

+0

Non, cela fonctionne bien. Ce que je ne comprends pas, c'est s'il est correct d'utiliser: abs (fft (vt)) ./ Mf ou fft (vt) ./ Mf et comment appliquer correctement ifft après pour obtenir l'horodatage et l'amplitude corrects. (Je dois interpoler Mf pour que les points d'interrogation soient les mêmes que fft (vt). – 2one