计算共振峰频率特征时如何确定线性预测系数( LPC )中的滤波器阶数?
How to decide filter order in Linear Prediction Coefficients ( LPC ) while calculating formant frequency features?
我是信号处理方面的新手,正在尝试计算不同 .wav 文件的共振峰频率特征。
为了计算共振峰频率,我需要三个参数值:
- 线性预测系数 (LPC)
- 根
- 角度
我正在尝试使用 python 中的 librosa.core.lpc 计算线性预测系数 ( LPC )。它需要两个参数:
librosa.core.lpc(y, order)
我有 Y 但我不知道如何计算顺序,我有很多 .wav 文件,我必须设置顺序才能从所有文件中提取特征。如何确定所有wav文件计算LPC的顺序?
接下来的两件事根和角可以像这样轻松计算:
rts = numpy.roots(A)
rts = [r for r in rts if numpy.imag(r) >= 0]
angz = numpy.arctan2(numpy.imag(rts), numpy.real(rts))
# Get frequencies.
Fs = spf.getframerate()
frqs = sorted(angz * (Fs / (2 * math.pi)))
提前致谢!
应该使用的 LPC 顺序背后没有确切的科学依据,但有两个经验法则:
人们期望找到的共振峰数量的两倍,加上二。 Systematic errors in the formant analysis of steady-state vowels 中提供的解释:每个共振峰对应一个阻尼正弦波,可以由一对具有正确频率和阻尼的根捕获(其中一个根是另一个根的复共轭) ).这两个额外的系数“以防万一”吸收信号中的任何剩余能量
以 kHz 为单位的采样频率。如果 Fs=16000
即 16kHz
,将顺序设置为 16。
第一种方法似乎更受欢迎,例如在 Mathworks page.
优化注意事项
与问题无关,但我忍不住提出对代码进行两个小调整以使其更加麻木:
import numpy as np
import librosa
A = librosa.core.lpc(y, 12)
rts = np.roots(A)
rts = rts[np.imag(rts) >= 0]
angz = np.arctan2(np.imag(rts), np.real(rts))
frqs = angz * fs / (2 * np.pi)
frqs.sort()
我是信号处理方面的新手,正在尝试计算不同 .wav 文件的共振峰频率特征。
为了计算共振峰频率,我需要三个参数值:
- 线性预测系数 (LPC)
- 根
- 角度
我正在尝试使用 python 中的 librosa.core.lpc 计算线性预测系数 ( LPC )。它需要两个参数:
librosa.core.lpc(y, order)
我有 Y 但我不知道如何计算顺序,我有很多 .wav 文件,我必须设置顺序才能从所有文件中提取特征。如何确定所有wav文件计算LPC的顺序?
接下来的两件事根和角可以像这样轻松计算:
rts = numpy.roots(A)
rts = [r for r in rts if numpy.imag(r) >= 0]
angz = numpy.arctan2(numpy.imag(rts), numpy.real(rts))
# Get frequencies.
Fs = spf.getframerate()
frqs = sorted(angz * (Fs / (2 * math.pi)))
提前致谢!
应该使用的 LPC 顺序背后没有确切的科学依据,但有两个经验法则:
人们期望找到的共振峰数量的两倍,加上二。 Systematic errors in the formant analysis of steady-state vowels 中提供的解释:每个共振峰对应一个阻尼正弦波,可以由一对具有正确频率和阻尼的根捕获(其中一个根是另一个根的复共轭) ).这两个额外的系数“以防万一”吸收信号中的任何剩余能量
以 kHz 为单位的采样频率。如果
Fs=16000
即16kHz
,将顺序设置为 16。
第一种方法似乎更受欢迎,例如在 Mathworks page.
优化注意事项
与问题无关,但我忍不住提出对代码进行两个小调整以使其更加麻木:
import numpy as np
import librosa
A = librosa.core.lpc(y, 12)
rts = np.roots(A)
rts = rts[np.imag(rts) >= 0]
angz = np.arctan2(np.imag(rts), np.real(rts))
frqs = angz * fs / (2 * np.pi)
frqs.sort()