Saha tespitinde harmonik ürün spektrumu sınırlamaları


10

HPS kullanarak bir adım algılama algoritması yaptım ve bir sorunla karşılaşıyorum. Ben sinyal işleme ile bir acemi ve bu site daha önce bana yardımcı oldu, bu yüzden sormalıyım rağmen.

Daha yüksek sahalar için ( eg. >C6:1046.50hz) HPS'den çöp verileri almaya başlıyorum. Saha ne kadar yüksek olursa o kadar çok çöp alırım (çöple oktav hatası veya harmonik olmayan ve 1Hz-20Hz civarında olan frekansları kastediyorum)

Deneysel olarak gözlemlediklerim:

  1. sonuçlar daha yüksek sahalar için en kötüsüdür, eğer temel A6'nın üzerindeyse, sadece çöp verileri alırım.

  2. FFT çok yüksek bir adım için bile iyi çalışıyor,

  3. HPS için dikkate aldığım harmonik sayısını azaltırsam, çöp azalır, ancak bu temel ve harmonikler arasında ayrım yapmayı zorlaştırır.

İşte benim algoritma:

->raw buffer -> hann window, 16384 samples, 50% overlap -> zero padding -> FFT -> HPS

Herhangi bir yardım takdir!

GÜNCELLEME 1: Eklemek istediğim birkaç şey daha var:

  1. Kaydettiğim örnekleme hızı 44100 Hz
  2. Bu davranışın bir gitarda zar zor görülebildiğini, ancak dijital piyanoda çok görünür olduğunu gördüm (aynı çalınan nota için)
  3. İşte benim hps algoritması, belki daha büyük deneyime sahip biri bir problemi tespit edebilir.

    int hps(float* spectrum, int spectrumSize, int harmonics) {
    
    int i, j, maxSearchIndex, maxBin;
    maxSearchIndex = spectrumSize/harmonics;
    
    maxBin = 1;
    for (j=1; j<=maxSearchIndex; j++) {
        for (i=1; i<=harmonics; i++) { 
            spectrum[j] *= spectrum[j*i];
        }
        if (spectrum[j] > spectrum[maxBin]) {
            maxBin = j;
        }
    }
    
    // Fixing octave too high errors    
    int correctMaxBin = 1;
    int maxsearch = maxBin * 3 / 4;
    for (i=2; i<maxsearch; i++) {
        if (spectrum[i] > spectrum[correctMaxBin]) {
            correctMaxBin = i;
        }
    }
    if (abs(correctMaxBin * 2 - maxBin) < 4) {
        if (spectrum[correctMaxBin]/spectrum[maxBin] > 0.2) {
            maxBin = correctMaxBin;
        }
    }
    
    return maxBin;
    }
    

1
Örnek oranı nedir? ADC'den önce hangi kenar yumuşatma filtresine sahipsiniz?
Martin Thompson

Kayıt örnek hızım 44100 Hz, daha önce bahsetmediğim için üzgünüm.
Valentin Radu

1. HPS hesaplamasında kullanılan ara spektrumları ve ürünleri çizmeniz ve yanlış değerleri nereden aldığını görmeniz gerekir. 2. Gitar ve piyano uyumsuzdur , bu da zirvelerin mükemmel bir şekilde hizalanmamasına neden olur. Bunun ne kadar bir etkisinin olacağından emin değilim, ancak HPS mükemmel harmonik spektrumları varsayar.
endolith

Yanıtlar:


3

Bu daha yüksek aralıklarda sinyalde çok az harmonik kısmi mevcut olabilir. HPS algoritması oldukça basittir ve temel arka plandan çıkana kadar istiflemeyi sürdürmek için bu üst harmoniklere dayanır. Tabii ki merak etmeliyiz, örnekleme oranınız nedir? 8000 hz ise, sadece 1000 hz'lik bir perdenin 3 harmonisine yer vardır ...


44100 Hz'de kayıt yapıyorum, ama yine de cevabınız bana bunu düşündürdü. Belki de ilgili bir şey ve orijinal FFT'imde bulduğum zirveye bağlı olarak hps'mde kaç harmoniğin dikkate alınacağına karar vermeliyim. Gözlemlediğim başka bir şey, yaylı çalgılarla elektrikli piyanomdan daha iyi çalıştığıdır, bunun nedeni harmoniklerin piyano davasında daha haftalık olması olabilir mi?
Valentin Radu

mindnoise: Eğik telli çalgılar harmonikken, koparılmış veya vurulmuş telli çalgılar en.wikipedia.org/wiki/Inharmonicity'ye sahiptir . Sorunun bir parçası olup olmadığından emin değilim
endolith

@endolith özellikle şunlar olabilir: "Teller ne kadar az elastikse (yani, daha kısa, daha kalın ve daha sert ise), daha fazla uyumluluk gösterirler ." ve bu tür dizelerde hatayı alıyorum (yüksek notlar). Aslında, hata oluştuğunda temel her zaman FFT'imdeki en güçlü frekanstır, bu yüzden kesinlikle harmonikler veya hps algoritması ile ilgilidir, ancak 1500 hz temel için neden 20-50hz çöp aldığımdan emin değilim. hps algoritmasını yayınlayacaktır.
Valentin Radu

1
Mindnoise: "Uyumsuzluk piyanodaki en düşük ve en yüksek notaları büyük ölçüde etkiler ... En uzun olması gereken en düşük teller piyanonun büyüklüğü ile sınırlıdır. Kısa bir piyano tasarımcısı kullanmak zorunda kalır kütle yoğunluğunu artırmak için kalın teller ve böylece uyumsuzluk içine sürüklenir.Yüksek teller en büyük gerilim altında olması gerekir, ancak aynı zamanda düşük bir kütle yoğunluğu sağlamak için ince olmalıdır.Çelik sınırlı güç piyano tasarımcısı çok kısa kullanmaya zorlar kısa dalga boyları böylelikle uyumsuzluk yaratan dizeler. "
endolit

2

Bazı enstrümanlar için üretilen önemli harmoniklerin sayısı farklı zift aralıklarında değişebilir. Bazı fiziksel enstrümanlar için en düşük ve en yüksek notaların kısmi değerleri daha fazla uyumsuzluk gösterebilir. Fs / 2'nin altındaki kenar yumuşatma filtresi kapatmasının altına sığabilecek harmoniklerin sayısı, çok yüksek notlar için kesinlikle daha düşük olacaktır. HPS hatve kestirimciniz bu faktörleri dikkate almak istiyor.

Bazı enstrümanların geçici geçişi, bazı ziftlerin HPS arama bölgesi veya bunların önemli harmonikleri ile çakışabilecek bir harmonik spektral gürültü bandı üretebilir.

Potansiyel olarak, eğer ses ADC'sinden önceki düşük geçiş filtresi yeterince iyi bir durdurma bandı zayıflamasına sahip değilse, çok yüksek frekansların üst tonları Fs / 2'nin etrafına sarılabilir.

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.