matlab 二维高斯滤波 傅里叶_科协五分钟|用Matlab工具包处理音频信号

科协近期大事汇总

1. 9月28日晚,硬件人才计划顺利验收。

2. 9月28日下午,仪器设计大赛综合组交流。

3. 五系联合实验室参观筹办中,预计第六第七周举办

4. 仪器设计大赛新生组开发稳步进行。

Matlab是一个功能非常强大的数学软件,在之前的科协五分钟中,我们曾学习过如何利用Matlab演奏歌曲。

本期的科协五分钟,我们将进一步学习,利用Matlab中的Signal Analyzer工具包对我们生成的音频进行分析和处理(信号处理的预习与复习)

ea9b341d5485c7c87cac8d6d1fd656fb.gif

在介绍这个有用的工具包之前,我们先来了解下几个可能会让人脑阔疼的名词——

傅里叶分析

(一听名字就知道这是谁的“专利”)

     很多人都可能会谈“傅”色变,对其敬而远之,但不得不说,没有傅里叶分析,信号的分析处理就无从谈起。为了逐步理解傅里叶分析是一个什么神仙理论,我们先从简单的周期函数看起——

ef7d75ea77ab52624bbc5e4d5a286b10.png

傅里叶同学告诉我们——“任何周期函数,都可以看作是不同振幅,不同角频率、不同相位三角函数的叠加。”

f13ebb3ee08418c6a5960cbe7c2f0e36.gif

这句话用数学语言来讲,周期函数f(x):

65a36055a58cb1eec7e16e32d99a456a.png dac987ac3f6c6fc40b18979d4c12b797.png

这就是所谓的傅里叶级数展开(微积分A2)

而对于复杂的非周期函数呢?

不用担心,傅里叶大师还给了我们另一个工具——

   · 傅里叶变换

bc9b20e467373cfbd15c9bf50632dd84.png

(傅里叶分析就是在傅里叶级数和傅里叶变换上的研究和扩展)

     值得一提的是,傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维模式。现在有了傅里叶的这两个锦囊,我们就有能力对已知的信号函数进行转化,再以不同的角频率作为自变量后,我们就会发现傅里叶为我们开辟出的一个时间之外的,全新的世界——频域。 

 · 时域与频域

     时域我们很好理解,它就是以时间为自变量对事物进行描述,我们可以凭此得到一个函数图像f(t),而经过傅里叶分析后,这个f(t)就能被转化成若干个不同角频率的三角函数的叠加-F(w)

     我们以这些三角函数的角频率作为横坐标,以振幅作为纵坐标,这样我们就得到了在频域范围下f(t)的频谱图F(w),由此,f(t)便以另一种方式F(w)被确定下来。

      例如下面的一个近似方波的信号图像:

【下图中黑色部分为f(t),彩色部分为叠加的一个个三角函数】

08a879ac4e96c2c6a9ba51a7e4bf225b.png

如果想将F(w)还原回f(t),只需要经过一次傅里叶逆变换即可

a5b9429554e09526e0cefffaef583c98.gif

了解(复习)基础知识后,下面进入实操环节

5c1514cbaac36d6bab155ff5cad59f8a.gif

首先,我们用一段代码生成一段简单的音乐。

4b074ffad98c989a0e9a8074acc21ee9.png

附上参考代码:

fs = 2e3;

t = 0:1/fs:0.3-1/fs;

l = [0 130.81 146.83 164.81 174.61 196.00 220 246.94];

m = [0 261.63 293.66 329.63 349.23 392.00 440 493.88];

h = [0 523.25 587.33 659.25 698.46 783.99 880 987.77];

note = @(f,g) [1 1 1]*sin(2*pi*[l(g) m(g) h(f)]'.*t);

mel = [3 2 1 2 3 3 3 0 2 2 2 0 3 5 5 0 3 2 1 2 3 3 3 3 2 2 3 2 1]+1;

acc = [3 0 5 0 3 0 3 3 2 0 2 2 3 0 5 5 3 0 5 0 3 3 3 0 2 2 3 0 1]+1;

song = [];

for kj = 1:length(mel)

song = [song note(mel(kj),acc(kj)) zeros(1,0.01*fs)];

end

song = song'/(max(abs(song))+0.1);

sound(song,fs)

tune = timetable(seconds((0:length(song)-1)'/fs),song);

                      (Matlab乐曲演奏传送门,轻点传送)

b6400f4823f40c88accc57198db92ec5.png

然后,让我们点击APP→Signal Analyzer

进入界面后,可以使用Time、Spectrum、Spectrogram三个函数对音频进行分析——

Time函数:根据音频生成时域图像,横轴表示时间,纵轴表示功率;

Spectrum函数:生成频域图像(功率谱),横轴表示频率,纵轴表示功率,在这里可以看到是哪几个频率占据了信号的主导;

Spectrogram函数:能实现短时傅里叶分析,简单地说就是在一个短期局部时间内进行频率成分估计,颜色越浅,表明该频率对应的功率越大,也就是该音符所占成分越大——所以,Spectrogram可以理解成是一张“五线谱”图。下图中,黄色部分为功率较高的部分。

9aa0894db042dffc03f8ba6ab30128c1.png

此外,我们还可以使用工具包内的滤波器(Filter Signal)

我们将音频复制三份,命名为high、medium、low三个声部,分别使用高通滤波器(highpass,使高频信号得以通过,而低频信号被衰减)、带通滤波器(bandpass)、低通滤波器(lowpass)三种滤波器进行处理。

例如,在分离中声部时,我们选中Bandpass,设置截止频率(230-450Hz),就可以对230Hz~450Hz区间以外的频率部分进行滤除,也就从频域去除了其他两个声部的声音(红色部分)。

486d802c4035c4b951152ef12db625f2.png 3a3a7389f5d0d1ea81a2466f953c3900.png

为了更加直观地看到滤波器的效果,我们把经过滤波的音频文件导出为另一个mat文件(这是一个matlab储存数据用的文件),再在Matlab工作区加载这个文件,再用sound函数进行播放就听到三个声部分别的声音了。

附上参考代码:

load marry_music

sound(low.Var1,fs);

bff7fea6d6dd1896e0b6c6054b696d54.png bf2dc2d8b069fd058194a654f78e9565.gif

                                                          文案:李豪汉,李苇杭

    排版:李豪汉,李苇杭

                                                          审核:滕峻池,林逸晗

f358a1a4690f8fc518e2a3c7e0728bdb.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值