Titreşim dalga formlarını analiz etme

Android cihazlardaki en yaygın titreşim aktüatörleri doğrusal rezonanslı aktüatörlerdir (LRA). LRAs, aksi takdirde yanıt vermeyen bir cam yüzeyde düğme tıklama hissini simüle eder. Net ve kısa bir tıklama geri bildirimi sinyali genellikle 10 ila 20 milisaniye sürer. Bu his, kullanıcı etkileşimlerinin daha doğal olmasını sağlar. Sanal klavyelerde bu tıklama geri bildirimi, yazma hızını artırabilir ve hataları azaltabilir.

LRAs'nın birkaç yaygın rezonans frekansı vardır:

  • Bazı LRAs'ların rezonans frekansları 200-300 Hz aralığındadır. Bu aralık, insan cildinin titreşime en duyarlı olduğu frekansla çakışır. Bu frekans aralığındaki titreşim hissi genellikle yumuşak, keskin ve nüfuz edici olarak tanımlanır.
  • Diğer LRA modellerinin rezonans frekansları daha düşüktür (yaklaşık 150 Hz). Bu modellerde his, nitelik olarak daha yumuşak ve daha dolgundur (boyut olarak).
Bileşenler arasında, yukarıdan aşağıya doğru kapak, plaka, orta mıknatıs, 2 yan mıknatıs, kütle, 2 yay, bobin, esnek devre, taban ve yapıştırıcı bulunur.
Doğrusal rezonanslı aktüatörün (LRA) bileşenleri.

İki farklı frekansta aynı giriş voltajı verildiğinde titreşim çıkış genlikleri farklı olabilir. Frekans, LRA'nın rezonans frekansından ne kadar uzak olursa titreşim genliği o kadar düşük olur.

Belirli bir cihazın dokunsal efektleri hem titreşim aktüatörünü hem de sürücüsünü kullanır. Overdrive ve aktif frenleme özelliklerini içeren dokunsal sürücüler, LRA'ların yükselme süresini ve çınlamasını azaltarak daha hızlı tepki veren ve net bir titreşim sağlar.

Titreşim motoru çıkış hızlandırması

Frekans-çıkış-ivme eşlemesi (FOAM), belirli bir titreşim frekansında (Hertz cinsinden) elde edilebilecek maksimum çıkış ivmesini (G cinsinden) açıklar. Android 16'dan (API düzeyi 36) itibaren platform, VibratorFrequencyProfile aracılığıyla bu eşlemeye yerleşik destek sunar. Dokunsal efektler oluşturmak için bu sınıfı basic ve advanced zarf API'leriyle birlikte kullanabilirsiniz.

Çoğu LRA motorunun FOAM'ında tek bir tepe noktası bulunur. Bu nokta genellikle rezonans frekansına yakındır. Sıklık bu aralıktan uzaklaştıkça ivme genellikle üstel olarak azalır. Eğri simetrik olmayabilir ve motoru hasardan korumak için rezonans frekansı civarında bir plato içerebilir.

Yandaki grafikte, LRA motoru için bir FOAM örneği gösterilmektedir.

Frekans yaklaşık 120 Hz'e yükseldiğinde ivme üstel olarak artar. İvme, yaklaşık 180 Hz'e kadar sabit kalır ve bu noktadan sonra azalır.
LRA motoru için örnek FOAM.

İnsan algısı algılama eşiği

İnsan algısı algılama eşiği, bir kişinin güvenilir bir şekilde algılayabileceği titreşimin minimum ivmesini ifade eder. Bu seviye, titreşim frekansına göre değişir.

Yandaki grafik, zamansal frekansın bir fonksiyonu olarak ivme cinsinden insan dokunma algısı algılama eşiğini gösterir. Eşik verileri, Bolanowski Jr.'ın 1. Şekli'ndeki yer değiştirme eşiğinden dönüştürülür. S. J. ve diğerlerinin 1988 tarihli makalesi, "Four channels mediate the mechanical aspects of touch.".

Android, bu eşiği otomatik olarak BasicEnvelopeBuilder içinde işler. Bu, tüm efektlerin, titreşim genliklerini insan algısı algılama eşiğini en az 10 dB aşacak şekilde üreten bir frekans aralığı kullandığını doğrular.

Frekans yaklaşık 20 Hz'e yükseldiğinde, insan algılama eşiği logaritmik olarak yaklaşık -35 dB'ye yükselir. Eşik, yaklaşık 200 Hz'e kadar sabit kalır. Bu noktadan sonra yaklaşık -20 dB'ye kadar kabaca doğrusal olarak artar.
İnsanın dokunsal algı eşiği.

Bir online eğitimde ivme genliği ile yer değiştirme genliği arasındaki dönüşüm daha ayrıntılı olarak açıklanmaktadır.

Titreşim hızlanma seviyeleri

Titreşim yoğunluğunun insan algısı, bir algı ölçüsü olarak, titreşim genliğiyle (fiziksel bir parametre) doğrusal olarak artmaz. Algılanan yoğunluk, aynı frekansta algılama eşiğinin üzerindeki dB miktarı olarak tanımlanan duyum düzeyi (SL) ile karakterize edilir.

İlgili titreşim ivmesi genliği (G tepe değerinde) aşağıdaki şekilde hesaplanabilir:

$$ Amplitude(G) = 10^{Amplitude(db)/20} $$

...burada genlik dB, belirli bir frekansta SL ve algılama eşiğinin toplamıdır (bitişik grafikteki dikey eksen boyunca değer).

Yandaki grafik, titreşim ivmesi seviyelerini 10, 20, 30, 40 ve 50 dB SL'de, zamansal frekansın bir fonksiyonu olarak insan dokunsal algılaması eşiğiyle (0 dB SL) birlikte gösterir. Veriler, Verrillo, R. tarafından yayınlanan "Figure 8" adlı makaleden tahmin edilmiştir. T. ve diğerlerinin 1969 tarihli makalesi, "Sensation magnitude of vibrotactile stimuli.".

İstenen his seviyesi arttıkça, gerekli hızlanma (dB cinsinden) da yaklaşık olarak aynı miktarda artar. Örneğin, 100 Hz'lik bir titreşim için 10 dB'lik duyum seviyesi -30 dB yerine yaklaşık -20 dB'dir.
Titreşim hızlanma seviyeleri.

Android, bu dönüşümü otomatik olarak BasicEnvelopeBuilder içinde işler. Bu işlev, değerleri duyum düzeyi alanında (dB SL) normalleştirilmiş yoğunluklar olarak alır ve çıkış ivmesine dönüştürür. Diğer yandan WaveformEnvelopeBuilder bu dönüşümü uygulamaz ve bunun yerine değerleri ivme alanında (Gs) normalleştirilmiş çıkış ivme genlikleri olarak alır. Zarf API'si, bir tasarımcı veya geliştirici titreşim gücündeki değişiklikleri düşündüğünde algılanan harcanan efor düzeyinin parçalı doğrusal bir zarfı takip etmesini beklediğini varsayar.

Cihazlarda varsayılan dalga biçimi düzeltme

Örnek olarak, özel bir dalga biçimi deseninin genel bir cihazda nasıl davrandığını ele alalım:

Kotlin

val timings: LongArray = longArrayOf(50, 50, 50, 50, 50, 100, 350, 250)
val amplitudes: IntArray = intArrayOf(77, 79, 84, 99, 143, 255, 0, 255)
val repeatIndex = -1 // Don't repeat.

vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex))

Java

long[] timings = new long[] { 50, 50, 50, 50, 50, 100, 350, 250 };
int[] amplitudes = new int[] { 77, 79, 84, 99, 143, 255, 0, 255 };
int repeatIndex = -1 // Don't repeat.

vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));

Aşağıdaki grafiklerde, giriş dalga biçimi ve önceki kod snippet'lerine karşılık gelen çıkış ivmesi gösterilmektedir. Desende genlikte adım değişikliği olduğunda (yani 0 ms, 150 ms, 200 ms, 250 ms ve 700 ms'de) hızlanmanın aniden değil, kademeli olarak arttığını unutmayın. Ayrıca, genlikteki her adım değişikliğinde aşma ve giriş genliği aniden 0'a düştüğünde en az 50 ms süren görünür çınlama da vardır.

Adım işlevi giriş dalga biçiminin grafiği.
Seviyeler arasında daha organik geçişler gösteren, gerçek ölçülen dalga biçiminin grafiği.

İyileştirilmiş dokunsal desen

Aşmayı önlemek ve çınlama süresini azaltmak için genlikleri daha kademeli olarak değiştirin. Aşağıda, revize edilmiş sürümün dalga biçimi ve ivme grafikleri gösterilmektedir:

Kotlin

val timings: LongArray = longArrayOf(
    25, 25, 50, 25, 25, 25, 25, 25, 25, 25, 75, 25, 25,
    300, 25, 25, 150, 25, 25, 25
)
val amplitudes: IntArray = intArrayOf(
    38, 77, 79, 84, 92, 99, 121, 143, 180, 217, 255, 170, 85,
    0, 85, 170, 255, 170, 85, 0
)
val repeatIndex = -1 // Do not repeat.

vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex))

Java

long[] timings = new long[] {
        25, 25, 50, 25, 25, 25, 25, 25, 25, 25, 75, 25, 25,
        300, 25, 25, 150, 25, 25, 25
    };
int[] amplitudes = new int[] {
        38, 77, 79, 84, 92, 99, 121, 143, 180, 217, 255, 170, 85,
        0, 85, 170, 255, 170, 85, 0
    };
int repeatIndex = -1; // Do not repeat.

vibrator.vibrate(VibrationEffect.createWaveform(timings, amplitudes, repeatIndex));

Ek adımlarla giriş dalga biçiminin grafiği.
Daha yumuşak geçişler gösteren, ölçülen dalga formunun grafiği.

Daha karmaşık dokunsal efektler oluşturma

Tatmin edici bir tıklama yanıtındaki diğer öğeler daha karmaşıktır ve cihazda kullanılan LRA hakkında bilgi sahibi olmayı gerektirir. En iyi sonuçlar için cihazın önceden üretilmiş dalga biçimlerini ve platform tarafından sağlanan sabitlerini kullanın. Bu sayede şunları yapabilirsiniz:

  • Net efektler ve temel şekiller oluşturun.
  • Yeni dokunsal efektler oluşturmak için bunları birleştirin.

Önceden tanımlanmış bu dokunsal sabitler ve temel öğeler, yüksek kaliteli dokunsal efektler oluştururken işinizi büyük ölçüde hızlandırabilir.