当前位置 : 主页 > 编程语言 > python >

【语音处理】音频信号提取分析含Matlab源码

来源:互联网 收集:自由互联 发布时间:2022-06-18
1 简介 MATLAB是十分强大的用于数据分析和处理的工程实用软件,利用其来进行语音信号的分析,处理和可视化十分便捷.文中介绍了在 MATLAB环境中如何驱动声卡采集语音信号和语音信号采集

1 简介

MATLAB是十分强大的用于数据分析和处理的工程实用软件,利用其来进行语音信号的分析,处理和可视化十分便捷.文中介绍了在 MATLAB环境中如何驱动声卡采集语音信号和语音信号采集后的文档处理方法,并介绍了 FFT 频谱分析原理及其显示,MATLAB中相关函数的功能,滤波器的设计和使用.在此基础上,对实际采集的一段含噪声语音信号进行了相关分析处理,结果表明利用 MATLAB处理语音信号十分简单,方便且易于实现.

2 部分代码

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位\n',info.channels_num);
%采样频率
info.fs = add_helper(A,25,4);%从25位开始,持续4位
fprintf('采样频率为%d位\n',info.fs);
%取样位数
info.bits_per_sample = add_helper(A,35,2);
fprintf('取样位数为%d位\n',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\n',info.data_length,info.data_length_type);
%文件长
[info.file_length,info.file_length_type] = calculate_file_len(length(A));
fprintf('文件长为%.2f %s\n',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\n',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);
end
end
% A表示wav文件数据
% return file_length表示文件长度
% return len_type表示长度对应类型,有B,KB,MB,GB
function [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

3 仿真结果

【语音处理】音频信号提取分析含Matlab源码_语音信号

4 参考文献

[1]黄春燕, 景妮洁, 祝红梅. 语音信号的MATLAB分析与处理[J]. 计算机科学, 2018, 45(B06):4.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。


【语音处理】音频信号提取分析含Matlab源码_采样频率_02


网友评论