音频(二) 基音周期与共振峰

1. 基音周期:

基音周期: 表示声带的震动周期,每隔这么长时间(震动周期),有一个气流通过,“每隔”就体现了周期性,这就是基音周期。

基音频率: 是基音周期的倒数, 谱图上就应该有这个频率的信号分量,而且这个频率的幅度(能量)不应该很小,因为每隔一段时间“就有”一团能量通过声带。


图1: 上 :语音波形 , 下边: 对应的窄带语谱图

图1小图可明显看到,基音频率也不是不变的,其也具有波动,我们可以人为的将基频线连接起来为一条曲线,这称为基音跟踪。

共振峰表示“谐振”,频谱上表示为频谱包络(其实是上包络)的峰值,那么频谱下包络的谷值点就表示“反谐振”。

频谱的“尖峰”显示的是源的信息,小尖包突起是周期性的,是有用的,那么“杂乱”的源头是非周期性的,这在语音转换中是一种很重要的信息。

比如,窄带语谱图上基本上可以发现,低频部分,横条纹比较直,而高频部分,条纹变“弯”了,这表示什么?

基音频率和共振峰是能从谱图、频谱上看出来的语音的最基本的信息,当然可以看出其他更多的信息。

2 时域与频谱中的音频特征:

2.1 时域中估计基音周期, 频谱中估计基音频率

选取0.5s处的一段语音片段,长度为20ms。其时域波形和频谱如图:


图2: 左 语音波形 , 右边: 对应频谱

左图,用红圈圈示的尖峰用于估计基音周期,双向箭头表示时间范围内5个圈共4个相似的波段,这4段就表示4个基音周期,则可估计基音周期约为4.25ms,则基音频率约为235.2941Hz。

右图,频谱具有明显小尖峰,这些尖峰在低频部分(可认为语音频率3400Hz内)比较有规律且平滑,高频出现小幅度的“杂乱”,这些“杂乱”表示噪声,来源有录音设备及量化噪声等(虽然幅度很小,甚至根本就“听”不出来,但存在是事实)。这些尖峰就是各次谐波,从左往右一次是1次、2次、3次……谐波。其中最左边的尖峰对应基音频率,其横坐标对应的值表示基音频率,从小图可看到大约为234.83Hz。利用各次谐波可以得到更精确的估计,图中用红圈表示用于估计基频的谐波,共选取了15个,估计出基频为234.8337Hz。

2.2 频谱中看共振峰

基音频率体现的是声源的信息.

共振峰体现的是声道的信息。

为便于比较和观察,将图2这个语音片段的源和系统分离,分别展示源的频谱和声道的频谱,观察一致性。
图3、4显示的是源的频谱、声道的频谱、语音的频谱及共振峰的位置信息,图4去掉了小图。


图3: 语音片段时域波形及其源、声道和语音频谱,小图遮挡了部分信息

红线: 是语音的频谱, 黑色虚线: 是语音频谱的包络,

粉红线: 源信息的频谱,
蓝线: 是声道频谱,蓝色圈圈: 标示出声道频谱的峰值点,

粉红虚竖线: 显示这些峰值点的位置。

根据语音产生的源-滤波器模型及源、系统的卷积解释,语音频谱的包络显示的是声道的信息,而小尖峰显示源的信息,如谐波。

可看到粉红线和红线二者的峰值的位置正好一一对应,体现了源的信息,而且粉红线(源)明显没有包络峰值,说明声道的信息被滤除。同样,蓝线没有了小尖峰,即滤掉了源的信息。


图4: 语音片段时域波形及其源、声道和语音频谱

并且声道的峰值点位置与语音频谱包络的峰值位置也正好一一对应。蓝圈圈的个数表示共振峰的个数,共有4个,从左至右分别称为F1、F2、F3、F4,(F0是基音频率)。它们横轴值表示共振峰频率值,某共振峰带宽就表示该共振峰所占频带宽度。

这个图还暗示了另一个有趣的事实,源所占的频率范围和声道所占的频率范围是一样的,在频域利用高通或低通或带通的方法分离源和系统是行不通的。

3. 语谱图的取对数

这为: 后面对语谱图的 取对数 埋下了伏笔;

人类的发声系统发出的信号是由基音信息与声道信息卷积而成。记作"s卷积v"

经过语谱图FFT变换后,卷积变成了乘法。即"FFT(s)*FFT(v)"。

取对数后,乘法变成了加法。即"Log(FFT(s))+Log(FFT(v))"

把卷积信号转换成加性信号,这就是取FFT和对数的原因

------------------------------------------------------- reference -------------------

1、源-系统信息分离和提取参考论文:
“Glottal wave analysis with pitchsynchronous iterative adaptive inverse filtering” Paavo Alku. SpeechCommunication 11(2-3): 109-118 (1992)

  • 8
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
倒谱法是一种常用的基音周期检测方法,可以借助MATLAB实现。下面提供一个简单的基音周期检测和共振检测的MATLAB代码示例,供参考。 ```matlab % 基音周期检测和共振检测 % 首先读取音频文件,使用matlab自带的audioread函数 [x, fs] = audioread('voice.wav'); % 设置分析参数 winlen = 512; % 窗口长度 overlap = 256; % 帧重叠长度 nfft = 1024; % FFT点数 preemph = 0.97; % 预加重系数 minf0 = 80; % 最小基频 maxf0 = 300; % 最大基频 voicedthresh = 0.4; % 有声门限 unvoicedthresh = 0.1; % 无声门限 % 对每一帧进行处理 frames = enframe(x, winlen, overlap); % 分帧 nframes = size(frames, 1); % 帧数 f0 = zeros(nframes, 1); % 存储基频 formants = zeros(nframes, 4); % 存储共振 for i = 1:nframes frame = frames(i, :); % 取出一帧 frame = filter([1 -preemph], 1, frame); % 预加重 spec = abs(fft(frame, nfft)); % 傅里叶变换 spec = spec(1:nfft/2); % 取一半 logspec = log(spec); % 取对数 cepstrum = ifft(logspec); % 倒谱 cepstrum = cepstrum(1:nfft/2); % 取一半 cepstrum(1:minf0/fs*nfft) = 0; % 去掉基频以下的分量 cepstrum(maxf0/fs*nfft:end) = 0; % 去掉基频以上的分量 [~, locs] = findpeaks(cepstrum); % 找值 if ~isempty(locs) f0(i) = fs/locs(1); % 基频为第一个的频率倒数 formants(i, :) = locs(2:5)*fs/nfft; % 共振为2~5个的频率 end end % 判断有声无声 voiced = f0 > voicedthresh*fs/winlen & f0 < maxf0; unvoiced = f0 < unvoicedthresh*fs/winlen; f0(unvoiced) = 0; % 无声部分基频设为0 % 绘制频谱、倒谱、基频、共振等 t = (0:nframes-1)*overlap/fs; f = (0:nfft/2-1)/nfft*fs; figure; subplot(2, 2, 1); imagesc(t, f, 20*log10(abs(spec))); axis xy; xlabel('Time (s)'); ylabel('Frequency (Hz)'); title('Spectrogram'); subplot(2, 2, 2); imagesc(t, f, 20*log10(abs(cepstrum))); axis xy; xlabel('Time (s)'); ylabel('Quefrency'); title('Cepstrum'); subplot(2, 2, 3); plot(t, f0, 'r'); axis([0 max(t) 0 maxf0]); xlabel('Time (s)'); ylabel('Frequency (Hz)'); title('Pitch'); subplot(2, 2, 4); plot(t, formants); axis([0 max(t) 0 maxf0]); xlabel('Time (s)'); ylabel('Frequency (Hz)'); title('Formants'); legend('F1', 'F2', 'F3', 'F4'); ``` 该代码读取声音文件`voice.wav`,对每一帧进行基音周期检测和共振检测,并将结果绘制成图形。其中,`enframe`是分帧函数,`findpeaks`是寻找值函数。可以根据需要自行调整参数,例如窗口长度、帧重叠长度、FFT点数等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值