Lugatek

Genel Elektronik & Bilgisayar => Programlar => Konuyu başlatan: semiconnector - 11 Temmuz 2017, 13:24:06

Başlık: Sinyal modelleme
Gönderen: semiconnector - 11 Temmuz 2017, 13:24:06
Merhaba Arkadaslar,

elimde iki tane ses sinyali var. Bunlardan biri orjinal digeri ben bir Programda üzerinde oynayarak biraz daha anlasilir hale getirdim. Ama ilk sinyali Matlab ta ikinci sinyal gibi modellemem gerekiyor ve fazla zamanim yok. Sinyalleri ek te bulabilirsiniz. Yardimci olabilirseniz cok sevinirim.
Başlık: Ynt: Sinyal modelleme
Gönderen: Uykusuz - 11 Temmuz 2017, 14:27:53
Merhaba
Ekte sinyal_1 ve sinyal_2 adlı iki dosya var. Dinlediğimde sinyal_1 bana daha düzgün gibi geldi. Tam olarak hangisini hangisine benzetmeye çalışacağız?
Başlık: Ynt: Sinyal modelleme
Gönderen: semiconnector - 11 Temmuz 2017, 14:41:31
Hocam,
1.sini ikinciye benzetmeye calisacagiz. Aslinda ikisinde de Hallo deniyor. Ama söyleyen yasli ve Parkinson gibi bir hastaligi olan hasta. Ilk sesde Periyodiklik yok. Ikinci ses de periyodiklik var gibi duruyor. Yani ikinci seste ha-lo gibi 1. Ses de haaloooo gibi.

Filtre modelleme ile daha iyi bir ses yapabilirsek cok daha iyi olur tabii ki hedef zaten aslinda o :)
Asil amac sesdeki Formant yani Frekans degerlerine göre degistrmek ama direk orjinal ses ile iyi sonuclar elde edemedim. Bastan sanki filtreleme ile daha iyi olabiliyor.

Sinyal 3 ekledim. Hocam acaba ilk sesi sinyal_3 gibi de yapabilir miyiz? 3. ses normal bir hallo yani olmasi gereken gibi ama söyleyen baskasi. Acaba ilk bozuk sesi sinyal 2 ve sinyal 3 gibi yapabilirsek. Ilk sesin ne Kadar degistigini görebiliriz, buda daha iyi bir sonuc görmemizi saglar diye düsünüyorum.
Başlık: Ynt: Sinyal modelleme
Gönderen: Uykusuz - 11 Temmuz 2017, 15:08:12
Hocam ikinci sinyal bana baya bozuk gibi geldi. Birsürü gürültü eklenmiş ve doyuma ulaşmış yerler var. 3. ses oldukça temiz. Biz bence 1. sesi 3. ses gibi yapmaya çalışalım  ;D
Başlık: Ynt: Sinyal modelleme
Gönderen: Uykusuz - 11 Temmuz 2017, 16:23:14
Bunu bi dinler misiniz?
Başlık: Ynt: Sinyal modelleme
Gönderen: semiconnector - 11 Temmuz 2017, 18:13:17
Hocam,
evet 2.sinyal baya bozuk.Bence de 1. Sesi 3. Ses gibi yapalim:) Dinledim gördügüm kadar kenarlari silmissiniz yani gürültüyü ve yüksek geciren filter ile sesi yükseltmisiniz, güzel olmus. Bu olmasi gereken ama asil yapilmasi gereken ilk sesin 3. Ses gibi anlasilir halle getirebilmesi. Tabii ki süper olmasina gerek yok ama iyilestirme yapildiktan sonra 1. Ses ve iyilestirilen Sesin arasinda iyi yönde fark anlasilabilmesi.
Başlık: Ynt: Sinyal modelleme
Gönderen: Uykusuz - 11 Temmuz 2017, 20:13:21
Aslına bakarsanız spectrogram görüntüsünde 1. sesde yaklaşık 17KHz ve yine başka frekanslarda sabit bir gürültü vardı alçak geçiren filtre ile 8khz ve üzerini sildim. Çok düşük frekanslı patlamaları engellemek için de yüksek geçiren filtre ile düşük frekansları sildim. Başta ve sona doğru artan gereksiz bir gürültü vardı bunları da kaldırdım. en son olarak da sadece konuşma bölgesindeki genliği arttırdım. Matlab dosyası işyerinde kaldığı için ekleyemiyorum. Bunların haricinde yapmamız gerektiğini düşündüğünüz bişeyler varsa yapmaya çalışalım  ::)
Başlık: Ynt: Sinyal modelleme
Gönderen: semiconnector - 11 Temmuz 2017, 20:50:30
Ben Hazir ses Programinda bir yöntem denedim. Aslinda eskisinden cok daha anlasilir oldugunu söyleyebilirim.Ek hem ses dosyasi hem de spktogram görüntüsünü. görebilirsiniz  1. ses devamli bir gürültü oldugu spektogramda (Ha) ve (lo) arasindaki bölümü yok ettim ve sonuc heceleme gibi daha oldugunu düsünüyorum. Bu ilk ses  de yoktu tabii ki ama sonuc biraz daha anlasilir sanirim. Matlab ta orayi nasil yok edebiliriz ve halen 3. ses benzettigimizde nasil bir sonuc cikacak merak ediyorum.
Başlık: Ynt: Sinyal modelleme
Gönderen: Uykusuz - 15 Temmuz 2017, 14:31:26
Merhaba semiconnector hocam geç yazdığım için kusuruma bakmayın yoğunluktan bakamadım.

Yazdığım kodu ekledim

Kod: Üye Olmadan Linkleri Göremezsiniz. Üye Olun veya Giriş Yapın

[y1,Fs1] = audioread('semi\sinyal_1.wav');

subplot(4,1,1), plot(y1);
subplot(4,1,2), specgram(y1, 512, Fs1);

y1 = y1*4;
n=4;

Wn=5000*2/Fs1;
[b a]=butter(n,Wn,'low');
y1_lp=filter(b,a,y1);

Wn=10*2/Fs1;
[b a]=butter(n,Wn,'high');
y1_lp=filter(b,a,y1_lp);

x = medfilt1(y1_lp,5);

k=1;
while k<15000
    x(k)=0;
    k=k+1;
end

k=50000;
while k<length(x)
    x(k)=0;
    k=k+1;
end

subplot(4,1,3), plot(x);
subplot(4,1,4), specgram(x, 128, Fs1);
sound(x,Fs1)


Yaptığınız çalışmayı dinledim sildiğiniz bölge heceleme efekti oluşturmuş yahi helo yerine hel-o der gibi. Beynimiz de bunu hello olarak tamamlıyor tabi.

Yukarıdaki kod parçası ekteki çıktıyı veriyor. İlk ikisi orjinal sonraki ikili de filtrelenmiş ses. Zaten koddan da belli oluyor.

Vermiş olduğunuz sesde konuşan kişinin nefes gürültüsü konuşmayı bastırıyor. Sankii bu noktadan hareket etmek gerekiyor gibi hocam.
Başlık: Ynt: Sinyal modelleme
Gönderen: semiconnector - 15 Temmuz 2017, 21:47:32
Merhaba uykusuz hocam,
evet dediginiz gibi nefes sesi konusmayi bastiriyor. Aslinda o yüzden 1. sesi 2. ses gibi yapilabildiginde zaten cok yi düzelmese de heceleme ve gürültü kismi olabildigince düzelmis olur sanirim. Ben kendim proje icin Matlab ta GUI yaptim. Orada sesin Frequenz ve Bandbreite degerleri hesaplayarak tekrar degistirilip ses elde edilebiliyor. Buradan boyutu büyük oldugu icin yollayamadim. email adresiniz var ise size yollayabilirsem bakabilirseniz cok sevinirim.
Başlık: Ynt: Sinyal modelleme
Gönderen: semiconnector - 16 Temmuz 2017, 13:36:42
uykusuz hocam,
programda benim yapmis oldugum heceleme gibi gözükebilmesi icin arayi yukaridan yok edip sinyali devam ettiremedim. O kisimda yardimci olabilir misiniz?
Başlık: Ynt: Sinyal modelleme
Gönderen: Uykusuz - 17 Temmuz 2017, 10:08:24
Hocam tam olarak yokedilecek bölümü belirtebilir misiniz?
Başlık: Ynt: Sinyal modelleme
Gönderen: semiconnector - 17 Temmuz 2017, 11:37:18
hocam size yolladigim spektpgramda aslinda gözüküyor. Bendekini yaynlislikla silmisim yanlislikla??? hel-o he-lo hece kismi.
Başlık: Ynt: Sinyal modelleme
Gönderen: Uykusuz - 17 Temmuz 2017, 12:02:48
anladım hocam bi bakayım
Başlık: Ynt: Sinyal modelleme
Gönderen: semiconnector - 17 Temmuz 2017, 12:11:02
Tamam hocam,
genel düsüncelerinizi duymak isterim. Bel ki yazdigim fft gibi kodlarda hata olabilir:)
Başlık: Ynt: Sinyal modelleme
Gönderen: Uykusuz - 19 Temmuz 2017, 09:59:03
Hocam merhabalar
Böyle biraz geç yazıyorum kusuruma bakmayın. Bahsettiğiniz bölgeyi yumuşatarak şiddetini azalttım. Bu noktayı aşağıdaki kısmı ekleyerek yaptım:

Kod: Üye Olmadan Linkleri Göremezsiniz. Üye Olun veya Giriş Yapın
k=30000;
while k<35000
    x(k)=x(k)/(1+4*sin(((k-30000)/5000)*3.14));
    k=k+1;
end
Ses dosyası ektedir.

Buradaki sin fonksiyonun başındaki katsayıyı arttırarak heceleme hissini baskın hale getirebilirsiniz. Fakat L harfi heceleme işi nasıl olur bilmiyorum helo kelimsesindeki L kısmını yanyana kopyaladım fakat çok hoşuma gitmedi sildim.

kodun son hali:


Kod: Üye Olmadan Linkleri Göremezsiniz. Üye Olun veya Giriş Yapın
[y1,Fs1] = audioread('sinyal_1.wav');
[y2,Fs2] = audioread('sinyal_3.wav');
[y3,Fs3] = audioread('sinyal_3.wav');



subplot(4,1,1), plot(y1);
subplot(4,1,2), specgram(y1, 512, Fs1);
%sound(y1,Fs1)

y1 = y1*4;
n=4;



Wn=8000*2/Fs1;
[b a]=butter(n,Wn,'low');
y1_lp=filter(b,a,y1);
%x = medfilt1(x,3);

Wn=10*2/Fs1;
[b a]=butter(n,Wn,'high');
y1_lp=filter(b,a,y1_lp);


x = medfilt1(y1_lp,5);
 
 

k=1;
while k<15000
    x(k)=0;
    k=k+1;
end

k=30000;
while k<35000
    x(k)=x(k)/(1+2*sin(((k-30000)/5000)*3.14));
    k=k+1;
end


k=50000;
while k<length(x)
    x(k)=0;
    k=k+1;
end


subplot(4,1,3), plot(x);
subplot(4,1,4), specgram(x, 128, Fs1);
sound(x,Fs1)

Başlık: Ynt: Sinyal modelleme
Gönderen: semiconnector - 19 Temmuz 2017, 14:05:21
merhaba hocam,
güzel olmus tesekkür ederim. Siddeti, yok edilecek kisim daralma genisleme ayarlabiliyor. Acaba ayni yerde Alanin tamami degilde, Acaba spektogramda sesli bölgede kücük bir bölge, belli bir aralik kontrol edilebilir mi?
 Birde yolladigim gui de Tepe frekanslari ve band genisliginden olusturulan sentez hakkinda düsüncelerinizi duymak isterim.
Başlık: Ynt: Sinyal modelleme
Gönderen: semiconnector - 19 Temmuz 2017, 14:16:10
Hocam bir de sadece belirli bir bölgedeki genligi nasil yükseltebiliriz? Yani mesela bütün kelimenin degilde sadece bir hecenin daha anlasilir olabilmesi icin denemek istiyordum.
Başlık: Ynt: Sinyal modelleme
Gönderen: semiconnector - 21 Temmuz 2017, 18:19:24
Kod: Üye Olmadan Linkleri Göremezsiniz. Üye Olun veya Giriş Yapın
k=30000;
while k<35000
    x(k)=x(k)/(1+4*sin(((k-30000)/5000)*3.14));
    k=k+1;
end

Hocam genlik olayini hallettim. Ama bilmek istedigim spektral yumusatma yaparken yukaridaki sin ile formülü neye göre yazdiginiz.
Başlık: Ynt: Sinyal modelleme
Gönderen: Uykusuz - 22 Temmuz 2017, 14:24:56
Merhaba

Hocam aslında oldukça basil. Helo kelimesinedeki lo kısmının neresi olduğu az çok belli oluyor. Burayı belirledikten sonra grafikte kaçıncı örnekler arası olduğu görünüyor.  Bizim grafikte 30000 - 35000 arası 5000 örneklik bir kısımda yer alıyor. Buradan bir while döngüsü ile ilgili kısımlar silinebilir. Benim burada sin fonksiyonu kullanmamın sebebi de silme işlemnin başladığı yer ile bittiği yer anlarında  gürültü oluşmasını engellemek için yumuşak başlayış ve yumuşak bitişi sağlamak. Sin eğrisini yarım peryodunu olan pi sayısı (3.14) tam silinmek istenen alana oturtarak bu işlemi gerçekleştirdik. Yani 30000 ile 35000 arasında yarım sin eğrisi katsayısı kadar bir bölme işlemi yapılıyor.

Aynı işlemi genlik arttırmak için de kullanabilirsiniz tek yapmanız gereken bölme yerine çarpma yapmak ve katsayıyı ayarlamak.

Burada sin fonksiyonu kullanamadan direkt olarak azaltma işlemi oluştursaydık başlangıç bitiş anlarında pıt diye başlangıç bitiş sesleri oluşacaktı.

Yollamış olduğunuz kodları anlayabilmem için biraz zamana ihtiyacım var hocam aslına bakarsanız bu konular ile daha önceden pek ilgilenmediğim için ilk bakışta anlayamadım. Daha önceden arayüz de yazmadığım için anlamam çok zor.  :)
Başlık: Ynt: Sinyal modelleme
Gönderen: semiconnector - 22 Temmuz 2017, 21:04:20
merhaba Uykusuz hocam cok sagol güzel anlatmissiniz. Evet o dediginiz baslangic ve bitisteki Pit seslerini ben Hazir Programlarda bile duyuyordum:) sin gercekten cok iyi olmus. Tesekkur ederim. Benim arayüzde önemli olan sentez butonu altindaki sesi brlestikten sonraki filtre. Sadece bir filtre ile yapiyorum. Bel ki buraya daha mverimli bir filtre kullanilabilir ;)
Başlık: Ynt: Sinyal modelleme
Gönderen: semiconnector - 22 Temmuz 2017, 23:10:36
Hocam biz basta filtreleme yaptik ama bir filtreleme daha ihtiyacim var ??? 4 sinyal yolluyorum. Sinyal_1_sentezsiz = Direk sizin yazdiginiz Program ile hem gürültülü yerleri attik hem de  genlik yükseltilmistik.
Sinyal_1_sentezli = Filtrelenmis sentezden sonra cikan sonucu sentez icinde koydum ve gördügüm sentezleme butonunun altindaki sentez ve filtre, düzelttigimiz sinyalin tekrar frekansini ve genligini artirmis gürültü yapmis :)
Sinyal_1_sentezdensonra_tekrarfiltre = Yukarida cikan spektral yumusatmayi ayarlamak icin tekrar sizin yazdiginiz filtreye koydum ve spektral kismi yumusatabildim. Aslinda ses de sonuclar degismiyor ama Spektogram da göründügü gibi sentezden sonra sinyale anladigim fazla gürültü geliyor. En son kisimda yazdigimiz filtreleme yeterli gelmiyor. 2. Sinyalden sonuncuya gecerken filtrelemeyi modifiye etmemiz gerekiyor hocam. Anlatabildin mi tam bilemiyorum ::)
dxpspektrum = Spektrum bizim sese ait degil herhangi sinyal internetten ekledim.
En sonunda Spektrum görüntüsünü bastaki Spektrum tipi gibi elde edebilir miyiz?  :-\
Başlık: Ynt: Sinyal modelleme
Gönderen: Uykusuz - 07 Ağustos 2017, 08:09:01
Hocam merhaba,
Sentezden sonraki filtrelenecek nihai ses dosyasını ekleyebilir misiniz incelemek için.
Başlık: Ynt: Sinyal modelleme
Gönderen: semiconnector - 08 Ağustos 2017, 12:55:08
Merhaba Uykusuz hocam,

sentez sonrasi ses dosyasini ekte bulabilirsiniz. Bu size yolladigim hastanin normal sesi sentezlendikten sonraki hali ve Formant hesapla butonuna bastiginizda cikan degerleri degistirdikce sesde degismeler oluyor ama tam anlami ile düzelme yok. Sizin dediginiz gibi hastanin nefes kismini düzeltilbilecek bir filtre ya da yöntem bulabilirsek süper olur. O zaman hastanin her söyledigi kelime sonrasinda bir sekilde gürültünün yok olmasi ve sonrasinda temiz bir sinyal olabilir diye düsünüyorum.
Başlık: Ynt: Sinyal modelleme
Gönderen: Uykusuz - 14 Ağustos 2017, 08:51:38
Merhaba Hocam,
Hastanın konuşmaya başladığı andaki nefes sesini tüm konuşmadan çıkararak bişeyler yapmaya çalıştım fakat pek bir işe yaramadı maalesef.

Kod: Üye Olmadan Linkleri Göremezsiniz. Üye Olun veya Giriş Yapın
[y1,Fs1] = audioread('sinyal_1.wav');
[y2,Fs2] = audioread('sinyal_3.wav');
[y3,Fs3] = audioread('sinyal_3.wav');



subplot(4,1,1), plot(y1);
subplot(4,1,2), specgram(y1, 512, Fs1);
%sound(y1,Fs1)

y1 = y1*4;
n=4;



Wn=8000*2/Fs1;
[b a]=butter(n,Wn,'low');
y1_lp=filter(b,a,y1);
%x = medfilt1(x,3);

Wn=10*2/Fs1;
[b a]=butter(n,Wn,'high');
y1_lp=filter(b,a,y1_lp);


x = medfilt1(y1_lp,5);
 
 

k=1;
while k<15000
    x(k)=0;
    k=k+1;
end

k=30000;
while k<35000
    x(k)=x(k)/(1+4*sin(((k-30000)/5000)*3.14));
    k=k+1;
end


k=50000;
while k<length(x)
    x(k)=0;
    k=k+1;
end


k=15000;
while k<60000
    x(k)= x(k) - x(15000+(mod(k,1000)));
    k=k+1;
end

subplot(4,1,3), plot(x);
subplot(4,1,4), specgram(x, 128, Fs1);
sound(x,Fs1)

Başlık: Ynt: Sinyal modelleme
Gönderen: semiconnector - 14 Ağustos 2017, 10:45:51
Merhaba Hocam,
sanirim sorunu buldum ama ilerleyemiyorum. Filtrelemeler evet iyi ama sesin malesef karakteristigini degistirmiyor. Sanirim ilk önce karakteristigini degistirmek gerektiriyor. Ben Size dosya  yolluyorum buradan olmuyor. Program sesin karakteristik özelligini degistiriyor ama sadece temiz sesin üzerinde anlasilirlik olarak baya etkili oldugunu görüyorum. Kadin sesi nerede ise erkek sesi oluyor oda acayip :)  ama Hastanin sesi anlasilamayacak kadar yayiliyor boguk bir ses dinleniyor. Sesler dosyanin icerisinde. Acaba hastanin ses karakteristigini nasil düzenleyebiliriz ya da degisen sesi hangi parametreler ile degistirebiliriz. Yardimci olabilirseniz sevinirim.
Başlık: Ynt: Sinyal modelleme
Gönderen: Uykusuz - 14 Ağustos 2017, 11:33:56
Hocam kadın sesinin erkek gibi çıkmasının sebebi sample rate oranında sesi göndermiş olduğunuz kodda play edilmemesinden kaynaklanıyor.


Kod: Üye Olmadan Linkleri Göremezsiniz. Üye Olun veya Giriş Yapın
% playing all the sound files
for i = 1:3,
    if(i==1),
        display('Playing the original sound file...');
        soundsc(x,8000);
    elseif(i==2),
        display('Playing the 16 kbps CELP generated sound file...');
%         soundsc(xhat1,8000);
    elseif(i==3),
        display('Playing the 9.6 kbps CELP generated sound file...');
%         soundsc(xhat2,8000);
    end
end


Burada görüldüğü üzere play edilen kısımda sesler hep 8000 Fs ile play ediliyor. Kodu aşağıdaki gibi ufak bir değişiklik yaparak problemin düzeldiğini göreceksiniz.


Kod: Üye Olmadan Linkleri Göremezsiniz. Üye Olun veya Giriş Yapın
% playing all the sound files
for i = 1:3,
    if(i==1),
        display('Playing the original sound file...');
        soundsc(x,Fs);
    elseif(i==2),
        display('Playing the 16 kbps CELP generated sound file...');
    %     soundsc(xhat1,Fs);
    elseif(i==3),
        display('Playing the 9.6 kbps CELP generated sound file...');
     %    soundsc(xhat2,Fs);
    end
end


Hocam bu tür çalışmalar hep eldeki kaydedilmiş dataya özel çalışmalar. Gerçek yaşamda gerçek zamanlı olarak çalışması çok zor benim düşüncem. Sizin de bahsettiğiniz gibi sesin karakteristiği ile oynamak gerekiyor. Bu da uzmanlık alanı gerektiren bir iş.

Filtre bir yere kadar  ;D
Başlık: Ynt: Sinyal modelleme
Gönderen: semiconnector - 13 Eylül 2017, 13:01:56
Merhaba hocam,

ben size yolladigim sinyalin sorununu biraz arastirdim. Farketim ki sentez sonrasinda sinyal bozulma yasamadan karakteristigi ile oynadigim icin x akse 18000 yani 48000 Hz den 8000 Hz e düsüyormus. O yüzden de x aksede ki frekans degeri 18000 gözüküyor. Tamam buraya kadar sorun yok. Sizin onceden uyguladiginiz filtrelemede sorun yasayinca Programdan cikardim ve hece kisminda yumusatma yapmak icin degerleri ayarladim, denedim. Yine olmadi. Sizde bakabilirseniz sevinirim. Sesi ve Plot görüntüsünü ekde bulabilirsiniz.

Kod: Üye Olmadan Linkleri Göremezsiniz. Üye Olun veya Giriş Yapın
[y,Fs] = audioread('sentez_deneme_13.09.wav');
figure;
subplot(4,1,1),
plot(y);
subplot(4,1,2),
spectrogram(y(:,1), 1024, 3/4*1024, [], Fs, 'yaxis')
colormap (jet);

x = medfilt1(y,5);
 
k=1;
while k<18000
    x(k)=0;
    k=k+1;
end

k=7500;
while k<8000
    x(k)=x(k)/(1+6*sin(((k-7500)/500)*3.14));
    k=k+1;
end


k=18000;
while k<length(x)
    x(k)=0;
    k=k+1;
end


subplot(4,1,3),
plot(x);
subplot(4,1,4),
spectrogram(x(:,1), 1024, 3/4*1024, [], Fs, 'yaxis');
% colormap (hsv);
colormap (jet);
soundsc(x,Fs)