2010-10-29 4 views
3

J'utilise Matlab pour prendre des FFT de signaux, et je suis coincé sur la normalisation. Plus précisément, comment normaliser le spectre en unités de dBm. Je sais que 0.316228 est le facteur de normalisation correct, mais mes questions sont liées à la façon de normaliser les bacs correctement.questions de normalisation FFT de base

J'ai créé le programme suivant pour poser mes questions. Il suffit de le couper et de le coller dans Matlab et il fonctionnera lui-même. Voir les questions en ligne.

En particulier, je suis confus comment normaliser les bacs. Par exemple, si la FFT a des indices 1: end, où end est pair, quand je calcule le spectre d'amplitude FFT, devrais-je multiplier par (2/N) pour les indices 2: (fin/2)? De même, la case à la fréquence de Nyquist (située à l'extrémité de l'index/2 + 1) est-elle normalisée à (1/N)? Je sais qu'il y a un tas de façons de normaliser en fonction de son intérêt. Disons que le signal que j'utilise (St ci-dessous) sont des tensions capturées à partir d'un CAN.

Tout commentaire est grandement apprécié. Merci d'avance!

%% 1. Create an Example Signal 
N = 2^21 ;     % N = number of points in time-domain signal (St) 
St = 1 + rand(N,1,'single'); % St = example broadband signal (e.g. random noise) 

% take FFT 
Sf = fft(St, N);      
Sf_mag = (2/N)*abs(Sf(1: N/2 + 1)); 
Sf_dBm = 20*log10(Sf_mag/0.316228); % 0.316338 is peak voltage of 1 mW into 50 Ohms 

% Q: Are Sf_mag and Sf_dBm normalized correctly? (assume 0.316338 is correct 
% peak voltage to get 1mW in 50 Ohms) 
% Q: Should Sf_mag(fftpoints/2 + 1) = (1/N)*abs(Sf(fftpoints/2 + 1) for correct normalization 
% of Nyquist frequency? (since Nyquist frequency is not folded in frequency 
% like the others are)       

%% 2. Plot Result 

% create FFT spectrum x-axis 
samplerate = 20e9; % 20 Gsamples/sec 
fft_xaxis = single(0 : 1 : N/2)';  
fft_xaxis = fft_xaxis * single(samplerate/N); 

semilogx(fft_xaxis, Sf_dBm, 'b-') 
xlabel('Frequency (Hz)'); 
ylabel('FFT Magnitude (dBm)'); 
title('Spectrum of Signal (Blue) vs Frequency (Hz)'); 
xlim([1e4 1e10]); 
grid on; 
+2

Utilisez 'log10' au lieu de' log' lors de la conversion du mag en dB – YYC

+0

Yup, c'est une super trouvaille YYC, merci! – ggkmath

+0

Un commentaire Je continue à poser beaucoup de questions: une simple transformation de Fourier n'est pas suffisante pour l'estimation spectrale. Il y a des fonctions bien implémentées pour ce qui est disponible dans le noyau Matlab. Regardez 'pwelch'. –

Répondre

5

Je ne suis pas tout à fait clair sur ce que vous essayez d'accomplir, mais voici quelques conseils qui vous permettront de déboguer votre propre programme.

A faire fft([1 1 1 1]). Ne fft([1 1 1 1 1 1 1 1]). En particulier, observez la magnitude de sortie. Est-ce ce que vous attendez?

Ensuite, faites fft([1 -1 1 -1]). A faire fft([1 -1 1 -1 1 -1 1 -1]). Répétez l'opération pour différentes longueurs et fréquences de signal. Cela devrait vous permettre de normaliser vos signaux en conséquence. De même, faites la même chose pour ifft au lieu de fft Ce sont de bons contrôles de santé mentale pour diverses implémentations FFT, car si la plupart des implémentations peuvent mettre le 1/N devant la transformation inverse, d'autres peuvent mettre 1/sqrt(N) devant les transformations directes et inverses.

0

Voir ceci pour une réponse: FFT normalization

Certains logiciels et les références se bâclée sur la normalisation des coefficients de Fourier.

En supposant un signal réel, alors les étapes de normalisation sont:

1) La puissance dans le domaine de fréquence doit être égale à la puissance dans le domaine temporel.

2) L'amplitude des coefficients de Fourier est dupliquée (x2) sauf pour le terme DC et le terme Nyquist. Les termes DC et Nyquist n'apparaissent qu'une seule fois. Selon la façon dont votre indexation de tableau commence/arrête, vous devez faire attention. Simplement doubler la puissance pour obtenir un spectre unilatéral est faux.

3) Pour obtenir la densité de puissance (dBm/Hz), vous devez normaliser la taille du bac de fréquence individuelle.

Questions connexes