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)處理-第2部分

楊軍 ? 來源:珠海易勝 ? 作者:珠海易勝 ? 2023-02-24 09:51 ? 次閱讀

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

點(diǎn)擊此處閱讀本文的第1部分>

pYYBAGPzFlqAJVHsAAFh-D37OIE976.jpg

Arduino DSP系列的第二部分中,我們將繼續(xù)深入研究數(shù)字信號(hào)處理的基礎(chǔ)知識(shí)。我們將學(xué)習(xí)數(shù)字濾波器的特性以及在MATLAB中處理信號(hào)時(shí)如何應(yīng)用這些特性。在下一篇文章中,我們將制作一期有關(guān)傅里葉變換的深入教程,并研究語音信號(hào)最重要的參數(shù):頻率。

軟件

Matlab

第1步:如何將信號(hào)導(dǎo)入 Matlab

用Audacity錄制語音信號(hào)后,現(xiàn)在是時(shí)候在MATLAB中進(jìn)行處理了。此功能可以通過 wavread函數(shù)完成,該函數(shù)負(fù)責(zé)讀取(.wav)聲音文件。Audacity的輸出信號(hào)具有此擴(kuò)展名。此函數(shù)的輸入是信號(hào)名稱(testSound.wav),在MATLAB函數(shù)中,您只需要寫“testSound”即可。該函數(shù)的輸出如下所示:

Y – 信號(hào)名稱

Fs – 信號(hào)的采樣率

Bits – 位數(shù)

我們可以使用以下代碼實(shí)現(xiàn)此函數(shù)。該代碼還能夠播放聲音,讓用戶在信號(hào)處理過程中聽到信號(hào)如何隨時(shí)間變化。

[s0,fs,bits] = wavread('testSound'); 
sound(s0,fs);
pause(9) 
t=(0:length(s0)-1)/fs; 
figure
plot(t,s0),grid  
title('The initial signal.'); 
xlabel ('tTime')
ylabel('s0(n)');

pYYBAGPzFluAa_YrAAEgJ8dcVM8291.jpg

圖1:Matlab中的語音信號(hào)

如果您想獲得人聲信號(hào)的更多信息,您只需輸入音頻文件名稱(后綴名為.wav),然后函數(shù) audioinfo 就會(huì)給您返回聲音參數(shù)。

audioinfo('testSound.wav')

此函數(shù)非常方便,尤其是當(dāng)一個(gè)信號(hào)是未知信號(hào)時(shí)。比如,如果在處理一個(gè)信號(hào)時(shí)無法確定采樣率、持續(xù)時(shí)間和位/樣本等必要信息,那么就可以使用上述函數(shù)查詢該信號(hào)的更多信息。

poYBAGPzFl2APeHSAABsxFiLD2Y929.jpg

圖2:信號(hào)屬性

poYBAGPzFl-ACYCoAADYo3vs0iU794.jpg

圖3:聲波及其平均值

第2步:去除平均值(或DC分量)

直流(DC)分量是添加到純交流(AC)波形(比如語音信號(hào))的恒定電壓。純AC波形的真實(shí)平均電壓為零。語音信號(hào)是模擬信號(hào),但是用Audacity將其轉(zhuǎn)換為數(shù)字信號(hào)時(shí),會(huì)獲得一個(gè)DC分量。發(fā)生這種情況是因?yàn)锳udacity擁有自己的范圍并對(duì)信號(hào)進(jìn)行了重新調(diào)整。通常,模擬信號(hào)范圍為-0.5至0.5V。我們需要0.5V的直流分量,這是因?yàn)槌绦蚴褂靡幌盗姓龜?shù)來縮放樣本值(每個(gè)樣本值被轉(zhuǎn)換為從0到N的數(shù)字;N是自然數(shù))。

poYBAGPzFmCAXNLoAAB2p5kkFOI056.jpg

圖4:交流分量和直流分量說明

但是,如果存在DC分量,那么AC的幅度會(huì)根據(jù)DC分量的值發(fā)生變化。我們來看一下 圖 4。假設(shè)您有一個(gè)幅度為2V峰-峰值的正弦波,同時(shí)疊加了一個(gè)0.5V的直流分量,那么最終信號(hào)的幅度最高為1.5 V,最低為-0.5 V。

我們應(yīng)該查看一下信號(hào)是否具有直流分量,并且要確定直流分量的值。我們可以通過繪制數(shù)值來實(shí)現(xiàn),也可以在命令窗口中輸入M實(shí)現(xiàn)。

M = mean(s0)
figure
subplot(2,1,1), plot(t,M)  
title('Mean value.'); 
s1 = removeDC(s0);
subplot(2,1,2), plot(t,s1)  
title('The Signal without the mean value');

pYYBAGPzFmKAWZIwAAAMYdhcZtk570.jpg

圖5:信號(hào)平均值

去除平均分量很重要,因?yàn)檎Z音信號(hào)本身不含直流分量,而我們希望使用純凈的音頻波形。 removeDC 函數(shù)中的以下代碼能夠計(jì)算信號(hào)的平均值并將其從原始信號(hào)中除去。

function [sOut] = removeDC(sInput)
DC = mean(sInput);
    sOut = sInput - DC;
end

第3步:抽取過程

我們的采樣頻率現(xiàn)在為48000Hz,我們希望將其變成16000Hz。通過抽取,我們可以降低信號(hào)的采樣率。抽取可以通過MATLAB中的 decimate 函數(shù)實(shí)現(xiàn)。當(dāng)我們對(duì)一個(gè)語音信號(hào)進(jìn)行采樣時(shí),根據(jù)奈奎斯特采樣定理,最小頻率應(yīng)為8kHz——這是因?yàn)槿祟惵犛X最大帶寬為4kHz。

這樣做是因?yàn)槲覀兿氡容^原始信號(hào)與抽取信號(hào)之間的差異,并了解這種修改如何改變原始信號(hào)。

pYYBAGPzFmOAaWgtAAFnIfzWmGE470.jpg

圖6:抽取的信號(hào)

進(jìn)行抽?。ɑ蛳虏蓸樱r(shí),我們將采樣率修改成較低的速率(與之前的采樣率相比)。如下圖所示,左側(cè)模擬信號(hào)的采樣率高于右側(cè)的模擬信號(hào)。這意味著我們對(duì)采樣頻率進(jìn)行抽取。

poYBAGPzFmWAeEyRAABXSKUWU5A255.jpg

圖 7: 抽取的信號(hào)

我們還可以進(jìn)行上采樣——下采樣的反過程,并增加采樣頻率。這可以通過插值技術(shù)和低通濾波器來完成。

fe2=fs/3;
%s2 = decimate(s1,3);  

s2 = decimate(s0,3);
t1=linspace(0,length(s2)/fe2, length(s2));
figure 
plot(t1,s2),grid               
title('Decimate the signal');    
ylabel('s(n)');
sound(s2,fe2);
pause(9)

第4步:信號(hào)濾波

簡單來講,數(shù)字濾波器是一種離散時(shí)間、離散幅度的卷積器。數(shù)字濾波器在信號(hào)處理中很重要,因?yàn)榕c模擬濾波器相比,它可以處理多個(gè)操作。(我們可以假設(shè)數(shù)字濾波器的成本更高,因?yàn)槲覀冃枰厥獾臄?shù)字信號(hào)處理器來運(yùn)行濾波算法的功能。)

每個(gè)數(shù)字濾波器都有不同的規(guī)格:通帶、阻帶和紋波。我們首先回顧一下以下術(shù)語。

通帶:一個(gè)濾波器允許通過的頻率帶。

截止頻率:用戶選擇的某個(gè)頻率,表示可以通過濾波器的理論頻率。為了避免走樣,此頻率必須低于 采樣頻率/2 。在電子學(xué)中,截止頻率是指信號(hào)功率變小兩倍的頻率值。

阻帶:所有高于此頻段的頻率都無法通過濾波器。

數(shù)字濾波器可以分為兩類:FIR(有限脈沖響應(yīng)),濾波器系數(shù)為整數(shù)。IIR(無限脈沖響應(yīng)),具有模擬等效模型,并且階數(shù)較低時(shí)更有效。

FIR/IIR濾波器最重要的特性之一是相位特性:

FIR: 線性相位特性

IIR:非線性相位特性(或相位失真)

FIR濾波器屬性 – dspGuru by Iowegian International

“線性相位是指濾波器的相位響應(yīng)是頻率的線性(直線)函數(shù)(不包括+/-180度的相位纏繞)。這使得通過濾波器的所有頻率的延遲都相同。因此,這種濾波器不會(huì)引起“相位失真”或“延遲失真”。在某些系統(tǒng)中,比如在數(shù)字?jǐn)?shù)據(jù)調(diào)制解調(diào)器中,沒有相位/延遲失是FIR濾波器相對(duì)于IIR和模擬濾波器的關(guān)鍵優(yōu)勢?!?/p>

MATLAB中有眾多類型的數(shù)字濾波器可供選擇,但是我們需要了解如何將其應(yīng)用于我們的具體場景。對(duì)于本項(xiàng)目,我們選用IIR濾波器,因?yàn)樗行В磁cFIR濾波器相比,我們需要更小的階數(shù)。

pYYBAGPzFmeAQWSyAADe344KgYQ954.jpg

圖 8: IIR 濾波器

以下代碼可以在MATLAB中創(chuàng)建一個(gè)Butterworth濾波器。添加濾波器階數(shù)和截止頻率后,此函數(shù)會(huì)返回濾波器系數(shù)。

fn = fe2/2; 
fc=3400; % cutoff frequency
[Bd,Ad] = butter(40,3400/fn,'low');

在命令行中輸入 help butter ,就可以通過MATLAB幫助了解為什么采樣率會(huì)除以2?!癧b,a] = butter(n,Wn)會(huì)返回一個(gè)n階低通數(shù)字Butterworth濾波器的傳遞函數(shù)系數(shù)以及歸一化截止頻率Wn”,且“截止頻率Wn必須滿足0.0 < Wn < 1.0,1.0對(duì)應(yīng)于采樣率的一半。”

濾波器系數(shù)存儲(chǔ)在 Bd Ad 變量中。

數(shù)字濾波器術(shù)語 – dspGuru by by Iowegian International

濾波器系數(shù) – 與數(shù)字濾波器結(jié)構(gòu)內(nèi)的延遲信號(hào)采樣值相乘的常數(shù)集。數(shù)字濾波器設(shè)計(jì)就是要確定產(chǎn)生所需濾波器頻率響應(yīng)的濾波器系數(shù)。對(duì)于FIR濾波器,根據(jù)定義,濾波器系數(shù)就是濾波器的脈沖響應(yīng)。

濾波器階數(shù) – 上述每種濾波器都有一個(gè)階數(shù)(N)特征;N階是指實(shí)現(xiàn)濾波器所需無功元件的數(shù)量。對(duì)于IIR濾波器,濾波器階數(shù)等于濾波器結(jié)構(gòu)中的延遲元件數(shù)。通常,濾波器階數(shù)越大,濾波器的頻率幅度響應(yīng)性能越好。

此濾波器的另一個(gè)重要方面是頻率響應(yīng)——濾波器如何影響頻譜分量。濾波器的理想頻率響應(yīng)應(yīng)該是一個(gè)完整的矩形,其幅度為1,截止頻率為0.5。在現(xiàn)實(shí)生活中,您可以根據(jù)自己的應(yīng)用場景選擇濾波器類型。

一個(gè)數(shù)字濾波器的頻率響應(yīng)如下圖所示。在我們的例子中,通帶的幅度平坦,沒有紋波。截止頻率為3400Hz,這意味著我們的信號(hào)通過了一個(gè)低通濾波器,其頻率不會(huì)超過此限值。如圖所示,截止頻率后面沒有阻帶,這就是為什么可能有其他頻率比它高的原因。這可以通過增加濾波器的階數(shù)來改善。

poYBAGPzFmiAca3IAABD6gSbL9o316.jpg

圖 9: 濾波器的頻率響應(yīng)

如圖10所示,橢圓濾波器在截止頻率處的幅頻曲線下降最陡,但振幅不穩(wěn)定。切比雪夫1和2在通帶和阻帶中有幅度波動(dòng)。Butterworth濾波器在這兩個(gè)頻段上都沒有幅度波動(dòng),因此我們在應(yīng)用中采用了這種濾波器;然而,這種濾波器的缺點(diǎn)是其過渡帶較大。

pYYBAGPzFmqAZAfiAACCI3gQrT0209.jpg

圖 10: IIR 濾波器類型

IIR濾波器的階數(shù)小于FIR濾波器的階數(shù)。

pYYBAGPzFmuAbL1zAABjrmTF0oI248.jpg

圖 11: 不同階數(shù)的Butterworth濾波器

在本文應(yīng)用中,我們將濾波器的階數(shù)設(shè)為40,以使頻率響應(yīng)盡可能地接近理想頻率響應(yīng)。如圖11所示,隨著濾波器階數(shù)的增加,性能在頻率響應(yīng)方面也會(huì)提高。

對(duì)信號(hào)進(jìn)行濾波和抽取之后,我們需要觀察原始信號(hào)與變換信號(hào)之間的差異。我們使用繪圖功能并生成一個(gè)音頻信號(hào)。

驗(yàn)證結(jié)果是否有效的最簡單方法就是查看這些信號(hào)。我們來比較一下原始信號(hào)(48kHz采樣率)和最終信號(hào)(16kHz采樣率)。最終信號(hào)沒有太大的噪音,這是一件非常好的事情。

poYBAGPzFm2Ad6mIAAEWW-J_nV8280.jpg

圖 12: 原始信號(hào)與經(jīng)過濾波的信號(hào)之間的差異

在第2部分中,我們的目標(biāo)是學(xué)習(xí)數(shù)字濾波器的特性并用MATLAB進(jìn)行測試。到目前為止,我們已經(jīng)設(shè)法了解了采樣率的含義以及采樣率的變化如何影響音頻信號(hào)。在下一篇文章中,我們將從另一個(gè)角度——利用傅里葉變換(即頻域)——處理音頻信號(hào)。

審核編輯:湯梓紅

聲明:本文內(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

    瀏覽量

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

    關(guān)注

    15

    文章

    549

    瀏覽量

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

    關(guān)注

    3

    文章

    69

    瀏覽量

    22808
  • Arduino
    +關(guān)注

    關(guān)注

    187

    文章

    6455

    瀏覽量

    186361
收藏 人收藏

    評(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

    基于FPGA的數(shù)字信號(hào)處理(2版)

    `積分商城兌換的禮品《基于FPGA的數(shù)字信號(hào)處理(2版)》曬曬,:-)`
    發(fā)表于 03-28 23:53

    數(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)
    發(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次下載

    MATLAB信號(hào)處理詳解_部分2

    MATLAB信號(hào)處理詳解第二部分 有需要的下來看看
    發(fā)表于 12-24 14:04 ?6次下載

    應(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次下載

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

    在本教程中,我們將分析語音信號(hào)。我們?nèi)祟惏l(fā)出的聲波是連續(xù)的模擬信號(hào),然而對(duì)于信號(hào)處理,我們需要一個(gè)非連續(xù)時(shí)間模型——計(jì)算機(jī)的數(shù)字模型。
    的頭像 發(fā)表于 02-24 09:51 ?1501次閱讀
    使用<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>1<b class='flag-5'>部分</b>