MATLAB'da BASiT SES IŞLEME

Kullanılan fonksiyonlar:


audioread()        Ses dosyasını oku
audiorecorder()    Ses kaydı al
audiowrite()       Ses dosyasına yaz
audioinfo()        Ses dosyasına ail bilgileri al
recordblocking()   Ses kaydı başlat
getaudiodata()     Ses kaydını değişkne al
spectrogram()      Ses verisinin zaman-frekans analizi
sound()            Ses çal
fft()              Hızlı Fourier dönüşümü

Belli frekansta ses calma

clear; clc;  
fs = 44100;         % örnekleme hızı
f  = 1000;          % frekans
dt = 1/fs;          % zaman adımları
t = 0:dt:1;         % zaman dizisi
y  = sin(2*pi*f*t); % ses şiddeti
sound(y,fs)         % çal

Belli frekansta ses + gürültü üretme ve dosyaya yazma

clear; clc;
fs = 44100;         % örnekleme hızı
f  = 1000;          % frekans
dt = 1/fs;          % zaman adımları
t = 0:dt:1;         % zaman dizisi

% ses şiddeti sinyal + gürültü
y  = sin(2*pi*f*t) + rand(1,length(t))-1;

sound(y,fs) % çal
plot(t,y)     % çiz
audiowrite('signal_and_noise.wav', y, fs) % dosyaya yaz

Vuru (beat) birbirine yakın iki frekansta ses üretme

clear; clc;
fs = 44100;
f1 = 500;
f2 = 502;
dt = 1/fs;
t  = 0:dt:3;
y  =  sin(2*pi*f1*t) + sin(2*pi*f2*t); % sine profile
plot(t,y)
sound(y,fs)

Sol ve sağ hoperlerden farklı ses üretme

clear; clc;
fs = 44100;
f1 = 500;
f2 = 1000;
dt = 1/fs;
t  = 0:dt:3;
y1 = sin(2*pi*f1*t); % sol
y2 = sin(2*pi*f2*t); % sag
y  = [y1' y2'];
sound(y,fs)

Ses darbesi (pulse) üretme

clear; clc;
fs = 44100;
f  = 500;
dt = 1/fs;
t  = 0:dt:3;
 y = sin(2*pi*f*t); % sol
 
for i=1:3
 sound(y,fs)   % çal
 pause(1)      % 1 s bekle
 clear sound   % sus
end

Ses dosyası okuma

clear; clc;

audioinfo('instr_piano.wav')
[y,fs] = audioread('instr_piano.wav');

tmax = round(length(y)/fs)
t = linspace(0, tmax, length(y));

plot(t,y)
sound(y,fs)

Ses kaydı alma

clear; clc;
ar = audiorecorder;
disp('Konusmaya basla...')
% 3 saniye kayıt başlat
recordblocking(ar, 3);
disp('Kayit bitti.'); 

play(ar);             % Kaydi cal
y = getaudiodata(ar); % Kaydi  al

t = linspace(0,3,length(y));
plot(t,y)

Fourier Donusumu ile frekans analizi

clear; clc;

fs = 100;      % ornekleme hizi (hz)
dt = 1/fs;      % zaman araligi (s)
t  = 0:dt:2;    % zaman degerleri
n  = length(t); % dizinin eleman sayisi

% signal ornekleri
signal = sin(2*pi*5*t);
%signal = sin(2*pi*5*t) + 2*sin(2*pi*7*t) + 6*sin(2*pi*18*t);
%signal = 10*sin(2*pi*20*t) + randn(1,n);

% Fourier Analizi
f  = linspace(0,fs,n); % frekans (hz)
genlik = 2*abs(fft(signal)/n);

% cizim
subplot(211)
plot(t,signal,'b')
xlabel('zaman (s)')

subplot(212)
plot(f,genlik,'ks-')
xlabel('frekans (hz)')
%xlim([0 fs/2])

Sürekli ses kaydı ve karşılık gelen frekanslar

clear; clc;

fs = 10000; % ornekleme hizi
ar = audiorecorder(fs,16,1); % 16 bit, mono
T = 0.1; % kayit suresi

while 1
  recordblocking(ar, T);
  S = getaudiodata(ar);  % ses kaydi al

  t = linspace(0,T,length(S)); % zaman
  n = length(t);
  f = linspace(0,fs,n); % frekans

  % Fourier donusumu
  G = 2*abs(fft(S))/n;

  % cizim
  subplot(211)
  plot(t,S)  % zaman uzayi
  ylim([-0.005 0.005]); % y-eksenini sinirla

  subplot(212)
  plot(f,G) % frekans uzayi
  xlim([0 fs/2]); % x-eksenini sinirla
end

Spectrogram (yada sonogram)

clear; clc;
% Seskaydı 16 bit, mono
fs = 11025;
ar = audiorecorder(fs,16,1);
T = 0.1; % kayit suresi

while 1
  recordblocking(ar, T);

  y = getaudiodata(ar); % Kaydi  al
  t = linspace(0,T,length(y)); % zaman

  % cizim
  subplot(2,1,1)
  plot(t,y)  % zaman uzayı
  axis([0 T -0.1 0.1]); % eksenleri sınırla
  subplot(2,1,2)
  spectrogram(y,128,120,128,fs,'yaxis') % zaman-frekans uzayı
end