概述
语音信号的频域分析
语音的感知过程与人类听觉系统具有频谱分析功 能紧密相关。因此,对语音信号进行频谱分析, 是认识语音信号和处理语音信号的重要方法
声音从频率上可以分为纯音和复合音。纯音只含 一种频率的声音(基音),而没有倍音。复合音是 除基音外,还包含多种倍音的声音。大部分声音 (包括语音)都是复合音,涉及多个频率段。
离散傅里叶变换(DFT)
复指数运算:
- 实部是Cosine函数,虚部是Sine函数
时间系列的复指数运算是两个时间系列的复数和:
两个不同频率的复指数运算是相互正交的,即:
- 例如:正是因为相互正交,才能分开
傅里叶变换的第k个点计算如下:
- 其中:
x[m]
是时域波形第m
个采样点X[k]
是傅里叶频谱第k
个点N
是采样系列里的点数
时域信号可以从DFT恢复得到:(但是相差1/N)
离散傅里叶变换的特质
- 时域波形的M个点经DFT后,仍对应M个点
- 假设采样率是8000Hz,第0个点代表0Hz,第M1个点代表(M-1)/M*8000Hz
- M个点在频率轴平均分布
- 快速傅里叶变换(FFT)是DFT的快速算法
- 可以出0-4000Hz与4000-8000Hz是对称的,所以只需要显示一半
- 0Hz代表直流,即常数
- 时域多少个点,频域也就多少个点,如果不一样,则是在后面补零,如下所示:
>> A=[1 2 3 4]
>> fft(A, 8)
ans =
1 至 6 列
10.0000 + 0.0000i -0.4142 - 7.2426i -2.0000 + 2.0000i 2.4142 - 1.2426i -2.0000 + 0.0000i 2.4142 + 1.2426i
7 至 8 列
-2.0000 - 2.0000i -0.4142 + 7.2426i
>> A1=[1 2 3 4 0 0 0 0];
>> fft(A1, 8)
ans =
1 至 6 列
10.0000 + 0.0000i -0.4142 - 7.2426i -2.0000 + 2.0000i 2.4142 - 1.2426i -2.0000 + 0.0000i 2.4142 + 1.2426i
7 至 8 列
-2.0000 - 2.0000i -0.4142 + 7.2426i
短时傅里叶变换
标准傅里叶分析在信号处理中具有非常重要的作 用。适用于周期、瞬变或平稳随机信号的分析
语音信号是一个非平稳过程,所以标准傅里叶分析不能直接进行。因语音信号具有短时特性,所以可以采用短时傅里叶变换,即有限长度的傅里叶变 换。相应的谱称为“短时谱”
傅里叶变换的第k个点计算如下:
短时傅里叶变换的定义为
- 短时傅里叶分析是窗选语音信号的标准傅里叶变换
- 它有两个自变量:n,w,既是关于时间n的离散函数, 又是关于角频率w的连续函数
清/浊音加不同窗时傅里叶变换后频谱图(N=256)
代码
% 程序4.1:qingzhuoyinpinpu.m
fid=fopen('voice2.txt','rt'); %打开文件
y=fscanf(fid,'%f'); %读数据
e=fra(256,128,y); %对y分帧,帧长256,帧移128
ee=e(10,:); %选取第10帧
subplot(421) %画第一个子图
ee1=ee/max(ee); %幅值归一化
plot(ee1) %画波形
xlabel('样点数') %横坐标名称
ylabel('幅度') %纵坐标名称
title ('原始语音') %文字标注
axis([0,256,-1.5,1.5]) %限定横纵坐标范围
% 矩形窗傅立叶变换
r=fft(ee,1024); %对信号ee进行1024点傅立叶变换
r1=abs(r); %对r取绝对值 r1表示频谱的幅度值
r1=r1/max(r1); %幅值归一化
yuanlai=20*log10(r1); %对归一化幅值取对数
signal(1:256)=yuanlai(1:256); %取256个点,目的是画图的时候,维数一致
pinlv=(0:1:255)*8000/512; %点和频率的对应关系
subplot(425) %画第五个子图
plot(pinlv,signal); %画幅值特性图
xlabel('f/Hz') %横坐标名称
ylabel('对数幅度/dB') %纵坐标名称
title ('加矩形窗时语音谱') %文字标注
axis([0,4000,-80,15]) %限定横纵坐标范围
%加Hamming窗
f=ee'.*hamming(length(ee)); %对选取的语音信号加Hamming窗
f1=f/max(f); %对加窗后的语音信号的幅值归一化
subplot(423) %画第三个子图
plot(f1) %画波形
axis([0,256,-1.5,1.5]) %限定横纵坐标范围
xlabel('样点数') %横坐标名称
ylabel('幅度') %纵坐标名称
title ('窗选语音') %文字标注
%加Hamming窗傅立叶变换
r=fft(f,1024); %对信号ee进行1024点傅立叶变换
r1=abs(r); %对r取绝对值 r1表示频谱的幅度值
r1=r1/max(r1); %幅值归一化
yuanlai=20*log10(r1); %对归一化幅值取对数
signal(1:256)=yuanlai(1:256); %取256个点,目的是画图的时候,维数一致
pinlv=(0:1:255)*8000/512; %点和频率的对应关系
subplot(427) %画第七个子图
plot(pinlv,signal); %画幅值特性图
xlabel('f/Hz') %横坐标名称
ylabel('对数幅度/dB') %纵坐标名称
title ('加Hamming窗时语音谱') %文字标注
axis([0,4000,-80,15]) %限定横纵坐标范围
%清音的波形和短时频谱图(窗长256)
fid=fopen('qingyin1.txt','rt'); %打开文件
y=fscanf(fid,'%f'); %读数据
e=fra(256,128,y); %对y分帧,帧长256,帧移128
ee=e(2,:); %选取第2帧
subplot(422) %画第二个子图
ee1=ee/max(ee); %幅值归一化
plot(ee1) %画波形
xlabel('样点数') %横坐标名称
ylabel('幅度') %纵坐标名称
title ('原始语音') %文字标注
axis([0,256,-1.5,1.5]) %限定横纵坐标范围
% 矩形窗傅立叶变换
r=fft(ee,1024); %对信号ee进行1024点傅立叶变换
r1=abs(r); %对r取绝对值 r1表示频谱的幅度值
r1=r1/max(r1); %幅值归一化
yuanlai=20*log10(r1); %对归一化幅值取对数
signal(1:256)=yuanlai(1:256); %取256个点,目的是画图的时候,维数一致
pinlv=(0:1:255)*8000/512; %点和频率的对应关系
subplot(426) %画第六个子图
plot(pinlv,signal); %画幅值特性图
xlabel('f/Hz') %横坐标名称
ylabel('对数幅度/dB') %纵坐标名称
title('加矩形窗时语音谱') %文字标注
axis([0,4000,-80,1]) %限定横纵坐标范围
%加Hamming窗
f=ee'.*hamming(length(ee)); %对选取的语音信号加Hamming窗
f1=f/max(f); %对加窗后的语音信号的幅值归一化
subplot(424) %画第四个子图
plot(f1) %画波形
axis([0,256,-1.5,1.5]) %限定横纵坐标范围
xlabel('样点数') %横坐标名称
ylabel('幅度') %纵坐标名称
title ('窗选语音') %文字标注
%加Hamming傅立叶变换
r=fft(f,1024); %对信号ee进行1024点傅立叶变换
r1=abs(r); %对r取绝对值 r1表示频谱的幅度值
r1=r1/max(r1); %幅值归一化
yuanlai=20*log10(r1); %对归一化幅值取对数
signal(1:256)=yuanlai(1:256); %取256个点,目的是画图的时候,维数一致
pinlv=(0:1:255)*8000/512; %点和频率的对应关系
subplot(428) %画第八个子图
plot(pinlv,signal); %画幅值特性图
xlabel('f/Hz') %横坐标名称
ylabel('对数幅度/dB') %纵坐标名称
title ('加Hamming窗时语音谱') %文字标注
axis([0,4000,-80,1]) %限定横纵坐标范围fid=fopen('voice2.txt','rt');
效果:(左侧为浊音,右侧为清音)
- 可以看出浊音是有周期性的
短时功率谱
在短时傅里叶变换的基础上,可以得到短时功率谱。 短时功率谱实际上是短时傅里叶变换幅度的平方, 不难证明,它是信号x(n)的短时自相关函数的傅里 叶变换,即:
- 其中,Rn(k)是自相关函数
频谱图(Spectrogram)
将语音信号连续地进行频谱分析,用时间作为横坐标,频率作为纵坐标,每个像素的灰度值大小反映相应时刻和相应频率的能量(短时功率)。 其中能量功率谱具体可以表示如下:
- 其中:
- X(n,w)为傅里叶变换
- w是窗函数
- X(n,w)为傅里叶变换
例:(越红,代表能量越大)
窄带&宽带
附录
一篇不错的blog,讲解傅里叶变换:深入浅出的讲解傅里叶变换(真正的通俗易懂)
最后
以上就是温柔仙人掌为你收集整理的语音信号的频域分析的全部内容,希望文章能够帮你解决语音信号的频域分析所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复