how to get frequency of a discrete signal by using fft in matlab
    6 ビュー (過去 30 日間)
  
       古いコメントを表示
    
i want to find the frequency of a discrete signal using matlab and also want to apply a bandpass filter to that spectrum how can i do that pls help me out guys!!!
0 件のコメント
採用された回答
  Wayne King
    
      
 2012 年 5 月 18 日
        You identify the peak in the Fourier transform, find the index in DFT vector corresponding to that peak and relate that to frequency.
For example:
   % sampling frequency is 1 kHz
   Fs = 1000;
   % I'll create a signal consisting of a 100 Hz sine wave in noise
   t = 0:0.001:1-0.001;
   x = cos(2*pi*100*t)+randn(size(t));
   xdft = fft(x);
  % I only need to search 1/2 of xdft for the max because x is real-valued
   xdft(1:length(x)/2+1);
   [Y,I] = max(abs(xdft));
   freq = 0:Fs/length(x):Fs/2;
   fprintf('Maximum occurs at %3.2f Hz\n.',freq(I))
Note that the frequency bins in the DFT are spaced at Fs/N where Fs is the sampling frequency and N is the length of the signal. The first DFT "bin" corresponds to zero frequency.
Your next step is to construct a bandpass filter around 1 kHz, you can do that a number of ways in MATLAB. See fdesign.bandpass for example.
その他の回答 (1 件)
  Wayne King
    
      
 2012 年 5 月 18 日
        You don't have to do fftshift() to get the real spectrum. fftshift just puts 0 in the center with "negative" frequencies to the left and "positive" frequencies to the right. That is convenient in many applications, but not necessary.
If the signal is real-valued (not complex-valued), then a symmetry will exist between the two halfs of the Fourier transform. Therefore, in order to identify the peak frequency, you only need to work with 1/2 of the result.
0 件のコメント
参考
カテゴリ
				Help Center および File Exchange で Spectral Measurements についてさらに検索
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

