Sinyal Işleme

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

Sinyal İşleme Dersi Ödev Raporu

Hasan Hacıbeyoğlu
0515000546
eduhaci@gmail.com
1 Kuramsal Önçalışma
Sinyal İşleme Nedir ?

Sinyal işleme, sistem mühendisliği , elektronik mühendisliği ve uygumalamalı matematik gibi dalların en
önemli konularından birisidir. Genel olarak analog ve dijital sinyaller üzerinde analizler yapma, zamansal ve
mekânsal değişiklikleri saptayarak çeşitli sistemlere uygulama olarak tanımlanabilir.Sinyal işleme yapılırken ses
sinyalleri, elektromanyetik dalgalar, resim gibi görsel öğeler, sensörlerin algılaldığı değerler kullanılabilir ve bu
sinyaller kontrol sistemleri, haberleşme sistemleri, radarlar gibi birçok alana uygulanabilir hale getirilebilirler.

Kullanılan Notalar ve Frekansları

Frekansları belirlerken Amerikan standarlarına göre tını frekanslarına bakıldı.[1]

NOTALAR FREKANSLAR
si 493.88Hz
do 554.37Hz
re 587.33Hz
mi 659.26Hz
fa 739.99Hz
la 440Hz

Oluşturmaya çalıştığımız melodi daha dün annemizin şarkısının nota dizilimi kullandım.[2]

Hızlı Fouirier Dönüşümü (FFT) nedir ?

Hızlı fourier dönüşümü (FFT) titreşim analizinde kullanılan,istatistik tabanlı matematiksel bir
işlemdir.Karışık sinyal yumaklarını ayrıştırır ve hangi frekansta ne şiddette bir titreşim olduğunu gösteri. Kısaca
FFT sinyallerimizi zaman alanından frekans alanına geçirirken kullandığımız bir işlemdir. FFT tekranmayan
sinyalleri dikkate almaz.Karmaşık sinyaller içinde periyodik olanları belirleyip harmonik bileşenleri ayırır.

Aşşağıda dikkate aldığımız fourier dönüşüm formülleri verilmiştir.

Projenin Akış Diyagramı


Matlab Kodları ve Açıklamaları
fs=8000;%örnekleme frekansımız

%notaları oluşturduğumuz sinyaller


la=sin(2*pi*440*(0:1/fs:0.5));
si=sin(2*pi*493.88*(0:1/fs:0.5));
do=sin(2*pi*554.37*(0:1/fs:0.5));
re=sin(2*pi*587.33*(0:1/fs:0.5));
mi=sin(2*pi*659.26*(0:1/fs:0.5));
fa=sin(2*pi*739.99*(0:1/fs:0.5));
%daha dün annemizin nota sıralamasını oluşturduğumuz
matris
m1=[la la mi mi fa fa mi mi re re do do si si la la mi
mi];
daha_dun_annem=[m1];
%okuma yazma gibi ses işlemleri sinyalimizin fourierinin
alındığı kısım
audiowrite('annem.wav',daha_dun_annem,fs,'BitsPerSample',3
2);
clear fs;
[F,fs]=audioread('annem.wav');
sound(F,fs);
fourier=fft(F);
%q diye ayrıca bir zaman ekseni belirleyerek q ekseninde
dalgamızı
%çizdiriyoruz
q=0:1/fs:(length(F)-1)*1/fs
plot(q,F)
figure;
%sinyalin frekans yoğunluk grafiğini gözlemlemek için
spectrogram çizimi
spectrogram(F,1024,512,1024,fs,'yaxis');colorbar;
%fft grafiğimizden frekans ve genlik bilgilerini
matrislere alma
h=openfig('frr.fig');
grid on;
xlabel('frekans(Hz)');
ylabel('genlik');
title('frekans analiz grafigi');
h=findobj(gca,'Type','Line');
x=get(h,'xdata');
y=get(h,'ydata');

%Burada y matrisine aldığım genlik bilgilerini 100 sample


sonraki eleman
%ile farkını alıyorum daha sonra bu farkı frekans değerine
bölerek eğim
%buluyorum bulduğumuz eğimi belli bir seviyenin üstünde
olduğunu
%sorgulatarak fft grafiğindeki ani sıçramaları yani local
max noktaları
%buluyoruz bu lokal max noktalar bizim nota frekanslarımız
ve nota
%frekanslarımızın yakınındaki frekans değerleri oluyor. Bu
test sayesinde
%elimde 48 nokta kalıyor ve aynı frekanslara ait olan
noktaları diğer
%basamakta eliyorum
z=1;
noktalar=zeros(1,20);
for i=1:1:7000
j=i+100
if ((y(1,j)-y(1,i))/(x(1,j)-x(1,i)))>250
noktalar(1,z)=j;
z=z+1;
end
end
%nota frekanslarına yakın frekansları birden fazla kere
bulduğu için her
%notayı ifade edecek tek frekans değerini yakalamak adına
aradaki fark 200
%Hz olnmadan hiç bir frekans değerini almıyorum. Bu
örneğin sorgulatırken 4
%kere si notası bulundu yazmak yerine 1 kere si notasının
bulunduğunu
%yazmamıza sağlıyor bu sayede parçada hangi notaların
bulunduğunu her nota
%için tek çıktı ile anlayabiliyoruz.
z=1;
noktalar2=zeros(1,6);
for k=1:1:48
if noktalar(1,k+1)-noktalar(1,k)>200
noktalar2(1,z)=noktalar(1,k);
z=z+1;
noktalar2(1,6)=noktalar(1,49);
end
end
%bulduğum frekans değerlerini fftnin xlabelinde yani
frekans datalarının
%sakladığım matrisdeki karşılığına bakıyorum ve if
bloğundaki sorgulama ile
%hangi frekansın hangi notaya ait olduğunu çıktı olarak
yazdırıyorum
for c=1:1:6
if (445>x(1,noktalar2(1,c))&&x(1,noktalar2(1,c))>440)
fprintf('la notası bulundu:%.2f Hz
\n',x(1,noktalar2(1,c)))

elseif(500>x(1,noktalar2(1,c))&&x(1,noktalar2(1,c))>493)
fprintf('si notası bulundu:%.2f Hz \n',
x(1,noktalar2(1,c)))

elseif(560>x(1,noktalar2(1,c))&&x(1,noktalar2(1,c))>554)
fprintf('do notası bulundu:%.2f Hz \n',
x(1,noktalar2(1,c)))

elseif(590>x(1,noktalar2(1,c))&&x(1,noktalar2(1,c))>587)
fprintf('re notası bulundu:%.2f Hz \n',
x(1,noktalar2(1,c)))

elseif(662>x(1,noktalar2(1,c))&&x(1,noktalar2(1,c))>659)
fprintf('mi notası bulundu:%.2f Hz \n',
x(1,noktalar2(1,c)))

elseif(741>x(1,noktalar2(1,c))&&x(1,noktalar2(1,c))>739)
fprintf('fa notası bulundu:%.2f Hz \n',
x(1,noktalar2(1,c)))
end
end
%Zaman düzleminde çizdirdiğimiz sinyalimiz F sinyali bu
sinyaldeki maksimum
%noktalarını buluyoruz bu maksimum noktaları genliğin 1
olduğu noktalar
%aynı zamanda maksimum nokta olduğu için kendinden bir
önceki ve bir
%sonraki basamaktan daha yüksek bir değerde olması
gerekiyor bunu
%sorgulatarak 5242 tane maks nokta buluyorum .
l=1;
makslar=zeros(1,20);
for i=2:1:72018
if (F(i-1,1)<F(i,1)&&F(i+1,1)<F(i,1))
makslar(1,l)=i;
l=l+1;
end
end
%bulduğum 5242 tane maks noktanın periyotlarını belirlemek
için maks
%noktalar arasındaki sample farklarını buldum burada la
notasının tepeden
%tepeye 12 sample yani 1/8000*18 sn sürdüğü gibi diğer her
nota için
%hesaplarını yaptım. bu hesapları baş harfleriyle
gösterdiğim sayılarda
%belirttim örneğin m harfi m notası ve if bloğunda 12
samplede bir periyot
%olan kısım mi notası çalıyor demek
farko=zeros(1,20);
for i=2:1:5242
farko(1,i-1)=makslar(1,i)-makslar(1,i-1);
end
% tüm notaların toplam kaç adet periyoda sahip olduğunu
buldum.
l=0;
m=0;
f=0;
r=0;
d=0;
s=0;
bol1=0;
bol2=0;
for i=2:1:5242
if (makslar(1,i)-makslar(1,i-1)==18 || makslar(1,i)-
makslar(1,i-1)==19)
l=l+1;
elseif makslar(1,i)-makslar(1,i-1)==12
m=m+1;
elseif (makslar(1,i)-makslar(1,i-1)==11||
makslar(1,i)-makslar(1,i-1)==10)
f=f+1;

elseif makslar(1,i)-makslar(1,i-1)==15
d=d+1;
elseif (makslar(1,i)-makslar(1,i-1)==16 ||
makslar(1,i)-makslar(1,i-1)==17)
s=s+1;
elseif(makslar(1,i)-makslar(1,i-1)==13 )
bol1=bol1+1;
elseif(makslar(1,i)-makslar(1,i-1)==14)
bol2=bol2+1;
end
end
%bu kısımda yakın frekanstaki notaların sample sayıları
eşit olduğu için 13
%samplelik döngüleri r , m , d notalarına paylaştırdım
r=bol2/2+bol1/2;
m=m+bol1/2;
d=d+bol2/2;
%periyot sayılarını sample sayıları ile çarpıp örnekleme
frekansına bölerek
%her nota için çalma süresini hesaplattım
DO_SURE=d*14/fs;
RE_SURE=r*13/fs;
LA_SURE=l*18/fs;
SI_SURE=s*16/fs;
MI_SURE=m*12/fs;
FA_SURE=f*11/fs;
fprintf('\nDO notasinin suresi: %.2f sn\n',DO_SURE);
fprintf('RE notasinin suresi: %.2f sn\n',RE_SURE);
fprintf('LA notasinin suresi: %.2f sn\n',LA_SURE);
fprintf('SI notasinin suresi: %.2f sn\n',SI_SURE)
fprintf('FA notasinin suresi: %.2f sn\n',FA_SURE);
fprintf('MI notasinin suresi: %.2f sn\n',MI_SURE);

Matlab kodunun çıktıları


Spektrogram
Zaman Ekseninde Çizdirme

Sonuçların Yorumlanması

Bir referans bulamadım .Anlaşılabilirlik açısından ödevin zor olduğunu düşünüyorum.Yapılabilirlik adına güzel
bir ödev verilen süre ile ödevi içeriği olması gereken gibi

Referanslar
https://www.elektrikport.com/teknik-kutuphane/matlab-ses-sinyali-analizi-video-egitimi-melodi-
olusturma-elektrikport-akademi/6734#ad-image-0[1]

https://tr.wikipedia.org/wiki/Fourier_d%C3%B6n%C3%BC%C5%9F%C3%BCm%C3%BC.[2]

You might also like