Częstotliwość podstawowa

Częstotliwość podstawowa to inaczej wysokość dźwięku. Wysokość dźwięku to wartość częstotliwości z jaką wibrują elementy instrumentu muzycznego np. struny w gitarze, powietrze w piszczałce lub struny głosowe u człowieka. Istnieje bardzo wiele technik służących wykrywaniu częstotliwości podstawowej (F0). Najprostszym z nich jest szukanie pierwszego pierwszego lub najwyższego wierzchołka w widmie sygnału. W ramach dzisiejszych zajęć będziemy ze skutecznością prostej funkcji wykorzystującej autokorelację sygnału w celu jej wyznaczenia.

def get_F0_autocorr(frame, fs):
    corr = np.correlate(frame, frame, mode='full')
    corr = corr[corr.size//2:]
    d = np.diff(corr)
    start = np.nonzero(d > 0)[0][0]
    peak = np.argmax(corr[start:]) + start
    return fs / peak

Formanty

Formanty są jednym ze sposobów opisu rezonansów występujących między innymi w trakcie głosowym. Opisują one jakie częstotliwości powstające na strunach głosowych ( i poniżej nich) zostaną wzmocnione bądź stłumione. Zależne są one między innymi od położenia języka lub stopnia otwarcia ust. Można na ich podstawie oszacowywać rodzaj samogłoski, jaką wybrzmiewa.

Trakt Głosowy

import librosa 
from scipy.signal import lfilter
def get_Formants(frame,fs):
    ncoeff = np.ceil(2 + fs / 1000).astype(int)
    x1 =  lfilter([1], [1., 0.63], frame)
    A = librosa.lpc(x1, int(ncoeff))
    rts = np.roots(A)
    rts = [r for r in rts if np.imag(r) >= 0]
    angz = np.arctan2(np.imag(rts), np.real(rts))
    frqs = sorted(angz * (fs / (2 * np.pi)))
    if frqs[0]<1:
        for i in range(0,len(frqs)):
            if frqs[i]>=1:
                break
        return frqs[i:]
    return frqs