Ses sinyalinin yeniden düzenlemesi Gönderen Spectrogram


19

% 50 örtüşmeli Hamming Window kullanarak büyüklük spektrogramını çıkardığım bir dizi şarkım var. Spektrogram çıkarıldıktan sonra, Temel Bileşenler Analizi (PCA) kullanarak bazı boyutsallık azalması yaptım. Düşük boyutluluğa indirgedikten sonra, spektrogramları daha düşük boyutlardan yeniden yapılandırdım. Şimdi, orijinal spektrogram ve yeniden yapılandırılmış spektrogram arasında bir hata olacaktır. Bu spektrogramı ses sinyaline geri dönüştürmek ve oynatmak istiyorum, böylece daha düşük boyutlardan ne zaman yeniden oluşturulduğunu, ses sesini nasıl bilebilirim.

Matlab'da herhangi bir fonksiyon var mı? ses sinyaline bir büyüklük Spektrogram dönüştürmek için ??


2
Gerçekten STFT ve ters STFT'yi istiyorsunuz. "Spektrogram" sadece STFT büyüklüğünün bir ısı haritası için bir isimdir ve tek başına büyüklük bir sinyali yeniden oluşturmak için yeterli değildir. Mathworks.com/matlabcentral/fileexchange/12902-dafx-toolbox/… adresine bakın ?
endolith

4
@ Endolith'in yorumunu genişletmek için, STFT'den spectorgrama gittiğinizde eksik olan şey, sinyalin frekans alanı sunumunun hayati bir bileşeni olan faz bilgisidir.
Bjorn Roche

Bu, eğer orijinal ses sinyalini yeniden yapılandırmak istersem, hem genliğin hem de STFT'nin fazına ihtiyacım var demektir? Ancak genel olarak ses özellikleri oluşturmak için | S | kompleks no genliği ne kullanılır ve faz bilgisi atılır. M olarak hesapladığım mel spektrogramında PCA gerçekleştirdim , mel filtre bankası çarpma matrisidir. Peki verilen ses sinyalini nasıl yeniden yapılandırıyorsunuz, PCA'dan sonra X'e yaklaşımı var mı? X,X=log(M|S|)X^
user76170

@ endolith: mathworks.com/matlabcentral/fileexchange/12902-dafx-toolbox/… 'ı verdiğiniz bağlantıyı kullanmayı denedim. Faz ve genlik bilgisini her ikisini de kullandım ( yukarıdaki fonksiyona girdi olarak karmaşık ). bunu kullanarak sinyali çalmayı denedim ve kulağa takılıyor gibiydi. Bu neden oluyor? Daha sonra orijinal sinyal ile ters STFT prosedüründen elde edilen norm arasındaki normu hesapladım ve 3.46 * 10 ^ 3 gibi büyük bir değer gösterdi. Bu neden olur? S
user76170

@ user76170: dalgalı, STFT'nin sinyali bazen üst üste binen çerçeveye böldüğü ve bunları oluşturuldukları şekilde yapılandıracağınız için ya da her birinde süreksizlik olacak. Bu bağlantıdan STFT ve ISTFT işlevlerini kullandınız mı? Bakın Sorunun ne görebilmek için dalgalı sinyalin dalga at.
endolith

Yanıtlar:


15

Spektrogram, üst üste binen pencerelerden kısa süreli fourrier dönüşümünün büyüklüğü olarak hesaplandıysa , spektrogram dolaylı olarak bazı faz bilgileri içerir.

Aşağıdaki tekrarlamalar işi yapar:

xn+1=istft(Stecrübe(benaçı(KZFD(xn))))

spektrogram, stft ileri-kısa zaman Fourier dönüşümü, isft ters-kısa zaman Fourier dönüşümüdür.SKZFDISFT


Doğrudan @edouard'a yorum yapmak istiyorum, ancak yeterli itibarım yok. Herkes biliyor mu onun cevabını mı? Ayrıca x 0'ı nasıl başlatırım ? Sadece rastgele? Mi x n tekrarda komple yeniden sinyal n ya da sadece n inci katsayısı x ? Teşekkürler. benx0xnnnincix
PR

1
@PR Bu birimin hayali numarası, . -1
Peter K.

3

Doğru şeyi yapan @edouard'ın cevabını anlamak için biraz zorlandım. Yeniden yapılandırmamı uygulamak için kullandığım /signals//a/3410/9031 ile karşılaştırın .

Bu Not hayali bir sayıdır ve x , n de yeniden sinyal n inci yineleme. X 0'ın ses sinyalinin uzunluğunda rastgele bir vektör olmasıyla başlayın . Benim için iyi görünen bir sonuç elde etmek için birkaç iterasyon yeterliydi. Orijinal sinyale olan mutlak hata yine de oldukça yüksekti. Aynı şekilde, genel olarak aynı yapıları göstermesine rağmen, yeniden yapılandırılmış sinyalden üretilen oluşturulan spektrogram I oldukça farklı büyüklüklere sahipti.benxnnincix0


2

Büyüklük yanıtı bir spektrogramı diğerine dönüştüren bir filtre tasarlamak için yeniden oluşturulan spektrogramı orijinal spektrograma karşı kullanabilirsiniz. Daha sonra bu filtreyi orijinal zaman etki alanı verilerine veya üst üste binme hızlı evrişim filtresi eklemek / kaydetmek için orijinal FFT'lere uygulayabilirsiniz.


@ hotpaw2: Yanıtınızı anlamadım, neden bir spektrogramı diğerine dönüştürmek isteyeyim? Spektrogram matrisi verilen ses sinyalini yeniden yapılandırmak istiyorum . Bir spektrogramdan diğerine dönüşen bir filtre tasarlama ve üst üste binme hızlı evrişim filtrelemesi ekleme / kaydetme gereksinimi nedir? Sesi yeniden oluşturmak istiyorum | S | böylece PCA'nın ne kadar etkili olduğunu görebiliyorum. Diyelim ki biri orijinal ses sinyali diğeri alt boyutlardan yeniden oluşturulmuş iki klip çalabilirim | S | |S||S||S^|
user76170

2
Spektrogram matrisi kayıplıdır, bu nedenle yeniden yapılandırma için kullanılamaz. Ancak, istediğiniz spektrogramı üretmek için bir dönüşümü tersine çevirebilirseniz, orijinal kayıplı olmayan zaman alanı verilerine veya muhtemelen orijinal karmaşık sonuç FFT'ye uygulayabilirsiniz.
hotpaw2

S|S||S|

1
@ user76170 Uzun ve kısa, sinyalinizi yeniden yapılandırmadan önce karmaşık STFT'ye ihtiyacınız var. Sadece STFT büyüklüğüne sahipseniz, bu yeterli değildir. Bu kuralın istisnaları vardır, ancak genellikle sadece büyüklük değil, karmaşık STFT'ye ihtiyacınız vardır.
Tarin Ziyaee

|S||S^|

-1

Hesaplama karmaşıklığından endişe etmiyorsanız, ses sinyalini spektrogramdan ters çevirmek için Griffin-Lim algoritmasını kullanın.


Cevabınızı biraz genişletebilir misiniz? Belki de algoritmaya bir temsili makale veya bağlantı eklemek ve bu soru ile ne kadar alakalı olduğunun kısa bir açıklaması (?)
A_A 13:17

Sorunuzu doğru bir şekilde anlarsam, kısaca, orijinal faz bilgilerini kullanmadan ses sinyalini bir spektrogramdan yeniden yapılandırmak istersiniz. Griffin-Lim algoritması girdi olarak bir spektrogram matrisi gerektirir ve fazı tekrarlı olarak yeniden yapılandırır. Sen kağıt başvurabilir ieeexplore.ieee.org/document/1164317
Jitendra Dhiman

Bana bildirdiğiniz için teşekkür ederim. Sadece bu noktayı açıklığa kavuşturmak için. Bu yanıt, inceleme kuyruğumda "düşük kalite" olarak belirdi. "Gözden geçirme" açısından sahip olduğum seçenekler arasında "iyileştirme" için yorumlar sunulması yer alıyor. Bu cevabın DSP.SE'de yaygın olarak karşılaşılan cevap türleriyle aynı çizgiye gelmesi için, OP'nin ne istediğiyle nasıl ilgili olduğunu göstermek için biraz Griffin Lim algoritmasına girmesi gerekecektir. İleride yapacağınız düzenlemelerde doğrudan cevabınıza başvurabilirsiniz. Bunun amacı özellikle "beni" tatmin etmemek değil, bir soruya anlamlı bir dizi aydınlatıcı cevap vermek
A_A

Orijinal FFT bilginiz yoksa en iyi cevap burada (Griffin-Lim kullanarak). timsainb.github.io/…
Artemi Krymski
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.