精华内容
下载资源
问答
  • 语音信号处理 预加重 一阶高通滤波器 分帧加窗三种窗函数比较 端点检测 双门限 频谱分析 录音程序也有,用户可自己录音,进行处理
  • 语音信号分帧加窗 什么是窗函数? 几种常见窗函数 Spectral leakage(谱泄漏) 2、语音信号分帧加窗 语音信号具有短时平稳性。 帧是为了将无限长的语音信号,分成一段一段的,因为语音信号具有短时平稳性...

    Date: 2019-5-11


    1、参考

    语音信号的分帧加窗
    什么是窗函数?
    几种常见窗函数
    Spectral leakage(谱泄漏)

    2、语音信号的分帧加窗

    语音信号具有短时平稳性。
    分帧是为了将无限长的语音信号,分成一段一段的,因为语音信号具有短时平稳性,方便处理,加窗是为了使分帧后的语音信号更加平稳。窗函数主要有矩形窗和汉明窗。加窗主要是为了使时域信号似乎更好地满足FFT处理的周期性要求,减少泄漏。

    3、Matlab实现(部分)
    function varargout = Shiyufenxi(varargin)
    % SHIYUFENXI MATLAB code for Shiyufenxi.fig
    %      SHIYUFENXI, by itself, creates a new SHIYUFENXI or raises the existing
    %      singleton*.
    %
    %      H = SHIYUFENXI returns the handle to a new SH
    展开全文
  • Matlab语音信号做fft及对语音信号进行分帧加窗

    万次阅读 多人点赞 2019-11-24 22:07:42
    再对原语音信号进行分帧,并使用了三种窗函数(矩形窗,海宁窗,海明窗)对其中的一进行加窗,查看结果。 注:本文所用的matlab版本为matlab 2017a 首先读取音频文件: [x1,fs]=audioread('lantian.wav'); %读取...

    本文主要读取语音信号,画出语音波形,并对语音信号进行fft变换,画出频谱图。再对原语音信号进行分帧,并使用了三种窗函数(矩形窗,海宁窗,海明窗)对其中的一帧进行加窗,查看结果。

    • 注:本文所用的matlab版本为matlab 2017a
      首先读取音频文件:
    [x1,fs]=audioread('lantian.wav');  %读取音频文件lantian.wav,fs返回采样频率,x1为读取的语音信号
    

    返回语音信号的采样频率,总的采样点数,语音时长等信息:

    info=audioinfo('lantian.wav') 
    

    在这里插入图片描述
    可以看到,该语音采样频率为8000,语音总的采样点数为19000,语音时长为2.375秒。
    矩形窗函数:

    boxcar(n)  %调用格式:w=boxcar(n),根据长度 n 产生一个矩形窗 w
    

    海宁窗函数:

    hanning(n)  %调用格式:w=hanning(n),根据长度 n 产生一个汉宁窗 w
    

    海明窗函数:

    hamming(n)  %调用格式:w=hamming(n),根据长度 n 产生一个海明窗 w
    

    画语音信号波形图:

    figure()
    subplot(211);
    plot(x1);
    title('原始语音信号');
    

    波形图如下:
    在这里插入图片描述
    对语音信号进行fft变换:


    FFT物理意义如下:
    一个模拟信号,经ADC采样后,就变成了数字信号,采样频率要大于信号频率的两倍,采样得到的数字信号,就可以做FFT变换了。N个采样点,经过FFT之后,就可得到N个点的FFT结果。为了方便进行FFT运算,通常N取2的整数次方。
    假设采样频率为Fs,信号频率为F,采样点数为N。那么FFT之后记过就是一个为N点的复数。每个点就对应有一个频率点。这个点的模值,就是该频率值下的幅度特性。
    假设原始信号的峰值为A,它跟原始信号的幅度的关系为, FFT的结果的每个点(除第-一个点直流分量之外)的模值就是A的N/2倍。而第一个点就是直流分量,它的模值就是直流分量的N倍。而每个点的相位,就是该频率下的信号的相位。
    FFT运算后第一个点表示直流分量(即0Hz),而最后一个点N的再下一个点(实际上这个点是不存在的,这里是假设的第N+1个点,也可以看做是将第一个点分做两半,另一半移到最后)则表示采样频率Fs,这中间被N-1个点平均分成N等份,每个点的频率依次增加。例如某点n所表示的频率为:Fn=(n-1)*Fs/N。
    由上边的公式可以看出,Fn所能分辨到频率为Fs/N,如果采样频率Fs为1024 Hz, 采样点数为1024点,则可以分辨到1 Hz。1024 Hz 的采样率采样1024点,刚好是1秒,也就是说,采样1秒时间的信号并做FFT,则结果可以分析到1 Hz, 如果采样2秒时间的信号并做FFT,则结果可以分析到0.5 Hz。 如果要提高频率分辨力,则必须增加采样点数,也即采样时间。


    y1=fft(x1,256);   %对语音信号进行256点fft变换
    

    本文调用了voicebox包中的enframe函数进行分帧处理,但matlab中不自带voicebox包。对于如何安装voicebox包,请参考下面博客:
    在MATLAB中添加语音处理工具箱(voicebox)

    对语音信号进行分帧:

    x2=enframe(x1,200,100);%调用分帧函数enframe,x1为语音信号,200为帧长,100为语音帧移时重叠部分的长度
    

    对语音信号进行分帧,再加不同的窗函数:

    x3=enframe(x1,boxcar(200),100);  %每两百个点分为一帧,再加矩形窗
    x4=enframe(x1,hanning(200),100);  %每两百个点分为一帧,再加加海宁窗
    x5=enframe(x1,hamming(200),100);%每两百个点分为一帧,再加海明窗
    

    完整的代码如下:

    clc;
    clear;
    close all;
    [x1,fs]=audioread('lantian.wav');  %读取音频文件lantian.wav
    info=audioinfo('lantian.wav') 
    figure()
    plot(boxcar(200))  %画矩形窗波形
    title('矩形窗');
    figure()
    plot(hanning(200))  %画海宁窗波形
    title('海宁窗');
    figure()
    plot(hamming(200))  %画海明窗波形
    title('海明窗');
    y1=fft(x1,256);   %对语音信号进行256点fft变换
    figure()
    subplot(211);
    plot(x1);
    title('原始语音信号');
    subplot(212);
    plot(abs(y1(1:256)));
    title('原始语音信号FFT频谱');
    x2=enframe(x1,200,100);%分帧
    figure();%画图
    subplot(221);
    plot(x2(50,:))   %画第50帧波形
    title('语音信号第50帧波形');
    x3=enframe(x1,boxcar(200),100);%每两百个点分为一帧,再加矩形窗
    subplot(222);
    plot(x3(50,:))  %画第50帧波形
    title('语音信号加矩形窗后第50帧波形');
    x4=enframe(x1,hanning(200),100);%每两百个点分为一帧,再加加海宁窗
    subplot(223);
    plot(x4(50,:))   %画第50帧波形
    title('语音信号加海宁窗后第50帧波形');
    x5=enframe(x1,hamming(200),100);%每两百个点分为一帧,再加海明窗
    subplot(224);
    plot(x5(50,:))   %画第50帧波形
    title('语音信号加海明窗后第50帧波形');
    

    结果:
    矩形窗:
    在这里插入图片描述
    海宁窗:
    在这里插入图片描述
    海明窗:
    在这里插入图片描述
    原始语音信号和语音信号的fft变换频谱图:
    在这里插入图片描述
    这是第50帧信号波形,语音信号直接分帧和对语音信号加不同窗函数的对比:
    在这里插入图片描述
    可以发现,对语音信号加矩形窗之后和不加窗的波形几乎一样。但加窗海宁窗和海明窗后结果和不加窗结果不一样,明显两边的波形幅度降低了,中间不变,这是因为海宁窗和海明窗因为边缘有一个下降带,对高于这个值的波形就截断掉了。海宁窗和海明窗效果几乎一样。

    展开全文
  • 语音信号分帧加窗matlab实现语音信号分帧加窗matlab实现function Seg=segment(signal,W,SP,Window)if nargin<3 SP=.4;endif nargin<2 W=256;endif nargin<4 Window=hamming(W);endWindow=Window(:); %...

    语音信号分帧加窗matlab实现

    语音信号的分帧加窗的matlab实现function Seg=segment(signal,W,SP,Window)if nargin<3 SP=.4;endif nargin<2 W=256;endif nargin<4 Window=hamming(W);endWindow=Window(:); %make it a column vectorL=length(signal);SP=fix(W.*SP);N=fix((L-W)/SP +1); %number of segmentsIndex=(repmat(1:W,N,1)+repmat((0:(N-1))'*SP,1,W))';hw=repmat(Window,1,N);Seg=signal(Index).*hw;语音信号处理预加重、加窗分帧matlab程序%获取语音信号[filename,pathname]=uigetfile('*.wav','choose a audio file:');[wavin,fs,nbits]=wavread([pathname filename]);wav_l=length(wavin); %采样点数,length()返回值是标量frame_l=0.04*fs; %根据fs选择帧长, step_l=floor(0.5*frame_l); %设置帧移 num_frame=floor((wav_l-frame_l)/step_l)+1; %确定帧数 win_ham=hamming(frame_l); %在做fft之前,为移除直流分量和加重高频分量,采用汉明窗,对信号进行加权 %加窗处理用来消除分帧时带来的截断效应 %加窗,分帧(矩阵每一行为一帧)for i=1:num_frame n1=(i-1)*step_l+1; n2=(i-1)*step_l+frame_l; zy(i,:)=(win_ham').*(yt(n1:n2)'); %存储每一帧噪音(行向量) %win_ham、yt是列向量,需转置 yy(i,:)=(win_ham').*(wavin(n1:n2)'); %存储每一帧纯净语音end关于matlab中的语音识别在用DFT求得倒普之后。为什么需要加上倒普提升窗口呢?? 谢谢!窗函数是这样的:w = 1+6*sin(pi*[1:12]./12); 为什么要这样计算呢?? 以下是具体的程序~~%%%%%文件"mfcc.m"function ccc=gbfcosmfcc(x)%归一化mel滤波器组系数bank=melbankm(24,256,16000,0,0.5,'m');bank=full(bank);bank=bank/max(bank(:));%DCT系数,12*24for k=1:12 n=0:23; dctcoef(k,:)=cos((2*n+1)*k*pi/(2*24));end%归一化倒谱提升窗口w=1+6*sin(pi*[1:12]./12);w=w/max(w);%预加重滤波器xx=double(x);xx=filter([1 -1],1,xx);xx=x; %zhang add%语音信号分帧%xx=enframe(xx,256,80);xppl=length(xx);j=1;for i=65:80:xppl-256, xx1(j,:)=xx(i:i+256-1)'; j=j+1;endxx=xx1;%计算每帧的MFCC参数for i=1:size(xx,1) y=xx(i,:); s=y'.*hamming(256); t=abs(fft(s)); t=t.^2; t=t+2*realmin; log(bank*t(1:129)) c1=dctcoef*log(bank*t(1:129)) c11=Disfrcthe(1,24)*log(bank*t(1:129)) c2=c1.*w'; m(i,:)=c2';end%差分参数dtm=zeros(size(m));for i=3:size(m,1)-2 dtm(i,:)=-2*m(i-2,:)-m(i-1,:)+m(i+1,:)+2*m(i+2,:);enddtm=dtm/3;%合并mfcc参数和一阶差分mfcc参数ccc=[m dtm];%去除首尾两帧,因为这两帧的一阶差分参数为0ccc=ccc

    展开全文
  • 语音信号加窗分帧matlab实现

    千次阅读 2020-02-24 19:28:58
    加窗分帧:时域加窗,点乘;频域卷积,减少泄露 解释:语音信号是时变信号,浊音的基音周期、清浊音信号幅度和声道参数均随时间变化,发声器官的惯性运动,可以认为具有短时平稳性。长10~30ms,交叠分段方式,...

    加窗分帧:时域加窗,点乘;频域卷积,减少泄露

    解释:语音信号是时变信号,浊音的基音周期、清浊音信号幅度和声道参数均随时间变化,发声器官的惯性运动,可以认为具有短时平稳性。帧长10~30ms,交叠分段方式,为了帧之间平滑过渡,保持连续性,帧移/帧长范围在0-1/2之间。

    1. 矩形窗:主瓣宽度小,较高频谱分辨率,但是旁瓣峰值较大,频谱泄露严重

    matlab程序:

    
    %时域波形
    
    w=rectwin(61)%矩形窗函数
    
    figure(1)%图1
    
    subplot(121)%图1中共包括1行2列的图形,此为1行1列的图形
    
    plot(w,'k')%'k'表示黑色
    
    xlabel('样本数')
    
    ylabel('幅度')
    
    %频域波形
    
    w1=fft(w,1024)%对窗函数做1024点的fft
    
    w2=w1/(max(w1))%幅度归一化
    
    w3=20*log10(abs(w2))%出来的是双边频谱(数学谱)
    
    w=2*[0:1023]/1024%频率归一化,双边频谱的范围[0,2]
    
    subplot(122)%图1中1行2列的图形
    
    plot(w,w3,'k')
    
    axis([0,1,-100,0])%单边频谱(物理谱),横坐标范围[0,1]
    
    xlabel('归一化频率f/fs')
    
    ylabel('幅度/dB')
    

    2. 汉明窗:主瓣宽度较宽,大于矩形窗的一倍,但是旁瓣衰减大,频谱泄露优于矩形窗,更平滑的低通特性,更好反映短时信号的频谱特性

    matlab程序:

    
    %时域波形
    
    w=hamming(61)%汉明窗函数
    
    figure(1)%图1
    
    subplot(121)%图1中共包括1行2列的图形,此为1行1列的图形
    
    plot(w,'k')%'k'表示黑色
    
    xlabel('样本数')
    
    ylabel('幅度')
    
    %频域波形
    
    w1=fft(w,1024)%对窗函数做1024点的fft
    
    w2=w1/(max(w1))%幅度归一化
    
    w3=20*log10(abs(w2))%出来的是双边频谱(数学谱)
    
    w=2*[0:1023]/1024%频率归一化,双边频谱的范围[0,2]
    
    subplot(122)%图1中1行2列的图形
    
    plot(w,w3,'k')
    
    axis([0,1,-100,0])%单边频谱(物理谱),横坐标范围[0,1]
    
    xlabel('归一化频率f/fs')
    
    ylabel('幅度/dB')
    

    展开全文
  • 语音信号分帧加窗matlab实现

    千次阅读 2019-08-20 15:23:19
    [x,fs,nbits]=wavread('5_1.wav'); x1=enframe(x,200,100);%分帧 x2=enframe(x,hamming(200),100);%加窗 figure;%画图 subplot(2,1,1),plot(x1(50,:)) figure subplot(2,1,2),plot(x2(50,:))
  • 语音信号加窗处理

    2021-04-23 09:26:06
    平稳的随机过程是研究语音信号的主要手段,但是语音信号本身并不是平衡的。一,语音信号不平稳语音信号在产生过程中与环境和发声器官的联系很紧密,与各种运动都是相关的,信号本身是不平移的信号。主要是由于发声...
  • 想问一下语音信号分帧加窗后做fft时怎么设置频率分辨率 % df = 2; % Nfft = fs/df+1 为什么我设置了频率分辨率后,做出来的频谱就不对了?是不是和窗函数有关系 Nfft = fs; f = (0:Nfft-1)*fs/Nfft; win = hanning...
  • Matlab语音处理,预加重,分帧加窗 Matlab语音处理,预加重,分帧加窗 Matlab语音处理,预加重,分帧加窗 Matlab语音处理,预加重,分帧加窗
  • 语音分帧加窗.rar

    2019-09-12 05:45:42
    语音信号处理之语音分帧加窗,基于matlab仿真实验》》
  • 语音信号分帧加窗处理

    千次阅读 2019-11-09 15:24:47
    语音信号是一个准稳态的信号,若把它分成较短的,每中可将其看做稳态信号,可用处理稳态信号的...将语音信号分帧后,需要对每一信号进行分析处理。窗函数一般具有低通特性,加窗函数的目的是减少频域中的泄漏。
  • 一般来讲,语音信号的采样率是挺高的,而且认为语音信号在一定时间段的基本特性不会发生较大的变化,具有一定的短时平稳性。进行“短时分析”就行将信号分解成一段一段地来处理,每一段就叫一,大约10-30ms,也...
  • 由于人耳能听到的声音时长至少为10ms,所以要将数字信号分帧成一个个可以听的块,也就是分帧中采样点的个数通常取2的幂,连续通常重复一半采样点,典型值是:256-8192 frame_duration = (1 / sr) * K K是一...
  • 语音信号分帧加窗处理的MATLAB的程序。
  • 语音是时变信号,处理时先加窗处理,窗 采用汉明窗
  • MATLAB GUI语音信号分析

    2018-07-02 13:23:07
    采用matlab gui设计的一个可以进行简单的语音信号分析的界面,包括语音信号的处理,语音信号分帧加窗等,如果有程序方面的问题请咨询1741321723@qq.com,欢迎大家下载程序,共同改进。
  • 语音信号预处理需要欲加重处理,其目的是将高频部分家中增加高频分辨率,以去除口鼻辐射影响。
  •   语音信号是一个非稳态的。...   在短时分析中,将语音信号分为一段一段地来分析其特征参数,其中每一段称为一“”,长一般取10~30ms。这样,对于整体的语音信号来讲,每一特征参数组成了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 489
精华内容 195
关键字:

matlab语音信号分帧加窗

matlab 订阅