How do I use a for-loop to do fft and plot the power?
    4 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Emma
 el 16 de Dic. de 2014
  
    
    
    
    
    Comentada: Emma
 el 17 de Dic. de 2014
            Hello,
I have a data set (time and variable Be) and I want to do a fft on one part of the data at a time (1000 years). To do this, I would like to use a for-loop that plots the power of the period for each of the different ffts. How do I do this? I'm new to Matlab but I have tried the code below:
hold on 
for ts=(0:1000:5000)';             % I have data between 0 and 5000 years ago. 
    A=fft(Be);                     % Do FFT on the Be data.
    A(1)=[];
    n=length(A);                     
    power=abs(A(1:floor(n/2))).^2;
    nyquist=1/2;
    freq=(1:n/2)/(n/2)*nyquist;
    period=1./freq;
    plot(period,power);
end
When I do this, I get only one plot. What am I doing wrong?
Thanks!
0 comentarios
Respuesta aceptada
  Thorsten
      
      
 el 17 de Dic. de 2014
        
      Editada: Thorsten
      
      
 el 17 de Dic. de 2014
  
      May be that's because they are the same? I get different curves using random input.
BTW: note that n is always 1000 in your case, so you can compute "period" outside the loop; further, as you have an offset of 350 now, a could start from 0; just be(0) is wrong syntax in Matlab because matrix indices start with 1.
figure; 
be_i_dt = rand(1, 20000);
hAxes = gca;
hold( hAxes, 'on' )
offset = 305;
n = 1000;
n=length(A);                     
nyquist=1/2;
freq=(1:n/2)/(n/2)*nyquist;
period=1./freq;
for a = 1:9
    A = fft(be_i_dt(offset+a*n:offset+(a+1)*n));                 
    A(1)=[];
    power=abs(A(1:floor(n/2))).^2;
    plot(hAxes,period,power)
end
3 comentarios
  Thorsten
      
      
 el 17 de Dic. de 2014
				Yes, you probably have to few data points. The last value
 offset+(a+1)*n
for the highest a (9 in your case) in your for loop must always be lower or equal to
numel(be_i_dt)
Más respuestas (2)
  David Young
      
 el 16 de Dic. de 2014
        
      Editada: David Young
      
 el 16 de Dic. de 2014
  
      The variable Be is not changed between iterations, so A will also be the same each time, so each plot will be the same as the previous one. If Be is a vector with all 5000 data points, then you could replace the first line in the loop with
A = fft(Be(ts+1:ts+999));
to select 1000 data points starting from ts.
4 comentarios
  Sudharsana Iyengar
      
 el 17 de Dic. de 2014
        HI,
Try this and let me know.
     for a= 0:4
    A=fft(Be(a*1000:(a+1)*1000));                 
    A(1)=[];
    n=length(A);                     
    power=abs(A(1:floor(n/2))).^2;
    nyquist=1/2;
    freq=(1:n/2)/(n/2)*nyquist;
    period=1./freq;
    figure()
    plot(period,power)
    end
Ver también
Categorías
				Más información sobre Spectral Analysis en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




