MATLAB ile Zaman-Frekans Değişiminin Gösterilmesi

MATLAB ile zaman ile frekans değişimlerini gözlemlemek amacı ile spectogram fonksiyonu sıklıkla tercih edilmektedir. Bu yazıda kendi spektogram fonksiyonunumuzu oluşturup gösterimini gerçekleştireceğiz. Aşağıda mySpectogram fonksiyonu giriş verisine ait zaman-frekans değişimlerini örnekleme frekansı, FFT boyutu ve örtüşme değerlerine bağlı olarak hesaplamaktadır.

  1. function [oData X Y] = mySpectogram(iData,f_s,FFT_size,FFT_overlap)
  2. FFT_res = f_s / FFT_size;
  3. [X, Y] = meshgrid( 0 : FFT_res : (FFT_size / 2 - 1) * FFT_res,...
  4. ((1 - FFT_overlap) * FFT_size : (1 - FFT_overlap) *...
  5. FFT_size : length(i_Data) - FFT_overlap * FFT_size ) / f_s) ;
  6. X = X / 1000;
  7. Y = Y;
  8. n_j = 0;
  9. for n_i = 1 : (1 - FFT_overlap) * FFT_size : length(iData) - FFT_size
  10. n_j = n_j + 1;
  11. Data = iData(n_i : n_i + FFT_size - 1);
  12. oData(n_j, :) = abs(fft(Data, FFT_size));
  13. end

Aşağıda verilen kodda 1 KHz örnekleme frekansında 1 sn’lik 50 Hz frekansında sinüs sinyalinin zaman frekans değişimi gösterilmektedir.

1 saniyelik 50 Hz frekasnında sinüs sinyali

Aşağıda verilen grafiktende görüleceği üzere tüm zaman boyunca 50 Hz’lik bir sinyal mevctur.

  1. f_s = 1e3;
  2. FFT_size = 2^8;
  3. FFT_overlap = 0.5;
  4. FFT_res = f_s / FFT_size;
  5. f= 50;
  6. n_t = 1/f_s : 1/f_s : 1;
  7. Data = sin(2 * pi * n_t * f);
  8. n_t = (1 : length(Data)) / f_s;
  9. figure, plot(n_t, Data);
  10. xlabel('Saniye');
  11. title('Data');
  12. grid on;
  13. [oData X Y] = mySpectogram(Data,f_s,FFT_size,FFT_overlap);
  14. figure, pcolor(X, Y, oData(:, 1 : FFT_size / 2))
  15. shading interp
  16. xlabel('Frekans (Hz)');
  17. ylabel('Saniye');

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.