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

本文详细介绍了如何在MATLAB环境中进行语音信号的采集、处理和分析,包括FFT频谱分析、滤波器设计等,并通过实际代码展示了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);    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

3 仿真结果

4 参考文献

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

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

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值