【MATLAB】关于音频处理的一些常用函数总结

引言:因为智能车竞赛的信标追逐规则修改为声标,需要学会对chirp信号做相关处理,这里顺便对音频处理做一个总结,本文稍显累赘,想快速上手可直接看文末所附代码

主要函数

1.读取音频–function [y,Fs] = audioread(filename, range, datatype)

audioread可以读取的音频格式有wave、flac、MP3、MPEG-4、OGG

%    File Format      BitsPerSample  Data Type of Y     Data Range of Y
%    ----------------------------------------------------------------------
%    WAVE (.wav)            8           uint8             0 <= Y <= 255
%                          16           int16        -32768 <= Y <= 32767
%                          24           int32         -2^32 <= Y <= 2^32-1
%                          32           int32         -2^32 <= Y <= 2^32-1
%                          32           single         -1.0 <= Y <= +1.0
%    ----------------------------------------------------------------------
%    FLAC (.flac)           8           uint8             0 <= Y <= 255
%                          16           int16        -32768 <= Y <= 32767
%                          24           int32         -2^32 <= Y <= 2^32-1
%    ----------------------------------------------------------------------
%    MP3 (.mp3)            N/A          single         -1.0 <= Y <= +1.0
%    MPEG-4(.m4a,.mp4)
%    OGG (.ogg)
%    ----------------------------------------------------------------------

有两个输出参数Y和FS, Y是一个m*n的矩阵,其中m为音频采样点数,n为音频通道数,FS为采样频率

%   [Y, FS]=AUDIOREAD(FILENAME, DATATYPE) specifies the data type format of
%   Y used to represent samples read from the file.
%   If DATATYPE='double', Y contains double-precision normalized samples.
%   If DATATYPE='native', Y contains samples in the native data type
%   found in the file.  Interpretation of DATATYPE is case-insensitive and
%   partial matching is supported.
%   If omitted, DATATYPE='double'.  

2.播放音频–function sound(y,fs,bits)

sound(Y,FS); %播放对应Y和FS对应参数的音频
bits为采样位数

3.快速傅里叶变换–fft(X)

将信号从时域转换到频域,MATLAB中FFT函数的意义

项目代码

file = 'chirp_鹰短尾_ 啁啾05.mp3';   %读取文件

%音频播放
[Y,FS] = audioread(file);
[m,n] = size(Y);
disp(m);    %输出采样频率
disp(n);    %输出音频通道数
disp(FS);    %输出采样频率
disp(m/FS);    %输出素材音频时长

sound(Y,FS);    %播放对应Y和FS对应参数的音频
s1 = Y(:,1);
sound(s1,FS);   %只播放其中一个通道的音频

%%音频绘制
timeArray = (0:m-1)/FS;
timeArray1 =timeArray*1000; %放大到毫秒级
figure;plot(timeArray1,s1,'k');title('Amplitude Curve');xlabel('Time(ms)');ylabel('Amplitude');

%%绘制频率信息
s1_L = length(s1);
p = fft(s1);    %计算傅里叶变换
nUniquePts = ceil((s1_L+1)/2); 
p1 = p(1:nUniquePts);   %选择前半部,因为后半部是前半部的一个镜像
p2 = abs(p1);   %取绝对值,即幅度
p3 = p2/s1_L;   %使用点数按比例缩放,这样幅度和信号长度或者它自身的频率无关
p4 = p3.^2;     %平方得到功率
if rem(s1_L,2)  %奇数,nfft需要排除奈奎斯特点
    p4(2:end) = p4(2:end)*2;
else
    p4(2:end-1) = p4(2:end-1)*2;
end
freqArray=(0:nUniquePts-1)*(sampFreq/n);%创建频率数组
figure;plot(freqArray/1000,10*log10(p4),'k');
title('Power-Frequency Curve');
xlabel('Frequency(kHz)');
ylabel('Power(dB)');

运行结果测试

在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
MATLAB音频分离函数可以通过信号处理的方法将混合在一起的音频信号分离成各个独立的音频信号。音频分离函数音频处理、语音识别、音乐分析等领域有广泛的应用。 MATLAB提供了多种音频分离函数,其中比较常用的有基于快速独立成分分析(FastICA)算法的`fastica`函数、基于盲源分离(Blind Source Separation,BSS)算法的`bssmld`函数、基于非负矩阵分解(Non-negative Matrix Factorization,NMF)算法的`nmf`函数等。 使用这些函数进行音频分离的一般步骤如下: 1.加载音频数据:使用MATLAB音频读取函数如`audioread`将混合的音频文件加载为MATLAB中的音频信号。 2.预处理音频数据:根据需要进行预处理,如去除噪声、均衡化音量等。 3.选择合适的音频分离函数:根据音频信号的特点和分离的需求选择合适的音频分离函数。 4.将音频信号输入分离函数:将预处理后的音频信号输入选择的音频分离函数进行处理。 5.获取分离后的音频信号:从音频分离函数的输出中获取分离后的音频信号。 6.保存分离后的音频信号:使用MATLAB音频写入函数如`audiowrite`将分离后的音频信号保存为音频文件。 需要注意的是,音频分离是一个复杂的任务,其结果受到多个因素的影响,包括音频信号的质量、混合音频的复杂程度、选择的分离算法等。因此,在实际应用中需要根据具体情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Magician0619

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

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

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

打赏作者

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

抵扣说明:

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

余额充值