Etkili bir ses dalga formu zirveleri sınırlamak için bir formül arıyorum. Bu, bir ses seviyesini korumak için amplifikatör kazancını kontrol edecek bir "otomatik ses kontrolü" uygulaması değil, daha ziyade tek tek zirveleri ("yumuşak" kısaltmak) sınırlamak istiyorum. (Bunun harmonikleri getirdiğini biliyorum, ama verileri dinlemeye değil analiz etmeye çalışıyorum.)
Şimdiye kadar (çok kaba) formülüm:
factor = (10 * average / level) + exp(-sqrt(0.1 * level / average))
Burada seviyesi ani ses seviyesi, ortalama tarihsel ortalama ses düzeyi ve faktör "düzeltilmiş" seviyesi (üretmek için kullanılan bir çarpanı faktör katı seviyesi ).
Ayrıca, bu çarpan yalnızca 1'den küçük bir değeri hesapladığında uygulanır. Aksi takdirde seviye ayarlanmadan bırakılır.
Amaç, ayarlanan seviyeyi geçmiş ortalamanın bir katıyla (bu formülle yaklaşık 15x) sınırlamaktır. Bu formül ihtiyacım olan sorta, ama sayılar büyüdükçe bir "daldırma" sergiler. Yani, ayarlanan seviye (yani, faktör zaman seviyesi ) , ayarlanmamış seviyenin arttığı bir noktaya kadar artar, ancak asimptotik olmaktan ziyade, aslında küçülmeye başlar. (Aslında, birinci faktör öncelikle formülün aşırı yüksek değerlerle sıfıra gitmesini önlemek için eklenmiştir.)
(Değerleri bu şekilde sınırlamak istemenin sebebi, geçici gürültünün öncelikle ses seviyesinin çalışma ortalamasını ciddi şekilde etkilememesidir. Ancak horlama "geçici gürültü" analiz edilirken oldukça önemlidir, bu yüzden basitçe sustururum .)
Herkes daha iyi bir şey önerebilir mi? (Görünüşe göre, asimptotik davranış, istemediğinizde üretilmesi kolay, ancak bunu yaparken zor.)