2016-12-16 1 views
-3

J'ai FFT pour le code de signal (signal audio) dans MATLAB mais il affiche (tracer) un graphique. Cependant je veux juste que le composant de fréquence soit stocké dans une variable mais je ne sais pas comment. Si le code ne s'applique pas, quelqu'un peut-il me donner un code qui fonctionnera dans Matlab ou Java?FFT dans MATLAB ou Java

Note: Je ne suis pas un expert en traitement du signal ou MATLAB.


%% Basic Fourier Analysis 
    % This example uses the Fourier transform to identify component 
    % frequencies in a simple signal. 

    %% 
    % Create a time vector |t| and a sinusoidal signal |x| that is a  function of |t|. 
    t = 0:1/50:10-1/50;      
    x = sin(2*pi*15*t) + sin(2*pi*20*t); 

    %% 
    % Plot the signal as a function of time. 
    plot(t,x) 

    %% 
    % Compute the Fourier transform of the signal, and then compute the magnitude 
    % |m| and phase |p| of the signal. 
    y = fft(x);   
    m = abs(y);        
    p = angle(y);      

    %% 
    % Compute the frequency vector associated with the signal |y|, which is 
    % sampled in frequency space. 
    f = (0:length(y)-1)*50/length(y); 



    %% 
    % Plot the magnitude and phase of the signal as a function of frequency. 
    % The spikes in magnitude correspond to the signal's frequency 
    % components. 
    subplot(2,1,1) 
    plot(f,m) 
    title('Magnitude') 

    subplot(2,1,2) 
    plot(f,rad2deg(p)) 
    title('Phase') 

    %% 
    % Compute and plot the inverse transform of $y$, which reproduces the 
    % original data in $x$ up to round-off error. 
    figure 
    x2 = ifft(y); 
    plot(t,x2) 
+1

s'il vous plaît montrer ce que vous avez essayé. Si je comprends bien, ce code n'a pas été écrit par vous. – Roxanne

+0

oui je l'ai trouvé sur le site matlab –

+0

j'ai essayé de le stocker comme ceci h = fft (t, x2) puis x_h = h.x y_h = h.y –

Répondre

2

Dans le code Matlab dans votre question le vecteur m contient les grandeurs de chaque bac de sortie de FFT. Chaque bin correspond à une fréquence, donc ce vecteur vous donne une magnitude à chaque fréquence de bin. Si vous recherchez la fréquence du plus grand pic du spectre, trouvez simplement la valeur maximale dans m, puis convertissez l'indice de bin de cette valeur de crête en fréquence. La relation entre l'indice de bin et de la fréquence est donnée par:

f = i * Fs/N 

i dans l'index du bac d'intérêt, Fs est la fréquence d'échantillonnage, N est la taille de FFT, et f est la fréquence centrale du bac correspondant. Voir this question pour une explication plus détaillée.