音频世界一
人类获取外部世界信息主要的一个来源就是声音。音频世界系列文章将带大家走进人类的声音世界。学习了解数字音频算法的原理以及现实中的应用和FPGA的实现。
声音(sound)的物理术语为由物体振动产生的声波。是通过介质(空气或固体、液体)传播并能被人或动物听觉器官所感知的波动现象。
声音作为一种波,频率在20 Hz~20 kHz之间的声音是可以被人耳感知到。
Matlab制作的不同单频率的声音:
1,100hz
2,1000hz
3,10000hz
4,18000hz
由于公众号每篇文章只能添加一个音频文件,所以不能在此添加上来供大家欣赏比对不同但频率的声音对人耳听觉的感觉。1.8khz基本人耳已经听不到声音,大家可以尝试自己制作。
声音的3个基本部分为:响度、音调和音色。
响度:声波的强度的量度。
音调:声音中基波成分的频率。
音色:有信号的谐波分量决定(基波+泛音)。泛音既是多个谐波。
数字音频的基本详细:采样(sample)、量化(quantization)和声道(channel)。
数字器件处理音频的前提是要将模拟信号转化成数字信号,其中需要采样和量化。
人的发生频率范围大约在100hz到10000hz之间,我们一般人的听力范围在20hz到20khz之间,高于20000hz的叫做超声波,而低于20hz的叫做次声波。男人的声音一般会响度大而音调低,女人的音调高而响度低。
一般高保真音乐的带宽在5hz--20khz采样频率为44.1khz(根据奈奎斯特采样定律),或48khz。电话或者手机的语音带宽一般在200hz到3.2khz,采样频率为8khz。
原始音乐:
Matlab音频的基本分析:
close all
clear all
clc
info =audioinfo('sample_orig.mp3');%获取音频文件的信息
[audio,Fs] = audioread('sample_orig.mp3');%读取音频文件
sound(audio,Fs);%播放音频文件
%audiolength = length(audio);%获取音频文件的数据长度
audiolength = 2048;%获取音频文件的数据长度
t = 1:1:audiolength;
f_osc =fft(audio(1:audiolength),audiolength);
f_osc=20*log(abs(f_osc))/log(10); %换算成dBW单位
ft=[0:(Fs/audiolength):Fs/2]; %转换横坐标以Hz为单位
f_osc=f_osc(1:length(ft));
figure(1),
subplot(211),plot(t,audio(1:audiolength));
xlabel('Time');
ylabel('Audio Signal');
title('原始音频文件信号幅度图');
subplot(212),plot(ft,f_osc);
xlabel('频率(Hz)');
ylabel('功率(dBW)');
title('原始音频文件信号频谱图');
如上图所示matlab可以通过audioinfo得到音频的基本信息,包括通道数(NumChannels)、采样率(SampleRate)、持续时间(Duration)等信息。
如上图所示,上图1为原始信号随时间的幅度图,它代表声音随时间的响度(数值大小)的变化,上图2代表声音随频率幅度的变化。我们取了前2048个点来分析。可以看到前2048个点的频率集中在3khz以下。
如上图所示是这首音乐的声谱图(spectrogram),上面的频谱图只代表这上边的很小一段声音。把一整段声音信号截成很多小段就形成了很多帧语音,对每一段语音进行幅频分析后将频谱“竖直”起来(用纵轴代表频率),用颜色深浅代表频谱的强度,再把所有的频率谱横向连接起来(横轴表示时间),就得到了声谱图。