Uzm. Ody. Soner Türüdü

Site 1. rengi

Site 2. rengi

Topbar rengi

Menü ikon

Menü hover

Menü arama

Footer rengi

Tasarım

MATLAB ile Gerçek Zamanlı Ses Spektrogramı Oluşturma

Reklam vermek için iletişime geçiniz
MATLAB ile Gerçek Zamanlı Ses Spektrogramı Oluşturma

Merhaba, bugün sizlere MATLAB yazılımı ile gerçek zamanlı ses spektrogramı oluşturmayı göstereceğim.
Spektrogram, zamanla değişen bir sinyalin frekans spektrumunun görsel bir temsilidir.
Kaynak kodlar ve video gösterimi yazı sonunda mevcuttur.

Gerçek zamanlı ses spektrogramı oluşturmaktaki amacımız, mikrofon ile MATLAB veri girişi yapmak; FFT (Fast Fourier Transform – Hızlı Fourier Dönüşümü) ile sesimizin zaman ve frekans alanlarında gösterimini sağlamaktır. Ek olarak, yazı sonunda ıslık gibi konuşmaya göre daha tiz frekanslar içeren seslerin gösterimi için yapılacak modifikasyon yer almaktadır.

Bu tarz bir projeyi gerçekleştirebilmek için audiorecorder, getaudiodata, fft ve record komutlarının nasıl kullanılacağını bilmek önemlidir.

Bazı temel komutlardan bahsedecek olursak;

  • srate –> örneklem sayısıdır. Genellikle 44100 alınmaktadır.
  • ylim –> y-eksen sınırları ,  xlim –> x-eksen sınırları
  • Örnek linspace kullanımı –> linspace(1,11,6) –> 0 dan 11’e kadar eşit aralıklı 6 tane değer atar.
    linspace (1,11,6) –> 1 3 5 7 9 11
  • subplot (a,b,c) veya subplot (abc); a –> satır b –> sütun c –> konum
    a, b ve c değerlerini değiştirerek olayı daha iyi kavrayabilirsiniz
  • xlabel, ylabel –> x ve y eksenlerinde görünecek etiketler
  • title –> ilgili grafiğin başlığı
  • audiorecorder (fs,a,b) –> fs, örneklem sayısı;
    a, her örneklem için bit sayısı; b, kanal sayısı (1-mono, 2-stereo)
  • fft –> Fast Fourier Transform – Hızlı Fourier Dönüşümü
  • abs (x) –> mutlak değer alma. abs (-19)=19 gibi.

MATLAB yazılımında bilmediğiniz komutları ve işlevlerini, komut üzerine gelip sağ tıkladıktan sonra ya da komut penceresinde ‘open’ ve ‘help’  ile öğrenebilirsiniz. Örneğin audiorecorder komutu için, “help audiorecorder” yazarak bilgi alabilirsiniz.

%Gerçek Zamanlı Ses Spektrogramı Oluşturma
%Soner Türüdü / PhD student / UMCG / University of Groningen

%Kayıt ve analiz parametreleri
srate = 44100/4;
time = 0:1/srate:1-1/srate;
n = length(time);
hz = linspace(0,srate,n);

% Çizimin oluşturulması
figure(1), clf

%Zaman alanı
subplot(211)
timeh = plot(time,zeros(n,1));
set(gca,’ylim’,[-1 1]/7)
xlabel(‘Zaman (sn.)’), ylabel(‘Amplitüd (dB)’)
title(‘Zamanı Alanı’)

%Frekans alanı
subplot(212)
freqh = plot(hz, zeros(n,1),’linew’,2);
set(gca,’xlim’,[0 500],’ylim’,[0 7]*1e-6)
xlabel(‘Frekans (Hz)’), ylabel(‘Güç’)
title(‘Frekans Alanı’)

%Ses kaydedici kurulumu
auddat = audiorecorder (srate,8,1);

%Kaydı başlatma ve arabellekte tutma
record (auddat);
pause(1.1);

%Ctrl-c ile çıkana kadar, projenin çalışmasını sağlama
while 1

%Bir önceki saniyeden veri alınması
data = getaudiodata (auddat);
data = data (end-srate+1:end);

%Çizimlerin güncel tutulması
set(timeh,’YData’, data);
set(freqh,’YData’, abs(fft(data)/n).^2);

pause(.1)
end

%Durdurma
%Burada hata verebilir. Fakat önemli değil, silebilirsiniz
%Ctrl-c kullanarak çıkacağız

stop(auddat);

Islık sesi için modifikasyon;
Bildiğiniz gibi ıslık sesi daha tiz bir sestir ve frekans alanını [0 500] ile sabit tutamayız.
Bu nedenle ilgili kod satırında [0 500] aralığını [0 2000] olarak değiştirebilirsiniz.

Yukarıdaki matlab kodlarına ve bundan sonra gelecek çalışmalara ulaşmak için aşağıdaki adresi ziyaret edebilirsiniz.
https://github.com/Odysonertrd/matlab_gercek_zamanli_spektrogram

Sorularınız ve katkılarınız için soner.turudu@gmail.com e-mail adresi üzerinden iletişime geçebilirsiniz.
Sonraki yazılarda görüşmek üzere.

Reklam vermek için iletişime geçiniz
BİR YORUM YAZIN

ZİYARETÇİ YORUMLARI - 6 YORUM
  1. MKE dedi ki:

    Eline, emeğine sağlık Soner, bravo …

    1. Soner Türüdü dedi ki:

      Teşekkür ederim MKE :))

  2. Özlem çelebi dedi ki:

    Harikasın, yolun hep güzelliklerle açık olsun.

    1. Soner Türüdü dedi ki:

      Teşekkür ederim 🙂

  3. D dedi ki:

    Farklı konulara yöneliyor ve araştırıyor olmanız bizleri de motive ediyor hocam, teşekkür ederiz:)

    1. Soner Türüdü dedi ki:

      Teşekkür ederim:)