新聞中心
Octave 是一個類似于 Linux 上的 Matlab 的軟件,它擁有數量眾多的函數和命令,支持聲音采集、記錄、回放以及音頻信號的數字化處理,用于娛樂應用、研究、醫(yī)學以及其它科學領域。在本教程中,我們會在 Ubuntu 上使用 Octave 的 4.0.0 版本讀取音頻文件,然后通過生成信號并且播放來模仿在各種情況下對音頻信號的使用。

華州網站制作公司哪家好,找創(chuàng)新互聯(lián)!從網頁設計、網站建設、微信開發(fā)、APP開發(fā)、自適應網站建設等網站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)于2013年創(chuàng)立到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選創(chuàng)新互聯(lián)。
信號疊加
兩個信號 S1(t)和 S2(t)相加形成一個新的信號 R(t),這個信號在任何瞬間的值等于構成它的兩個信號在那個時刻的值之和。就像下面這樣:
R(t) = S1(t) + S2(t)
我們將用 Octave 重新產生兩個信號的和并通過圖表看達到的效果。首先,我們生成兩個不同頻率的信號,看一看它們的疊加信號是什么樣的。
第一步:產生兩個不同頻率的信號(oog 文件)
>> 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 赫茲)
>> [y1, fs] = audioread(sig1);
>> plot(y1)
信號 2 的圖像(880 赫茲)
>> [y2, fs] = audioread(sig2);
>> plot(y2)
第二步:把兩個信號疊加
現在我們展示一下前面步驟中產生的兩個信號的和。
>> sumres=y1+y2;
>> plot(sumres)
疊加信號的圖像和信號的圖像Octaver 中的效果
在 Octaver 中,這個效果產生的聲音是獨特的,因為它可以仿真音樂家彈奏的低八度或者高八度音符(取決于內部程序設計),仿真音符和原始音符成對,也就是兩個音符發(fā)出相同的聲音。
第三步:把兩個真實的信號相加(比如兩首音樂歌曲)
為了實現這個目的,我們使用格列高利圣詠(Gregorian Chants)中的兩首歌曲(聲音采樣)。
圣母頌曲(Avemaria Track)
首先,我們看一下圣母頌曲并繪出它的圖像:
>> [y1,fs]=audioread('avemaria_.ogg');
>> plot(y1)
圣母歌曲
贊美詩曲(Hymnus Track)
現在我們看一下贊美詩曲并繪出它的圖像。
>> [y2,fs]=audioread('hymnus.ogg');
>> plot(y2)
贊美詩曲
圣母頌曲 + 贊美詩曲
>> 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 矩陣操作產品手冊。
乘積生成信號的圖像
兩個基本頻率相差很大的信號相乘后的圖表效果(調制原理)
第一步:
生成兩個頻率為 220 赫茲的聲音信號。
>> fs=44100;
>> t=0:1/fs:0.03;
>> w=2*pi*220*t;
>> y1=cos(w);
>> plot(y1);
載波
第二步:
生成一個 22000 赫茲的高頻調制信號。
>> y2=cos(100*w);
>> plot(y2);
調試中
第三步:
把兩個信號相乘并繪出圖像
>> 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)
倒相余弦
結論
基本數學運算比如代數和、乘,以及函數與常量相乘是更多高級運算比如譜分析、振幅調制,角調制等的支柱和基礎。在下一個教程中,我們來看一看如何進行這樣的運算以及它們對聲音文件產生的效果。
網站欄目:Octave基本數學信號處理處理音頻
文章轉載:http://www.dlmjj.cn/article/cogpsgd.html


咨詢
建站咨詢
