科学音频处理,第二部分 - 如何使用Ubuntu的Octave 4.0在音频文件中进行基本的数学信号处理

在上一个教程中 ,我们看到了读取,写入和播放音频文件的简单步骤。 我们甚至看到了如何从周期函数(如余弦函数)中合成音频文件。 在本教程中,我们将看到我们如何添加信号,乘法信号(调制)以及应用一些基本的数学函数来看待它们对原始信号的影响。

添加信号

两个信号S1(t)和S2(t)之和产生一个信号R(t),其值在任何时刻都是此时的相加信号值之和。 像这样:

R(t)= S1(t)+ S2(t)

我们将重新创建八度的两个信号的和,并以图形方式看到效果。 首先,我们将产生不同频率的两个信号,以查看由和产生的信号。

第1步:创建两个不同频率的信号(ogg文件)

>> sig1='cos440.ogg';                  %creating the audio file @440 Hz
>> sig2='cos880.ogg';                  %creating the audio file @880 Hz
>> fs=44100;                           %generating the parameters values (Period, sampling frequency and angular frequency)
>> t=0:1/fs:0.02;
>> w1=2*pi*440*t;
>> w2=2*pi*880*t;
>> audiowrite(sig1,cos(w1),fs);        %writing the function cos(w) on the files created
>> audiowrite(sig2,cos(w2),fs);


这里我们将绘制两个信号。

信号图1(440 Hz)

>> [y1, fs] = audioread(sig1);
>> plot(y1)

信号2(880 Hz)

>> [y2, fs] = audioread(sig2);
>> plot(y2)


第2步:添加两个信号

现在我们执行上一步创建的两个信号的总和。

>> sumres=y1+y2;
>> plot(sumres)

结果信号图


八度效应

在Octaver中,这种效果提供的声音是特征,因为它模拟了音乐家正在播放的音符,无论是在较低或更高的八度(根据已编程),还有声音原始音符,即两个音符出现相同的声音。

第3步:添加两个实际信号(具有两个音轨的示例)

为了这个目的,我们将使用两条格里高利颂歌(语音采样)。

Avemaria轨道

首先,将阅读并绘制Avemaria曲目:

>> [y1,fs]=audioread('avemaria_.ogg');
>> plot(y1)

赞美诗

现在,将阅读和绘制一首诗歌

>> [y2,fs]=audioread('hymnus.ogg');
>> plot(y2)

Avemaria + Hymnus Track

>> y='avehymnus.ogg';
>> audiowrite(y, y1+y2, fs);
>> [y, fs]=audioread('avehymnus.ogg');
>> plot(y)




结果,从音频的角度来看,两个音轨都会混音。

两个信号的产品


要乘以两个信号,我们必须使用一种类似的方法。 让我们使用以前创建的相同的文件。

R(t)= S1(t)* S2(t)



>> sig1='cos440.ogg';                  %creating the audio file @440 Hz
>> sig2='cos880.ogg';                  %creating the audio file @880 Hz
>> product='prod.ogg';                 %creating the audio file for product
>> fs=44100;                           %generating the parameters values (Period, sampling frequency and angular frequency)
>> t=0:1/fs:0.02;
>> w1=2*pi*440*t;
>> w2=2*pi*880*t;
>> audiowrite(sig1, cos(w1), fs);      %writing the function cos(w) on the files created
>> audiowrite(sig2, cos(w2), fs);
>> [y1,fs]=audioread(sig1);
>> [y2,fs]=audioread(sig2);
>> audiowrite(product, y1.*y2, fs);    %performing the product
>> [yprod,fs]=audioread(product);
>> plot(yprod);                        %plotting the product


注意:我们必须使用操作数'。*',因为这个产品在参数文件上是有价值的。 有关更多信息,请参阅产品操作手册,使用Octave矩阵。

产生结果信号图

将两个信号乘以大的基频差的图形效应(调制原理)

第1步:

创建220Hz频率的音频信号。

>> fs=44100;
>> t=0:1/fs:0.03;
>> w=2*pi*220*t;
>> y1=cos(w);
>> plot(y1);


第2步:

创建一个22000 Hz的较高频率调制信号。

>> y2=cos(100*w);
>> plot(y2);

第3步:

乘以和绘制两个信号。

>> plot(y1.*y2);


将信号乘以标量

将函数乘以标量的效果等同于修改其范围,在某些情况下修改相位的符号。 给定标量K,函数F(t)乘以标量的乘积定义为:

R(t)= K * F(t)


>> [y,fs]=audioread('cos440.ogg');        %creating the work files
>> res1='coslow.ogg';               
>> res2='coshigh.ogg';
>> res3='cosinverted.ogg';
>> K1=0.2;                                %values of the scalars
>> K2=0.5;
>> K3=-1;
>> audiowrite(res1, K1*y, fs);            %product function-scalar
>> audiowrite(res2, K2*y, fs);
>> audiowrite(res3, K3*y, fs);

原始信号的曲线
>> plot(y)

信号幅度减小0.2

>> plot(res1)


信号幅度减小0.5

>> plot(res2)


反相信号图

>> plot(res3)

结论


基本的数学运算,如代数和,乘积,以及标量函数的乘积,是高级运算的骨干,其中包括频谱分析,幅度调制,角度调制等。在下一个教程中,我们将会看看如何使这些操作及其对音频信号的影响。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏