• <noscript id="ecgc0"><kbd id="ecgc0"></kbd></noscript>
    <menu id="ecgc0"></menu>
  • <tt id="ecgc0"></tt>

    基于MATLAB的音樂合成和處理

    年夜學結業課程設計

    東西/原料

    • MATLAB
    • MATLAB2016A

    方式/步調

    1. 1

      基于MATLAB的音樂旌旗燈號合當作與處置

       

      摘   要

          

      本設計共有三部門:1.簡單的音樂合當作;2.用傅里葉變換闡發音樂;3.基于傅里葉級數的音樂合當作。本設計采用MATLAB軟件仿真來實現。起首,經由過程對音樂旌旗燈號的采樣、抽取、調制、解調等多種處置過程的理論闡發和MATLAB求得這段音樂的基頻、諧波分量、等數據;然后,經由過程對樂理的研究,按照闡發中求得的數據編寫法式,進行基于傅里葉闡發的音樂合當作設計,并設計了圖形用戶界面;最后加強軟件編程實現能力息爭決現實問題的能力。

       

      1簡單的合當作音樂

      1.1  樂理常識介紹

        

          樂音的根基特征可以用基波頻率、諧波頻譜和包絡波形3個方面來描述。

      基波頻率:每個指心猿意馬調子的唱名都對應固心猿意馬的基波旌旗燈號頻率。所謂唱名是指常日讀曲譜唱出的1(do)、2(re)、3(mi)… … ,每個唱名并未固心猿意馬基波頻率。當指心猿意馬樂曲的調子時才知道此時唱名對應的頻率值。如C調“ 1”的基波頻率為261.63HZ,F調“1”的基波頻率為349.23HZ,F調“ 5”的基波頻率為523.25HZ。

      諧波頻譜:在這七個音符中有一個紀律,就是3(mi)到4(fa),7(si)到高音1(do)是半音。在吉他上是相鄰的兩個品為半音,好比一弦1品是3(mi),那么一弦2品就是4(fa);在吉他上隔一品是全音,好比一弦1品是1(do),那么一弦3品就是2(re),中心隔了1品。包絡波形:分歧類型的樂器,包絡外形也不不異。在音樂合當作嘗試中,為簡化編程描述,凡是把復雜的包絡函數用少量直線近似。于是,樂音波形的包絡呈拆線。有時為了包管在樂音的鄰接處旌旗燈號幅度為零,也可以用指數衰減的包絡來暗示,這也是最簡單的法子。

       

       

      1.2  操縱MATLAB實現音樂合當作

       

      本設計采用揚基杜德爾小曲作

      按照《揚基杜德爾》第一末節的簡譜和十二平均律計較出該末節每個樂音的頻率,在MATLAB中生當作幅度為1,抽樣頻率為8kHz的正弦旌旗燈號暗示這些樂音,用sound播放合當作的音樂。而在MATLAB中暗示樂音所用的抽樣頻率為fs=8000Hz,也就是所1s鐘內有8000個點,抽樣點數的幾多就可暗示出每個樂音的持續時候的長短。用一個行標的目的量來存儲這段音樂對應的抽樣點,在用sound函數播放即可。

       

       

      下為在MATLAB中編寫法式

      clc

      clear

      fs=44100;

      t=0:1/fs:0.5;

      c3_2=key(48, 2, fs);

      d3_2=key(50, 2, fs);

      e3_2=key(52, 2, fs);

      f3_2=key(53, 2, fs);

      g3_2=key(55, 2, fs);

      a3_2=key(57, 2, fs);

      b3_2=key(59, 2, fs);

       

      c3_4=key(48, 4, fs);

      d3_4=key(50,4, fs);

      e3_4=key(52, 4, fs);

      f3_4=key(53, 4, fs);

      g3_4=key(55, 4, fs);

      a3_4=key(57, 4, fs);

      b3_4=key(59, 4, fs);

       

      c3_8=key(48, 8, fs);

      d3_8=key(50,8, fs);

      e3_8=key(52, 8, fs);

      f3_8=key(53, 8, fs);

      g3_8=key(55, 8, fs);

      a3_8=key(57, 8, fs);

      b3_8=key(59, 8, fs);

       

      c3_16=key(48, 16, fs);

      d3_16=key(50,16, fs);

      e3_16=key(52, 16, fs);

      f3_16=key(53, 16, fs);

      g3_16=key(55,16, fs);

      a3_16=key(57, 16, fs);

      b3_16=key(59, 16, fs);

       

      c4_2=key(60, 2, fs);

      d4_2=key(62, 2, fs);

      e4_2=key(64, 2, fs);

      f4_2=key(65, 2, fs);

      g4_2=key(67, 2, fs);

      a4_2=key(69, 2, fs);

      b4_2=key(71, 2, fs);

       

      c4_4=key(60, 4, fs);

      d4_4=key(62, 4, fs);

      e4_4=key(64, 4, fs);

      f4_4=key(65, 4, fs);

      g4_4=key(67, 4, fs);

      a4_4=key(69, 4, fs);

      b4_4=key(71, 4, fs);

       

      c4_8=key(60, 8, fs);

      d4_8=key(62, 8, fs);

      e4_8=key(64, 8, fs);

      f4_8=key(65, 8, fs);

      g4_8=key(67, 8, fs);

      a4_8=key(69, 8, fs);

      b4_8=key(71, 8, fs);

       

      c4_16=key(60, 16, fs);

      d4_16=key(62,16, fs);

      e4_16=key(64, 16, fs);

      f4_16=key(65, 16, fs);

      g4_16=key(67, 16, fs);

      a4_16=key(69, 16, fs);

      b4_16=key(71, 16, fs);

      part1=[g3_4 c4_8 c4_8 d4_8 e4_8 c4_8 e4_8 d4_8 b3_8];

      part2=[c4_8 c4_8 d4_8 e4_8 c4_4 b3_8 g3_8 ];

      part3=[c4_8 c4_8 d4_8 e4_8 f4_8 e4_8 d4_8 c4_8 b3_8 g3_8 a3_8 b3_8 c4_4 c4_4];

       

      part4=[a3_8 b3_16 a3_8 g3_8 a3_8  b3_8 c4_4];

      part5=[g3_8 a3_16 g3_8 f3_8 e3_8 f3_8 g3_4];

      part6=[a3_8 b3_16 a3_8 g3_8 a3_8  b3_8 c4_4];

      part7=[g3_8 c4_8 b3_8 d4_8 c4_4 c4_4];

       

      para1=[part1 part2 part3 ];

      para2=[part4 part5 ];

      para3=[part6 part7 ];

       

      legend=[para1 para2 para3];

      sound(legend,fs)

      將該法式在MATLAB中運行,我們可以聽出音色一般,需要改良。

       

      1.2  除噪音,加包絡

      下面經由過程加包絡來消噪音。最簡單的包絡為指數衰減。最簡單的指數衰減是對每個音乘以因子,在嘗試中起首加的是的衰減,這種衰減方式利用的是不異速度的衰減,可是發現噪音并沒有完全消弭,播放的音樂結果不是很好,感受音樂升沉性不強。于是采用分歧速度的衰減,按照樂音持續時候的長短來確定衰減的快慢,樂音持續時候越長,衰減的越慢,持續時候越短,衰減的越快。更科學的包絡如下圖所示,每個樂音都顛末沖激、衰減、持續、消逝四個階段。

       

       

      由上圖可以看出這個包絡是四段直線段組成的,是以只要確定了每段線段的端點,即可用端點數據寫出直線方程,因為直線方程可以用通式寫出(我用的是斜截式),是以這段包絡可以用簡單的輪回來完當作。例如認為包絡線上的數據如下圖所示:

       

       

       

      據此在MATLAB中編寫如下法式:

      clear;clc;

      fs=8000;  %抽樣頻率

      part1=[fre(55) fre(60) fre(60) fre(62) fre(64) fre(60) fre(64) fre(62) fre(59)];

      part2=[fre(60) fre(60) fre(62) fre(64) fre(60) fre(59) fre(55)];

      part3=[fre(60) fre(60) fre(62) fre(64) fre(65) fre(64) fre(62) fre(60) fre(59) fre(55)  fre(57) fre(59) fre(60) fre(60)];

       

      part4=[fre(57) fre(59) fre(57) fre(55) fre(57) fre(59) fre(60)];

      part5=[fre(55) fre(57) fre(55) fre(53) fre(52) fre(53) fre(55)];

      part6=[fre(57) fre(59) fre(57) fre(55) fre(57) fre(59) fre(60)];

      part7=[fre(55) fre(60) fre(59) fre(62) fre(60) fre(60)];

       

      para1=[part1 part2 part3 ];

      para2=[part4 part5 ];

      para3=[part6 part7 ];

       

      f=[para1 para2 para3]; %各個樂音對應的頻率

       

      part1time=[0.5 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25];

      part2time=[0.25 0.25 0.25 0.25 0.5 0.25 0.25];

      part3time=[0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.5 0.5];

       

      part4time=[0.25 0.125 0.25 0.25 0.25 0.25 0.5];

      part5time=[0.25 0.125 0.25 0.25 0.25 0.25 0.5];

      part6time=[0.25 0.125 0.25 0.25 0.25 0.25 0.5];

      part7time=[0.25 0.25 0.25 0.25 0.5 0.5];

       

      para1time=[part1time part2time part3time ];

      para2time=[part4time part5time ];

      para3time=[part6time part7time ];

       

      time=fs*[para1time para2time para3time];%各個樂音的抽樣點數

      N=length(time); %這段音樂的總抽樣點數

       

      east=zeros(1,N); %用east標的目的量來儲存抽樣點

      n=1;

      for num=1:N  %操縱輪回發生抽樣數據,num暗示樂音編號

          t=1/fs:1/fs:time(num)/fs;  %發生第num個樂音的抽樣點

          baoluo=zeros(1,time(num));  %P為存儲包絡數據的標的目的量

      for j=1:time(num)

      if(j<0.2*time(num))

         y=7.5*j/time(num);

      else

             if(j<0.333*time(num))

                   y=-15/4*j/time(num)+9/4;

             else

      if(j<0.666*time(num))

            y=1;

      else

             y=-3*j/time(num)+3;

      end

              end

      end

      baoluo(j)=y;

      end

       

      east(n:n+time(num)-1)=sin(2*pi*f(num)*t).*baoluo(1:time(num));

      %給第num個樂音加上包絡

       

          n=n+time(num);

      end

      sound(east,8000)       %播放音樂

      plot(east)

      此處操縱函數fre

      function f = fre(p)

      f=440*2^((p-69)/12);

      運行獲得的圖像為:

       

       

       

      下圖是兩個樂音交代處的局部放年夜圖,可以看到知道前一個樂音衰減到零時,后一個樂音才起頭從零增添,所以可以說消弭了噪音。

       

      1.3  改編法式,實現1.2中樂曲的升八度

      升高一個八度就是將每個樂音的頻率都提高一倍,變為本來的2倍;降低一個八度即每個樂音的頻率都減小一倍,變為本來的1/2。是以將存儲樂音頻率的標的目的量每個元素改變為2或1/2倍即可。

       查表獲得下列MATLAB法式

      clc

      clear

      fs=44100;

      t=0:1/fs:0.5;

      c4_2=key(60, 2, fs);

      d4_2=key(62, 2, fs);

      e4_2=key(64, 2, fs);

      f4_2=key(65, 2, fs);

      g4_2=key(67, 2, fs);

      a4_2=key(69, 2, fs);

      b4_2=key(71, 2, fs);

       

      c4_4=key(60, 4, fs);

      d4_4=key(62, 4, fs);

      e4_4=key(64, 4, fs);

      f4_4=key(65, 4, fs);

      g4_4=key(67, 4, fs);

      a4_4=key(69, 4, fs);

      b4_4=key(71, 4, fs);

       

      c4_8=key(60, 8, fs);

      d4_8=key(62, 8, fs);

      e4_8=key(64, 8, fs);

      f4_8=key(65, 8, fs);

      g4_8=key(67, 8, fs);

      a4_8=key(69, 8, fs);

      b4_8=key(71, 8, fs);

       

      c4_16=key(60, 16, fs);

      d4_16=key(62,16, fs);

      e4_16=key(64, 16, fs);

      f4_16=key(65, 16, fs);

      g4_16=key(67, 16, fs);

      a4_16=key(69, 16, fs);

      b4_16=key(71, 16, fs);

       

      c5_2=key(72, 2, fs);

      d5_2=key(74, 2, fs);

      e5_2=key(76, 2, fs);

      f5_2=key(77, 2, fs);

      g5_2=key(79, 2, fs);

      a5_2=key(81, 2, fs);

      b5_2=key(83, 2, fs);

       

      c5_4=key(72, 4, fs);

      d5_4=key(74, 4, fs);

      e5_4=key(76, 4, fs);

      f5_4=key(77, 4, fs);

      g5_4=key(79, 4, fs);

      a5_4=key(81, 4, fs);

      b5_4=key(83, 4, fs);

       

      c5_8=key(72, 8, fs);

      d5_8=key(74, 8, fs);

      e5_8=key(76, 8, fs);

      f5_8=key(77, 8, fs);

      g5_8=key(79, 8, fs);

      a5_8=key(81, 8, fs);

      b5_8=key(83, 8, fs);

       

      c5_16=key(72, 16, fs);

      d5_16=key(74,16, fs);

      e5_16=key(76, 16, fs);

      f5_16=key(77, 16, fs);

      g5_16=key(79, 16, fs);

      a5_16=key(81, 16, fs);

      b5_16=key(83, 16, fs);

       

       

      part1=[g4_4 c5_8 c5_8 d5_8 e5_8 c5_8 e5_8 d5_8 b4_8];

      part2=[c5_8 c5_8 d5_8 e5_8 c5_4 b4_8 g4_8 ];

      part3=[c5_8 c5_8 d5_8 e5_8 f5_8 e5_8 d5_8 c5_8 b4_8 g4_8 a4_8 b4_8 c5_4 c5_4];

       

      part4=[a4_8 b4_16 a4_8 g4_8 a4_8  b4_8 c5_4];

      part5=[g4_8 a4_16 g4_8 f4_8 e4_8 f4_8 g4_4];

      part6=[a4_8 b4_16 a4_8 g4_8 a4_8  b4_8 c5_4];

      part7=[g4_8 c5_8 b4_8 d5_8 c5_4 c5_4];

       

      para1=[part1 part2 part3 ];

      para2=[part4 part5 ];

      para3=[part6 part7 ];

       

      legend=[para1 para2 para3];

      sound(legend,fs)

      1.4   在1.2的音樂中插手諧波

       

      我們在1.2的音樂平分別加上二、三、四次諧波,其基波幅度為1,高次諧波幅度別離為0.2、0.3、0.1。應該將法式改為:

      clear;clc;

      fs=8000;  %抽樣頻率

      part1=[fre(55) fre(60) fre(60) fre(62) fre(64) fre(60) fre(64) fre(62) fre(59)];

      part2=[fre(60) fre(60) fre(62) fre(64) fre(60) fre(59) fre(55)];

      part3=[fre(60) fre(60) fre(62) fre(64) fre(65) fre(64) fre(62) fre(60) fre(59) fre(55)  fre(57) fre(59) fre(60) fre(60)];

       

      part4=[fre(57) fre(59) fre(57) fre(55) fre(57) fre(59) fre(60)];

      part5=[fre(55) fre(57) fre(55) fre(53) fre(52) fre(53) fre(55)];

      part6=[fre(57) fre(59) fre(57) fre(55) fre(57) fre(59) fre(60)];

      part7=[fre(55) fre(60) fre(59) fre(62) fre(60) fre(60)];

       

      para1=[part1 part2 part3 ];

      para2=[part4 part5 ];

      para3=[part6 part7 ];

       

      f=[para1 para2 para3]; %各個樂音對應的頻率

       

      part1time=[0.5 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25];

      part2time=[0.25 0.25 0.25 0.25 0.5 0.25 0.25];

      part3time=[0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.5 0.5];

       

      part4time=[0.25 0.125 0.25 0.25 0.25 0.25 0.5];

      part5time=[0.25 0.125 0.25 0.25 0.25 0.25 0.5];

      part6time=[0.25 0.125 0.25 0.25 0.25 0.25 0.5];

      part7time=[0.25 0.25 0.25 0.25 0.5 0.5];

       

      para1time=[part1time part2time part3time ];

      para2time=[part4time part5time ];

      para3time=[part6time part7time ];

       

      time=fs*[para1time para2time para3time];%各個樂音的抽樣點數

      N=length(time); %這段音樂的總抽樣點數

       

      east=zeros(1,N); %用east標的目的量來儲存抽樣點

      n=1;

      for num=1:N  %操縱輪回發生抽樣數據,num暗示樂音編號

          t=1/fs:1/fs:time(num)/fs;  %發生第num個樂音的抽樣點

          baoluo=zeros(1,time(num));  %P為存儲包絡數據的標的目的量

      for j=1:time(num)

      if(j<0.2*time(num))

         y=7.5*j/time(num);

      else

             if(j<0.333*time(num))

                   y=-15/4*j/time(num)+9/4;

             else

      if(j<0.666*time(num))

            y=1;

      else

             y=-3*j/time(num)+3;

      end

              end

      end

      baoluo(j)=y;

      end

               h=[1 0.2 0.3 0.1];

               xiebo=zeros(1,length(t));

      for i=1:length(n)

            xiebo=xiebo+h(i)*sin(2*i*pi*f(num)*t);

      end

      east(n:n+time(num)-1)=xiebo.*baoluo(1:time(num));

      n=n+time(num);

      end

      sound(east,8000)  %播放音樂

      plot(east) %圖像

       

      插手諧波后音色獲得較著好轉

      運行獲得的圖像為:

       

    2. 2

      2.用傅里葉變換闡發音樂

      2.1  闡發can.wav的調子和節奏

      我們對can進行傅里葉變換闡發其基波協調波,獲得can的幅值譜,頻譜圖上的第一個凸起的波峰對應的頻率即為can的基頻,可編寫了如下法式:

      clear;clc;

      [y,Fs]= audioread('can.wav');

      fs=8000;

      NFFT = 2^nextpow2(length(y));

      Y = fft(y,NFFT)/length(y);

      g = fs/2*linspace(0,1,NFFT/2+1);

      plot(g,2*abs(Y(1:NFFT/2+1)))

      運行后獲得的成果為

       

      經由過程增添can的周期性顯示出離散化水平高的幅值譜,即讓can在時域反復多次后在進行傅里葉變換。

      操縱repmat函數將can在時域內反復。法式可點竄為:

      clear;clc;

      WAV= audioread('can.wav');

      fs=8000;

      wave2proc =repmat(WAV,20,1);  %將 can反復20次

      NFFT = 2^nextpow2(length(WAV));

      Y = fft(WAV,NFFT)/length(WAV);

      g = fs/2*linspace(0,1,NFFT/2+1);

      plot(g,2*abs(Y(1:NFFT/2+1)))

      由圖讀出can的基頻為329.1Hz,幅值為2.451,高次諧波幅值別離為:

       

       

      2.2  按照快速傅里葉變換合當作音樂

      將法式中的波形幅度矩陣

      m=[1 0.3 0.2 0.1]

      改為

      m=[2.0912 4.0597 4.7156 7.5215 5.6484 4.9845 3.4894 2.4568];

      即可

       

      法式如下

      clear;clc;

      fs=8000;  %抽樣頻率

      part1=[fre(67) fre(72) fre(72) fre(74) fre(76) fre(72) fre(76) fre(74) fre(71)];

      part2=[fre(72) fre(72) fre(74) fre(76) fre(72) fre(71) fre(67)];

      part3=[fre(72) fre(72) fre(74) fre(76) fre(77) fre(76) fre(74) fre(72) fre(71) fre(67)  fre(69) fre(71) fre(72) fre(72)];

       

      part4=[fre(69) fre(71) fre(69) fre(67) fre(69) fre(71) fre(72)];

      part5=[fre(67) fre(69) fre(67) fre(65) fre(64) fre(65) fre(67)];

      part6=[fre(69) fre(71) fre(69) fre(67) fre(69) fre(71) fre(72)];

      part7=[fre(67) fre(72) fre(71) fre(74) fre(72) fre(72)];

       

      para1=[part1 part2 part3 ];

      para2=[part4 part5 ];

      para3=[part6 part7 ];

       

      f=[para1 para2 para3]; %各個樂音對應的頻率

       

      part1time=[0.5 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25];

      part2time=[0.25 0.25 0.25 0.25 0.5 0.25 0.25];

      part3time=[0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.5 0.5];

       

      part4time=[0.25 0.125 0.25 0.25 0.25 0.25 0.5];

      part5time=[0.25 0.125 0.25 0.25 0.25 0.25 0.5];

      part6time=[0.25 0.125 0.25 0.25 0.25 0.25 0.5];

      part7time=[0.25 0.25 0.25 0.25 0.5 0.5];

       

      para1time=[part1time part2time part3time ];

      para2time=[part4time part5time ];

      para3time=[part6time part7time ];

      time=fs*[para1time para2time para3time];%各個樂音的抽樣點數

      N=length(time); %這段音樂的總抽樣點數

       

      east=zeros(1,N); %用east標的目的量來儲存抽樣點

      n=1;

      for num=1:N  %操縱輪回發生抽樣數據,num暗示樂音編號

          t=1/fs:1/fs:time(num)/fs;  %發生第num個樂音的抽樣點

          baoluo=zeros(1,time(num));  %P為存儲包絡數據的標的目的量

      for j=1:time(num)

      if(j<0.2*time(num))

         y=7.5*j/time(num);

      else

             if(j<0.333*time(num))

                   y=-15/4*j/time(num)+9/4;

             else

      if(j<0.666*time(num))

            y=1;

      else

             y=-3*j/time(num)+3;

      end

              end

      end

      baoluo(j)=y;

      end

               h=[2.0912 4.0597 4.7156 7.5215 5.6484 4.9845 3.4894 2.4568];

               xiebo=zeros(1,length(t));

      for i=1:length(n)

            xiebo=xiebo+h(i)*sin(2*i*pi*f(num)*t);

      end

      east(n:n+time(num)-1)=xiebo.*baoluo(1:time(num));

      n=n+time(num);

      end

      sound(east,8000)  %播放音樂

      plot(east) %圖像

    3. 3

      第三部門  音樂旌旗燈號的處置

      3.1 插手延時和混響

      選擇一段語音旌旗燈號作為闡發對象,并對其進行頻譜闡發,在時域頂用數字旌旗燈號處置方式給旌旗燈號插手3種混響,再闡發其頻譜,并與原始旌旗燈號進行比力。

      設計思緒

      1、操縱Windows下的灌音機或其他軟件,錄制一段語音旌旗燈號,時候節制在3s擺布,并對錄制的旌旗燈號進行采樣

      2、語音旌旗燈號的頻譜闡發,畫出采樣后的時域波形和頻譜圖

      3、將旌旗燈號插手延時和混響,再闡發當時域波形和頻譜圖,并與原始旌旗燈號頻譜進行比力

      所以按照設計思緒進行嘗試

      1、讀取3s的語音旌旗燈號并畫出時域波形和頻譜圖

       

      x1=audioread('good.wav');

      [x,fs]=audioread('good.wav');

      x=x(:,1);   %取單聲道

      sound(x,fs);

      X=fft(x,640000); %gaidong

      magX=abs(X);

      angX=angle(X);

      figure(1);

      subplot(2,1,1);plot(x);title('yuanshi boxing');

      subplot(2,1,2);plot(X);title('yuanshi pinpu');

      獲得的波形和頻譜圖為

       

      2、對語音旌旗燈號進行采樣并畫出采樣后旌旗燈號的時域波和頻譜圖

      [x,fs]=audioread('good.wav');

      x=x(:,1);

      sound(5*x,fs);

      n1=0:2000;

      N=size(x,1);

      Y=fft(x,320000);

      figure(2);

      subplot(2,1,1);plot(x);title('caiyang boxing');

      subplot(2,1,2);plot(n1(1:1000),Y(1:1000));title('caiyang pinpu');

      獲得的采樣波形和頻譜為

       

      3、對采樣后的旌旗燈號延時,并畫出延時后的時域波形和頻譜圖

      z1=[zeros(10000,1);x];           %對旌旗燈號進行延時

      z2=[zeros(20000,1);x];

      z3=[zeros(30000,1);x];

      Z1=fft(z1,160000);

      Z2=fft(z2,160000);

      Z3=fft(z3,160000);

      figure(3);                                       

      subplot(3,1,1);plot(z1); title('延時后的時域圖1');        %畫出延時后的旌旗燈號時域圖

      subplot(3,1,2);plot(z2); title('延時后的時域圖2');

      subplot(3,1,3);plot(z3); title('延時后的時域圖3');

      figure(4)

      subplot(3,1,1);plot(n1(1:1000),Z1(1:1000));title('延時后的頻譜圖1');     %延時后的旌旗燈號頻譜圖

      subplot(3,1,2);plot(n1(1:1000),Z2(1:1000));title('延時后的頻譜圖2');  

      subplot(3,1,3);plot(n1(1:1000),Z3(1:1000));title('延時后的頻譜圖3');

      獲得延時的時域圖和頻譜圖為

       

       

      4、對旌旗燈號進行混響,并畫出混響后的時域波形和頻譜圖

      z1=[zeros(10000,1);x];           %對旌旗燈號進行延時

      z2=[zeros(20000,1);x];

      z3=[zeros(30000,1);x];

      x1=[x;zeros(10000,1)];                 %使語音旌旗燈號與延時后旌旗燈號劃一長度

      x2=[x;zeros(20000,1)];

      x3=[x;zeros(30000,1)];

      y1=plus(x1,z1);                             %旌旗燈號的混響

      y2=plus(x2,z2);

      y3=plus(x3,z3);

      sound(y1,fs);

      sound(y2,fs);

      sound(y3,fs);

      figure(5);

      subplot(3,1,1);plot(y1); title('混響的時域圖1');     %混響時域圖

      subplot(3,1,2);plot(y2); title('混響的時域圖2');

      subplot(3,1,3);plot(y3); title('混響的時域圖3');

      Y1=fft(y1,160000);                                %對混響旌旗燈號FFT變換

      Y2=fft(y2,160000);

      Y3=fft(y3,160000);

      figure(6);

      subplot(3,1,1);plot(n1(1:1000),Y1(1:1000)); title('混響的頻譜圖1');    %混響頻譜圖

      subplot(3,1,2);plot(n1(1:1000),Y2(1:1000)); title('混響的頻譜圖2');

      subplot(3,1,3);plot(n1(1:1000),Y3(1:1000)); title('混響的頻譜圖3');

      獲得的混響后的時域波形和頻譜圖為

       

       

       

      3.2 平衡處置

      設計思緒:設計三個混響器作為平衡處置的東西

      (1)無限反響混響器

      a=0.05;                               %a取小于等于1

      Bz=[0,0,0,0,0,0,0,0,0,0,1];            %分子的系數

      Az=[1,0,0,0,0,0,0,0,0,0,-a];           %分母的系數

      yy1=filter(Bz,Az,z1);                  %濾波器進行濾波

      YY1=fft(yy1,320000);    %經無限反響濾波器后的旌旗燈號做32000點的FFT變換

      (2)多重反響混響器

      a=0.05;                            %a取小于等于1

      N=5

      Bz1=[1,0,0,0,0,0,0,0,0,0,-0.5^N]      %分子的系數

      Az1=[1,0,0,0,0,0,0,0,0,0,-0.5];        %分母的系數

      yy2=filter(Bz1,Az1,z1);                 %濾波器進行濾波

      YY2=fft(yy2,320000);    %經多重反響濾波器后的旌旗燈號做32000點的FFT變換

      (3)全通布局的混響器

      a=0.05;                               %a取小于等于1

      Bz1=[a,0,0,0,0,0,0,0,0,0,1];          %分子的系數

      Az1=[1,0,0,0,0,0,0,0,0,0,a];          %分母的系數

      yy3=filter(Bz1,Az1,z1);               %濾波器進行濾波

      YY3=fft(yy3,320000);    %經全通布局的混響器后的旌旗燈號做32000點的FFT變

       

      最后輸作聲音

      sound(yy1,fs);

      sound(yy2,fs);

      sound(yy3,fs);

      (4)畫出經混響器處置后旌旗燈號的時域波形和頻譜圖

      figure(8);

      subplot(2,1,1);

      plot(yy1);

      title('無限個反響濾波器時域圖');       %無限反響濾波器時域波形

      subplot(2,1,2);

      plot(n1(1:1000),YY1(1:1000));

      title('無限個反響濾波器頻譜圖 ');    %無限反響濾波器頻譜圖

      figure(9)

      subplot(2,1,1);

      plot(yy2);

      title('多重反響濾波器的時域圖')       %多重反響濾波器的混響器時域波形

      subplot(2,1,2);

      plot(n1(1:1000),YY2(1:1000));

      title('多重反響濾波器的頻譜圖')    %多重反響濾波器的頻譜圖

      figure(10)

      subplot(2,1,1);

      plot(yy3);

      title('全通布局濾波器的時域圖')     %全通布局的混響器時域波形

      subplot(2,1,2);

      plot(n1(1:1000),YY3(1:1000));

      title('全通布局濾波器的頻譜圖')     %全通布局的混響器頻譜圖

       

      獲得的波形為

       

       

       

       

       

    注重事項

    • 本人利用的MATLAB2016A,其他的版本請自行測驗考試
    • 發表于 2019-01-20 00:00
    • 閱讀 ( 758 )
    • 分類:其他類型

    你可能感興趣的文章

    相關問題

    0 條評論

    請先 登錄 后評論
    admin
    admin

    0 篇文章

    作家榜 ?

    1. xiaonan123 189 文章
    2. 湯依妹兒 97 文章
    3. luogf229 46 文章
    4. jy02406749 45 文章
    5. 小凡 34 文章
    6. Daisy萌 32 文章
    7. 我的QQ3117863681 24 文章
    8. 華志健 23 文章

    聯系我們:uytrv@hotmail.com 問答工具
  • <noscript id="ecgc0"><kbd id="ecgc0"></kbd></noscript>
    <menu id="ecgc0"></menu>
  • <tt id="ecgc0"></tt>
    久久久久精品国产麻豆