0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用MATLAB進(jìn)行數(shù)字信號(hào)處理-第1部分

王莉 ? 來源:比吥匕卟 ? 作者:比吥匕卟 ? 2023-02-24 09:51 ? 次閱讀

這篇文章來源于DevicePlus.com英語網(wǎng)站的翻譯稿。

poYBAGPzFpOAPFLrAAF9PASTOUk468.jpg

在本教程中,我們將分析語音信號(hào)。我們?nèi)祟惏l(fā)出的聲波是連續(xù)的模擬信號(hào),然而對(duì)于信號(hào)處理,我們需要一個(gè)非連續(xù)時(shí)間模型——計(jì)算機(jī)的數(shù)字模型。本文的主要目的是幫助大家了解如何實(shí)現(xiàn)數(shù)字信號(hào)處理。我們將會(huì)比較自己錄制的聲音和一個(gè)失真信號(hào),從中尋找2個(gè)語音信號(hào)之間的相似點(diǎn)和不同點(diǎn)。

對(duì)于這個(gè)項(xiàng)目,有一點(diǎn)比較重要:我們應(yīng)該在應(yīng)用不同的參數(shù)時(shí),著重了解波形模式以及它們?nèi)绾坞S時(shí)間變化。在本文(第1部分)中,我們將探討語音信號(hào)的一些特性以及如何使用MATLAB處理這種信號(hào);然后,我們使用Arduino對(duì)錄制的語音信號(hào)進(jìn)行詳細(xì)分析。

軟件

Audacity

Matlab

Arduino IDE

第1步:關(guān)于語音信號(hào)

處理語音信號(hào)時(shí),我們要了解“信號(hào)”的含義,這一點(diǎn)很重要。那信號(hào)是什么?

通信信號(hào)處理 ,作者Paolo Prandoni與Martin Vetterli:

“信號(hào)”是對(duì)隨時(shí)間或空間演變的現(xiàn)象的一種形式描述;通過信號(hào)處理,我們可以描述任何手動(dòng)或“機(jī)械”操作,從而修改、分析或操控一個(gè)信號(hào)中包含的信息。我們舉個(gè)環(huán)境溫度的簡單例子:我們就這個(gè)物理變量的正式模型達(dá)成一致——比如攝氏度——之后,我們可以用各種方式記錄溫度隨時(shí)間的變化,而結(jié)果數(shù)據(jù)集就代表一個(gè)溫度“信號(hào)”。

第一步,我們將了解語音信號(hào)的屬性。錄制自己的聲音之前,讓我們首先在Audacity中了解一些不同的參數(shù)。

聲道數(shù)量:

單聲道:您使用一個(gè)聲道進(jìn)行錄音,這意味著只有一個(gè)音頻信號(hào)——錄音分布在同一音量級(jí)別。因此如果您有兩個(gè)或更多揚(yáng)聲器,您聽不出差異。這是最常用的方法,因?yàn)槁曇羰怯靡粋€(gè)麥克風(fēng)錄制的,這意味著單聲道占用的帶寬較少,因此對(duì)許多應(yīng)用(比如電話和無線電)來說非常有用。對(duì)于不太熟悉音頻設(shè)備放置技術(shù)細(xì)節(jié)的用戶來說,單聲道是正確的選擇。

poYBAGPzFpWAX3vDAABGEwYAQlA089.jpg

圖1:單個(gè)音頻信號(hào)在同一音量級(jí)別上分配給多個(gè)揚(yáng)聲器(單聲道)

立體聲:您用兩個(gè)或更多聲道錄音。由于信號(hào)來自多個(gè)信號(hào)源,因此能夠描述聲音的方向和位置。使用立體聲設(shè)置意味著您需要將至少2個(gè)麥克風(fēng)放置在適當(dāng)?shù)奈恢?。通過這種方式,您可以確定多個(gè)聲源的不同位置。這種錄制通常用于電影和音樂,以獲得更廣泛的聲場解析。

pYYBAGPzFpeARbrWAABblSoVF1I112.jpg

圖2:兩個(gè)或多個(gè)信號(hào)通道分配到揚(yáng)聲器(立體聲)

項(xiàng)目速率(采樣率):在一秒內(nèi)對(duì)連續(xù)時(shí)間信號(hào)的采樣次數(shù),然后將其轉(zhuǎn)換為離散時(shí)間信號(hào)(數(shù)值)。采樣的度量單位是S/s(即每秒采樣數(shù))。

由于音頻信號(hào)是模擬信號(hào),我們需要將其轉(zhuǎn)換為數(shù)字信號(hào),以便由計(jì)算機(jī)進(jìn)行處理。我們可以使用下面的采樣定理完成此操作。

我們假設(shè)有一個(gè)模擬信號(hào),如下圖所示。想象一下,您需要向您的朋友描述這個(gè)信號(hào)。這項(xiàng)任務(wù)并不是最簡單的任務(wù)。在這種情況下,將信號(hào)描述為數(shù)字序列將更加簡單。

poYBAGPzFpiAVTLLAAA59OW7Qnw641.jpg

圖3:模擬信號(hào)示例

每個(gè)樣本都以其自身的幅度進(jìn)行描述。用戶可以根據(jù)自己的喜好選擇采樣率。下圖顯示了如何根據(jù)采樣定理將模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)。

pYYBAGPzFpqAaqx_AABKTvwuklc481.jpg

圖4:模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào)

采樣率必須根據(jù)人類聽覺范圍——20Hz至20000Hz——進(jìn)行選擇。為了能夠獲得特定信號(hào)(即準(zhǔn)確聲音)的所有必要信息,我們的采樣率必須滿足以下奈奎斯特-香農(nóng)定理才能將其轉(zhuǎn)換為離散時(shí)間信號(hào):

poYBAGPzFpuAaSARAAAyMrfJ00U456.jpg

采樣率必須大于信號(hào)頻譜中最高(最大)頻率的兩倍。在我們的例子中,最大頻率為20000Hz。

本項(xiàng)目我們選擇48000Hz——這是處理音頻信號(hào)時(shí)的一個(gè)標(biāo)準(zhǔn)值。在這種情況下,信號(hào)處理時(shí)連續(xù)時(shí)間信號(hào)中的所有信息都沒有丟失。

說到采樣率,一般有2種情況:

過采樣 – 維基百科

采樣頻率顯著高于奈奎斯特速率。從理論上講,如果以奈奎斯特速率或高于奈奎斯特速率進(jìn)行采樣,就可以完美重建有限帶寬的信號(hào)。奈奎斯特速率的定義為信號(hào)中最高頻率分量的兩倍。

欠采樣 (或走樣)維基百科

這種技術(shù)以低于其奈奎斯特速率(高截止頻率的兩倍)的采樣率采樣帶通濾波信號(hào),但是仍然能夠重建信號(hào)。如果以欠采樣方式采樣一個(gè)帶通信號(hào)時(shí),采樣點(diǎn)與高頻信號(hào)的低頻分量采樣點(diǎn)無法區(qū)分(即信號(hào)變得難以區(qū)分)。

接下來,我們通過正弦波進(jìn)行演示。

poYBAGPzFp2AJ20dAAByeBb_zgc641.jpg

圖5:一個(gè)正弦波(在MATLAB中繪制)

這是一個(gè)頻率為2Hz、時(shí)域?yàn)閇-1,1]的正弦波。該波形包含4個(gè)周期,這意味著每0.5秒(1/2 Hz)發(fā)生一個(gè)周期。我們會(huì)對(duì)這個(gè)信號(hào)實(shí)施多種采樣案例,以了解采樣的工作原理。

采樣點(diǎn)數(shù)表示在一個(gè)周期內(nèi)添加了多少個(gè)點(diǎn),并這些點(diǎn)會(huì)用插值算法連接起來。一個(gè)周期的最小點(diǎn)數(shù)應(yīng)為20,否則線性插值信號(hào)看起來就會(huì)失真。這尤其適用于平滑的模擬信號(hào),采樣后會(huì)丟失圓邊圖案。點(diǎn)的數(shù)量越多,采樣信號(hào)越準(zhǔn)確。

poYBAGPzFp-AXtcFAACx7ELMMp4013.jpg

圖6:正弦波的必要點(diǎn)數(shù)(在MATLAB中繪制)

在本教程中,我們會(huì)在MATLAB中繪制一些正弦波,并觀察采樣頻率不同時(shí)這些正弦波的行為。在語音信號(hào)系列的第二部分中,我們將使用MATLAB進(jìn)行傅立葉分析。使用Arduino時(shí),MATLAB也是一個(gè)非常有用的工具,因?yàn)樗梢岳么?a target="_blank">接口很好地進(jìn)行通信。我們將在本系列的第三部分中詳細(xì)介紹如何用Arduino錄制語音信號(hào)并在MATLAB中進(jìn)行處理。

對(duì)于那些不完全熟悉MATLAB的人,繪制函數(shù)的一般步驟如下所示:

要?jiǎng)?chuàng)建腳本或函數(shù),請轉(zhuǎn)到 [HOME] → [New] ,然后選擇“Script”(腳本)或“Function”(函數(shù))。

pYYBAGPzFqGAdEuTAADIMT8Bq9I509.jpg

要繪制圖7中所示的正弦波,我們需要?jiǎng)?chuàng)建一個(gè)Script。復(fù)制并粘貼以下代碼:

f = 1
points = 5;
t = 0:1/points:1;
wave = sin(2*pi*f*t);

subplot(4,1,1)
plot(t,wave)
title('5 points plot')

points1 = 10;

t = 0:1/points1:1;
wave1 = sin(2*pi*f*t);
subplot(4,1,2)
plot(t,wave1)
title('10 points plot')

points2 = 15;
t = 0:1/points2:1;
wave2 = sin(2*pi*f*t);
subplot(4,1,3)
plot(t,wave2)
title('15 points plot')

points3 = 20;
t = 0:1/points3:1;
wave3 = sin(2*pi*f*t);
subplot(4,1,4)
plot(t,wave3)
title('20 points plot')

要查看結(jié)果,您只需按 Run 按鈕即可。

poYBAGPzFqOANERIAAHRicb8h0U231.jpg

我們還需要?jiǎng)?chuàng)建另一個(gè)圖——就在剛剛創(chuàng)建的圖上繪制,以查看我們對(duì)信號(hào)進(jìn)行采樣時(shí)信號(hào)的形式如何變化。信號(hào)長度我們選取0.5秒,但是頻率增加為60。我們處理的點(diǎn)數(shù)也修改為頻率數(shù)的20倍。假設(shè)在這個(gè)區(qū)間內(nèi)我們以50Hz的頻率進(jìn)行采樣;這意味著每個(gè)點(diǎn)都位于T=1/50(其中T是采樣周期)處。圖7中的小紅點(diǎn)就是信號(hào)上的采樣點(diǎn)。

pYYBAGPzFqWAPlfWAAFF4VewXpE905.jpg

圖7:欠采樣正弦波

在圖7中,由于缺少采樣點(diǎn),我們無法掌握原始信號(hào)的形狀。連接采樣點(diǎn)后,由于信號(hào)的點(diǎn)不足,紅色信號(hào)的形狀異常(圖8)。這些點(diǎn)無法以正弦形式插值,紅色信號(hào)不能重建藍(lán)色信號(hào)。

poYBAGPzFqeATV01AAEp4HuZDYk792.jpg

圖8:正弦波,fs = 50 Hz

poYBAGPzFqiAIXPfAAFC9g0PaAI677.jpg

圖9:正弦波,fs = 240 Hz

poYBAGPzFqqACLF3AABlZAV_1l4797.jpg

圖10: 采樣頻率示例

如圖9和圖10所示,當(dāng)我們以2倍頻率進(jìn)行采樣時(shí),圖中的唯一采樣點(diǎn)就是頂部和底部的最大值。根據(jù)采樣定理,這兩個(gè)點(diǎn)足以重建信號(hào)。

第2步:處理語音信號(hào)

上文介紹了信號(hào)及其屬性?,F(xiàn)在我們需要用一個(gè)實(shí)際例子進(jìn)行測試。Audacity的錄音屬性如下:

采樣率: 48000 Hz

位數(shù): 16

poYBAGPzFqyAELjJAAE78ds8Rlo558.jpg

圖11:Audacity錄制所需的設(shè)置

信號(hào)長度應(yīng)至少為10秒左右(項(xiàng)目會(huì)進(jìn)行許多處理,因此不建議超過20秒)。

pYYBAGPzFq6AEBw3AACadppq8NA218.jpg

圖12:Audacity

與其他錄制平臺(tái)相比,Audacity非常直觀。在下圖中,您可以看到一個(gè)中間有圓圈的紅色按鈕(record 圖標(biāo)) – 這就是開始錄音的按鈕。要停止錄制,只需按下黃色方塊按鈕(stop 按鈕)即可。程序會(huì)記錄錄音的聲波,并將其繪制處理,如下圖所示。

poYBAGPzFrCASItOAADneWOpHjE353.jpg

圖13:錄制的音頻信號(hào)

第1部分簡要介紹了數(shù)字信號(hào)處理理論。我們使用MATLAB探索了不同的信號(hào)波形,并用Audacity錄制了自己的聲音。在下一個(gè)教程中,我們將深入探討“處理”的更多細(xì)節(jié)。我們將涉及各種算法和時(shí)頻域。我們會(huì)繼續(xù)利用MATLAB作為函數(shù)編寫的主要工具,以處理我們錄制的語音并獲得分析結(jié)果。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • matlab
    +關(guān)注

    關(guān)注

    180

    文章

    2956

    瀏覽量

    229873
  • 數(shù)字信號(hào)處理

    關(guān)注

    15

    文章

    549

    瀏覽量

    45744
  • 語音信號(hào)
    +關(guān)注

    關(guān)注

    3

    文章

    69

    瀏覽量

    22808
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    MatLab進(jìn)行數(shù)字信號(hào)處理的詳細(xì)介紹

    MatLab進(jìn)行數(shù)字信號(hào)處理的詳細(xì)介紹附錄B 用MatLab進(jìn)行數(shù)字信號(hào)處理一、
    發(fā)表于 05-12 01:49

    [共享] 數(shù)字信號(hào)處理及其MATLAB實(shí)現(xiàn)

    內(nèi)容簡介 本書就數(shù)字信號(hào)處理的基本理論、算法及MATLAB實(shí)現(xiàn)進(jìn)行系統(tǒng)的論述。全書共7章,前兩章簡要介紹了離散時(shí)間信號(hào)與系統(tǒng)及Z變換,
    發(fā)表于 07-09 09:31

    數(shù)字信號(hào)處理及其MATLAB實(shí)現(xiàn)

    數(shù)字信號(hào)處理及其MATLAB實(shí)現(xiàn)
    發(fā)表于 03-25 15:05 ?20次下載

    數(shù)字信號(hào)處理及其MATLAB實(shí)現(xiàn)

    數(shù)字信號(hào)處理及其MATLAB實(shí)現(xiàn)
    發(fā)表于 03-26 14:13 ?373次下載

    MatLab進(jìn)行數(shù)字信號(hào)處理

    附錄B 用MatLab進(jìn)行數(shù)字信號(hào)處理一、 Matlab簡介在科學(xué)研究和工程應(yīng)用中,往往要進(jìn)行大量的數(shù)學(xué)計(jì)算,這些運(yùn)算一般來說難以用手工精確
    發(fā)表于 05-10 10:03 ?92次下載

    數(shù)字信號(hào)處理教程—MATLAB釋義與實(shí)現(xiàn)》(2版)程序集

    數(shù)字信號(hào)處理教程—MATLAB釋義與實(shí)現(xiàn)》(2版)程序集:dsk04是《數(shù)字信號(hào)處理教程——
    發(fā)表于 10-24 08:42 ?0次下載

    數(shù)字信號(hào)處理教程—MATLAB釋義與實(shí)現(xiàn)》(2版)課件

    數(shù)字信號(hào)處理教程—MATLAB釋義與實(shí)現(xiàn)》(2版)課件:第一章  信號(hào)信號(hào)
    發(fā)表于 10-24 08:44 ?0次下載

    什么是信號(hào)處理?如何進(jìn)行數(shù)字信號(hào)處理呢?

    什么是信號(hào)處理?如何進(jìn)行數(shù)字信號(hào)處理呢? 在我們的周圍存在著為數(shù)眾多的"信號(hào)"。如:從茫茫宇宙中的天體發(fā)出的微弱電波
    發(fā)表于 03-06 10:13 ?3310次閱讀

    數(shù)字信號(hào)處理及其matlab實(shí)現(xiàn)

    數(shù)字信號(hào)處理基礎(chǔ)知識(shí)介紹 及其matlab實(shí)現(xiàn),非常好的資料
    發(fā)表于 12-21 15:02 ?25次下載

    應(yīng)用MATlAB語言處理數(shù)字信號(hào)數(shù)字圖像

    應(yīng)用MATlAB語言處理數(shù)字信號(hào)數(shù)字圖像
    發(fā)表于 12-30 15:19 ?1次下載

    數(shù)字信號(hào)處理及其Matlab實(shí)現(xiàn)

    數(shù)字信號(hào)處理及其Matlab實(shí)現(xiàn),有需要的下來看看。
    發(fā)表于 03-21 10:57 ?0次下載

    數(shù)字信號(hào)處理及其Matlab的實(shí)現(xiàn)

    關(guān)于數(shù)字信號(hào)處理的書籍 里面含有MATLAB的一些代碼實(shí)現(xiàn)。
    發(fā)表于 05-14 09:22 ?8次下載

    如何進(jìn)行電源設(shè)計(jì) - 1部分

    如何進(jìn)行電源設(shè)計(jì) - 1部分
    發(fā)表于 11-02 08:16 ?2次下載
    如何<b class='flag-5'>進(jìn)行</b>電源設(shè)計(jì) - <b class='flag-5'>第</b><b class='flag-5'>1</b><b class='flag-5'>部分</b>

    AN4841_STM32微控制器使用CMSIS進(jìn)行數(shù)字信號(hào)處理

    AN4841_STM32微控制器使用CMSIS進(jìn)行數(shù)字信號(hào)處理
    發(fā)表于 11-21 17:07 ?0次下載
    AN4841_STM32微控制器使用CMSIS<b class='flag-5'>進(jìn)行數(shù)字信號(hào)</b><b class='flag-5'>處理</b>

    使用MATLAB進(jìn)行數(shù)字信號(hào)處理-2部分

    在Arduino DSP系列的第二部分中,我們將繼續(xù)深入研究數(shù)字信號(hào)處理的基礎(chǔ)知識(shí)。我們將學(xué)習(xí)數(shù)字濾波器的特性以及在MATLAB
    的頭像 發(fā)表于 02-24 09:51 ?1739次閱讀
    使用<b class='flag-5'>MATLAB</b><b class='flag-5'>進(jìn)行數(shù)字信號(hào)</b><b class='flag-5'>處理</b>-<b class='flag-5'>第</b>2<b class='flag-5'>部分</b>