Soru sormatlab ile frekans domaininde, frekans ekleyip çıkartarak ses sinyalini inceltip kalınlaştırma
xcentus tarafından 4 yıl önce soruldu

Matlab kullanarak bir ses dosyasının fft'sini aldıktan sonra frekans bölgesini değiştirerek veya kaydırarak sesi inceltip kalınlaştırmak istiyorum.örneğin sol sesinden bu şekilde la sesine nasıl geçebilirim? Yardımcı olabilirseniz sevinirim,teşekkürler.

6 Cevap
sayginer Yönetici tarafından 4 yıl önce cevaplandı

Anladığım kadarı ile:

  1. Elinizde zamana bağlı sesin şiddetini içeren veri var.
  2. Bu verinin FFT'sini (Fast Fourier Transform) alarak Frekans dağılımını görmek istiyorsunuz.
  3. FFT'sini aldığınız veride oynama yapmak istiyorsunuz.
  4. Oynama yaptığınız Şiddet-Frekans grafiğini 1. maddedeki Şiddet-Zaman formuna dönüştürmek istiyorsunuz.

Doğru mudur?
 

xcentus tarafından 4 yıl önce cevaplandı

Evet,anlatmak istediğim adımlar aynen bu şekilde.Yardımcı olursanız sevinirim,şimdiden teşekkürler.

sayginer Yönetici tarafından 4 yıl önce cevaplandı

Hangi aşamada takıldınız?

xcentus tarafından 4 yıl önce cevaplandı
[data,fs]=audioread('C:\Users\acer\Desktop\ukusol.wav');
data_fft = fft(data);
plot(abs(data_fft(:,1)));
title('ukusol');

Görüldüğü gibi en başta bir ses dosyasını matlab'a tanıtıp fft'sini aldım.Daha sonra ise çizdirdim.
burada sorunum bu sinyali sağa ve sola kaydırmak.Bunu yaptığımda teorik olarak sinyalin frekansı
değişecek.Örnek olarak eğer 'la' notası ile bir kayıt aldığımda bunu 'si' notasına çevirebilmek
istiyorum.Bunu nasıl yapabilirim?
xcentus tarafından 4 yıl önce cevaplandı

Veya bunu yapmamın başka herhangi bir yöntemi var mı acaba?

sayginer Yönetici tarafından 4 yıl önce cevaplandı

Merhaba,
Eğer FFT'sini aldığınız veriyi yani data_fft(:,1) verisinin değerlerini kaydırmak istiyorsanız doğrudan bütün vektörün elemanlarını kaydırmak istediğiniz miktara göre sabit bir sayıyla toplayabilirsiniz. Tabi böyle yaptığınızda başlangıç noktanızdan eksilme, son frekans noktanızda da artış olacaktır.
Eğer istediğiniz orijinal veriniz üzerinde değişiklik yapmak ve daha sonra tekrar FFT'sini aldığınızda bu kez kaymış değerini görmek için orijinal verinizi bir kompleks üstel sayı ile çarparak frekansını kaydırabilirsiniz [1].

x_{\text{kay}}[n] = x[n] e^{-\frac{j 2 \pi f_{\text{kay}} n}{f_ornekleme}}, \ \ n = 0, 1, \ldots , N-1
Y_{\text{kay}}[k] = FFT\left[x_{\text{kay}}[n]\right]

[1] https://dsp.stackexchange.com/questions/1991/how-to-shift-the-frequency-spectrum