matlab语音分帧加窗,语音处理——对wav文件加窗分帧,求能量,过零率

注意这里面的WAV文件是双声道的,窗函数选的是汉宁窗

clc;

clear all;

close all;

[filename,pathname]=uigetfile('*.wav','请选择语音文件:');

[y,fs,Nbits]=wavread([pathname,filename]); % y里面放的是采样的数值;fs是采样频率;bits表示采样位数

N=length(y); %信号长度

sound(y,fs,Nbits);

framelength=200; %给出帧长framelength,

frameshift=80; %给出帧移frameshift

hanning_window=hanning(framelength); %给出汉宁窗

Y=enframe(y,framelength,frameshift); %分帧

figure(1);plot(Y),xlabel('帧');ylabel('幅值');title('Hanning-分帧加窗后矩阵');

time=(0:N-1)/fs; %计算出信号的时间刻度,即坐标

figure(2);

plot(time,y);title('语音文件的时间波形');ylabel('幅值');xlabel('时间/s');

n=size(Y);

for i=1:n(1)

frame_energy(i)=Y(i,:)*Y(i,:)';

end

figure(3);plot(frame_energy),xlabel('帧');title('Hanning-短时能量图');ylabel('幅值');

a=sign(Y);

framenumber=size(Y,2); %帧数

zcr1=zeros(1,n(1)); %初始化

c=[zcr1' a];

d=[a zcr1'];

zcr=d-c;

zcr=(0.5*sum(abs(zcr),2))/(n(2)-1);

%zcr=0.5*sum(abs(zcr),2);

figure(4)

plot(zcr);xlabel('帧');title('Hanning-过零率');ylabel('幅值');

fp=fopen('E:\MatlabCode\ouyangrui_hanningwin信号数据.txt','wt');

fprintf(fp,'使用的窗函数: 汉宁窗\n');

fprintf(fp,'信号的长度:N= %d\n',N);

fprintf(fp,'采样频率:fs = %d\n',fs);

fprintf(fp,'给定的帧长= %d\n',framelength);

fprintf(fp,'给定的帧移= %d\n',frameshift);

fp1=fopen('E:\MatlabCode\ouyangrui_hanningwin分帧后数据.txt','wt');

fprintf(fp1,'使用的窗函数: 汉宁窗\n');

fprintf(fp1,'分帧后数据\n');

fprintf(fp1,'%f\t',Y);

fp2=fopen('E:\MatlabCode\ouyangrui_hanningwin分帧前数据.txt','wt');

fprintf(fp2,'使用的窗函数: 汉宁窗\n');

fprintf(fp2,'分帧后数据\n');

fprintf(fp2,'%f\t',y);

fp3=fopen('E:\MatlabCode\ouyangrui_hanningwin短时能量.txt','wt');

fprintf(fp3,'使用的窗函数: 汉宁窗\n');

fprintf(fp3,'短时能量\n');

fprintf(fp3,'%f\t',frame_energy);

fp4=fopen('E:\MatlabCode\ouyangrui_hanningwin过零率.txt','wt');

fprintf(fp4,'使用的窗函数: 汉宁窗\n');

fprintf(fp4,'过零率\n');

fprintf(fp4,'%f\t',zcr);

你可能感兴趣的:(matlab语音分帧加窗)