语音识别-时域分析
參考:
https://blog.csdn.net/qq_39516859/article/details/80166842
語音分幀與加窗
語音具有時變特性,但在短時間范圍內,其特性基本保持不變即相對穩定。所以具有短時平穩性
語音信號分成一段一段來分析,每一段稱為一‘幀’,幀長一般取為10~30ms。
前一幀和后一幀的交疊部分稱為幀移。
幀移與幀長的比值一般取為0~1/2.
窗函數
分幀用可移動的有限長度窗口進行加權的方法來實現。
窗口長度:
采樣周期Ts=1/fsT_s=1/f_sTs?=1/fs?,窗口長度N和頻率Δf\Delta fΔf之間的關系
Δf=1NTs\Delta f=\frac{1}{NT_s} Δf=NTs?1?
三種窗對比
[外鏈圖片轉存失敗(img-tjgqblFw-1563959674910)(assets/三種窗對比.jpg)]
時域分析
( 都用hamming窗
( 語音都為zj3.wav
幀長為 200
幀移為 100
短時能量
設第n幀語音信號xn(m)x_n(m)xn?(m)的短時能量用EnE_nEn?
En=∑m=0N?1xn2(m)E_n=\sum^{N-1}_{m=0}x_n^2(m) En?=m=0∑N?1?xn2?(m)
短時平均幅度
算一幀語音信號能量大小
Mn=∑m=0N?1∣xn(m)∣M_n=\sum^{N-1}_{m=0}|x_n(m)| Mn?=m=0∑N?1?∣xn?(m)∣
短時過零率
表示一幀語音中語音信號波形穿過橫軸(零電平)的次數。(正負變化的次數
Zn=12∑m?0N?1∣sgn[xn(m)]?sgn[xn(m?1)]Z_n=\frac{1}{2}\sum^{N-1}_{m-0}|sgn[x_n(m)]-sgn[x_n(m-1)] Zn?=21?m?0∑N?1?∣sgn[xn?(m)]?sgn[xn?(m?1)]
sgn[x]={1,(x)≥0)?1,(x<0)sgn[x]=\begin{cases}1,&\text(x)\geq 0) \\ -1,&(x<0) \end{cases} sgn[x]={1,?1,?(x)≥0)(x<0)?
MATLAB 離散信號相鄰的取樣值改變符號,其乘積為負
xi(m)×xi(m+1)<0x_i(m)\times x_i(m+1)<0 xi?(m)×xi?(m+1)<0
代碼:
%短時時域分析參數計算并顯示 clear all; clc; filedir=[];%設置路徑 filename='D:\matlab\music\zj3.wav'; file=[filedir filename]; [x,Fs]=audioread(file);wlen=200;%幀長 inc=100;%幀移 win=hamming(wlen);%海明窗 N=length(x);%信號長度 time=(0:N-1)/Fs;%計算出信號的時間刻度%這些函數沒有 % En1=STEn(x,win,inc);%短時能量 % Mn1=STMn(x,win,inc);%短時平均幅度 % Zcr1=STZcr(x,win,inc);%短時過零率 %返回的不是向量而是矩陣,因為一幀信號得到的不是一個數值X=enframe(x,win,inc)'; %分幀,一列是一幀 fn=size(X,2);%幀數 frameTime=frame2time(fn,wlen,inc,Fs); %求出每幀對應的時間 %這個公式得再看一下%短時能量for i=1:fny=X(:,i);%每一幀數據b=0;for m=1:1:200b=b+y(m).^2; endE(i)=b;end%短時平均幅度for i=1:fny=X(:,i);%每一幀數據b=0;for m=1:1:200b=b+abs(y(m)); endM(i)=b;end%短時過零率Z=zeros(1,fn); % 初始化for i=1:fny=X(:,i);%每一幀數據b=0;for m=1:1:199if y(m)*y(m+1)<0;b=b+1;endZ(i)=b;endend%短時自相關d=time*Fs; %采樣點數=時間乘上采樣頻率for k=2:fny=X(:,k);%每一幀數據ru=xcorr(y);R(k)=max(ru);end%短時平均幅度差for i=1:fny=X(:,i);%每一幀數據for k=1:wlenf(k)=sum(abs(y(k:end)-y(1:end-k+1)));endF(i)=max(f)end % %畫圖-短時能量 % figure(2) % subplot(211) % plot(time,x) % title('原始語音') % ylabel('幅值'); xlabel(['時間/s' 10 '(a)']); % subplot(212) % plot(frameTime,E); % title('短時能量'); % ylabel('幅值'); xlabel(['時間/s' 10 '(b)']);% % 畫圖-短時平均幅度 % figure(3) % subplot(211) % plot(time,x) % title('原始語音') % ylabel('幅值'); xlabel(['時間/s' 10 '(a)']); % subplot(212) % plot(frameTime,M); % title('短時平均幅度'); % ylabel('幅值'); xlabel(['時間/s' 10 '(b)']);% % 畫圖-短時過零率 % figure(4) % subplot(211) % plot(time,x) % title('原始語音') % ylabel('幅值'); xlabel(['時間/s' 10 '(a)']); % subplot(212) % plot(frameTime,Z); % title('短時過零率'); % ylabel('次數'); xlabel(['時間/s' 10 '(b)']);% % 畫圖-短時自相關-還不行 % figure(5) % subplot(211) % plot(time,x) % title('原始語音') % ylabel('幅值'); xlabel(['時間/s' 10 '(a)']); % subplot(212) % plot(time,R); % title('短時自相關'); % ylabel('復制'); xlabel(['點數' 10 '(b)']);短時自相關
對于濁音語音可以用自相關函數求出語音波形序列的基音周期。
線性預測分析時,也用到自相關函數。
語音信號x(m),自相關函數R(k)
K是最大延遲點數
Rn(k)=∑m=0N?1?Kxn(m)xn(m+k)(0≤k≤K)R_n(k)=\sum^{N-1-K}_{m=0}x_n(m)x_n(m+k) \quad (0\leq k\leq K) Rn?(k)=m=0∑N?1?K?xn?(m)xn?(m+k)(0≤k≤K)
短時平均幅度差
跟自相關函數有類似作用的參量
Fn(k)=∑m=0N?1?k∣xn(m)?xn(m+k)F_n(k)=\sum^{N-1-k}_{m=0}|x_n(m)-x_n(m+k) Fn?(k)=m=0∑N?1?k?∣xn?(m)?xn?(m+k)
總結
- 上一篇: 去年计算机试题,微机去年试卷及答案,广东
- 下一篇: 语音识别-过零率和短时能量-端点检测