【语音处理】音频信号提取分析含Matlab源码
1 简介
MATLAB是十分强大的用于数据分析和处理的工程实用软件,利用其来进行语音信号的分析,处理和可视化
十分便捷.文中介绍了在 MATLAB环境中如何驱动声卡采集语音信号和语音信号采集后的文档处理方法,
并介绍了 FFT 频谱分析原理及其显示,MATLAB中相关函数的功能,滤波器的设计和使用.在此基础上,对实
际采集的一段含噪声语音信号进行了相关分析处理,结果表明利用 MATLAB处理语音信号十分简单,方便
且易于实现.
2 部分代码
3 仿真结果
clc;clear;close all;%获得数据长度filepath = '语音素材/speaking.wav';fileID =
fopen(filepath);A = fread(fileID);%声道数info.channels_num = add_helper(A,23,2);%
在第24和23位,24位为高位fprintf('声道数为%d位',info.channels_num);%采样频率info.fs =
add_helper(A,25,4);%从25位开始,持续4位fprintf('采样频率为%d位',info.fs);%取样位数
info.bits_per_sample = add_helper(A,35,2);fprintf('取样位数为%d位
',info.bits_per_sample);%数据长度,因为这里有一个数据类型转换两个byte才被视为一个数据值
data_length = add_helper(A,75,4);[info.data_length,info.data_length_type] =
calculate_file_len(data_length);fprintf('数据长为%.2f
%s',info.data_length,info.data_length_type);%文件长
[info.file_length,info.file_length_type] =
calculate_file_len(length(A));fprintf('文件长为%.2f
%s',info.file_length,info.file_length_type);%因为是将两字节数据视为1个数据,所以要除
以2,因为只取一个声道故需要处理声道数info.real_length =
data_length/info.channels_num/2;%音频长度info.music_length =
roundn(info.real_length/info.fs,-2);fprintf('音频文件长度为%.2f
s',info.music_length);%与采样位数有关,多少Byte合成一位val =
info.bits_per_sample/8;%左声道数据left_wav = zeros(info.real_length/2/val,1);%右声
道数据right_wav = zeros(info.real_length/2/val,1);for i = 0:info.real_length-1
left_wav(i+1) = add_helper(A,79+i*4,2); right_wav(i+1) =
add_helper(A,79+i*4+val,2);end[x,fs] = audioread(filepath,'double');% figure;%
subplot(2,1,1)% plot(left_wav);% subplot(2,1,2)% plot(right_wav);Hex_A =
dec2hex(A);% A表示wav文件数据% start表示起始位% total表示总位数% return 得到的十进制数据
function tmp = add_helper(A,start,total) tmp = A(start+total-1); for
i=total-2:-1:0 tmp = tmp*16*16+A(start+i); endend% A表示wav文件数据%
return file_length表示文件长度% return len_type表示长度对应类型,有B,KB,MB,GBfunction
[len,len_type]=calculate_file_len(native_A) len = native_A; len_index = 1;
len_list = {'B','KB','MB','GB'}; while len >= 1024 len = len/1024;
len_index = len_index+1; end %保留两位小数 len = roundn(len,-2);
len_type = len_list{len_index};end
评论0