MATLAB訊號卷積

2023-02-09 05:18:04 字數 4743 閱讀 5395

利用matlab實現訊號的時域卷積

一.引言

具有強大的圖形處理功能及符號運算功能,為實現訊號的視覺化以及時域分析提供了強有力的工具,所以我們要利用程式設計輔助分析與計算。現在我們利用程式設計輔助計算連續時間訊號、離散時間訊號的卷積。

我們利用編制乙個m函式,該函式可以計算離散序列和的卷積,此程式要計算,返回的非零點對應向量,還將繪製出序列, 和的時域波形圖;我們要驗證並呼叫這個函式計算「」這兩個序列的卷積和運算,並繪製影象。

現在我們再利用matlab編制乙個計算連續時間訊號卷積積分的m函式,此函式要計算出兩個連續訊號和的卷積積分的近似值,並繪製、和的時域波形圖。編完之後,我們利用函式求「」這兩個連續時間訊號的卷積積分運算,並繪製圖形。

二.基本原理

對於訊號的時域卷積有:

(1)離散時間訊號的卷積和:它的定義為,離散時間訊號和的卷積和為:

設序列在區間非零,序列在非零,那麼就有的非零區間就為並且區間長度為,則只需計算序列的非零區間就可以表示整個序列.

那麼由上可知,在利用的函式的時候就要注意其卷積後的區間長度已經發生變化,在繪製卷積後的影象的時候就要有意識的先減去擴大的區間長度,不然繪製的卷積後的時域影象就是錯誤的,和橫座標不是正確的對應關係,並且我們在使用函式的時候要先構造和,讓它們有限,才能返回序列的非零樣值時間序列。

對於連續的時間訊號和的卷積積分其定義為:

那麼可以用分段求和來實現,即:

令則有當足夠小的時候,的結果就是連續時間訊號的較好的近似值。所以當用matlab實現和的卷積積分的時候要先對和以的間隔進行取樣,得到它們的離散序列和,構造它們相應的時間向量;呼叫系統的函式計算卷積,計算的近似值;最後構造的時間向量,並用命令將波形圖畫出來。

三.實現方法

(1)先編制乙個m函式dconv(),能是實現兩個序列的卷積和,並繪製這兩個序列的時域波形圖和卷積之後的波形圖。程式設計思路如框圖1:

框圖1程式如下所示:

function xn=dconv(x1,x2) %任意兩序列卷積

x11=-5:length(x1)-6; %設定x1(n)的時間向量

x22=-5:length(x2)-6; %設定x2(n)的時間向量

subplot(131),stem(x11,x1,』fill』),grid on; %畫x1(n)的影象

title('x1(n)=u(n)-u(n-4)');

xlabel('n');

ylabel('x(n)');

set(gca,'xtick',-20:20);

axis([(min(x11)-1),(max(x11)+1),(min(x1)-1),(max(x1)+1)])

subplot(132),stem(x22,x2,』fill』),grid on; %畫x2(n)的影象

title('x2(n)=u(n)-u(n-4)');

xlabel('n');ylabel('x(n)');

set(gca,'xtick',-20:20);

axis([(min(x22)-1),(max(x22)+1),(min(x2)-1),(max(x2)+1)])

xmin1=min(x11);

xmax1=max(x11);

xmin2=min(x22);

xmax2=max(x22);

t=(xmax2+xmax1)-(xmin2+xmin1)+1;

xx=-10:(t-6-5); %設定x(n)的時間向量

xn=conv(x1,x2) %求x(n)=x1(n)*x2(n)

subplot(133),stem(xx,xn,』fill』),grid on; %畫x(n)的影象

title('x(n)=x1(n)*x2(n)')

xlabel('n');

ylabel('x(n)');

set(gca,'xtick',-100:100);

axis([(min(xx)+5),(max(xx)-7),(min(xn)-0.5),(max(xn)+0.5)])

end(2)再編制乙個m函式ddconv(n),求兩個連續時間訊號的卷積,能是實現兩個連續訊號的卷積和,並繪製這兩個訊號的時域波形圖和卷積之後的波形圖。程式設計思路如框圖2:

框圖2程式在編的時候要注意外部獲取的連續訊號的抽樣頻率和抽取訊號的長度要與自己所編的ddconv()裡面的要一致,特別是橫座標要對應,不然就是錯誤的,因為卷積之後的區間長度發生變化,卷積完之後要拿掉增加的那一部分,才時間與訊號的值是正確的對應關係。卷積完之後的值要乘以抽樣頻率,才是我們所求那麼,程式如下:

function ft=ddconv(ft1,ft2) %任意兩個連續訊號卷積

x1=-3:0.001:4;

x2=-3:0.001:4;

subplot(131),plot(x1,ft1),grid on;

title('f1(t)=u(t+1/2)-u(t-2)');

axis([(min(x1)),(max(x1)),(min(ft1)-1),(max(ft1)+1)]) ;

set(gca,'xtick',-3:1/2:4);

xlabel('t');

ylabel('f(t)')

subplot(132),plot(x2,ft2),grid on;

title('f2(t)=t/2[u(t)-u(t-2)]');

axis([(min(x2)),(max(x2)),(min(ft2)-1),(max(ft2)+1)]) ;

xlabel('t');

ylabel('f(t)');

xmin1=min(x1);

xmax1=max(x1);

xmin2=min(x2);

xmax2=max(x2);

t=(xmax2+xmax1)-(xmin2+xmin1);

xx=0-6:0.001:t-6; %作卷積後的時間向量,要減去增加的區間長度

ft=0.001*conv(ft1,ft2);

subplot(133),plot(xx,ft),grid on;

title('f1(t)*f2(t)');

set(gca,'xtick',min(xx):1/2:max(xx));

xlabel('t');

ylabel('f(t)');

axis([(min(xx)+3),(max(xx)-3),(min(ft)-0.5),(max(ft)+0.5)])

end四.結果驗證

(1)程式編制完成之後,我們用dconv()函式求

這兩個序列的卷積和。在這之前我們不妨再編制乙個m函式rectanglestem(),讓它產生序列,編制的時候要注意它是輔助ddconv()函式,所以它的起始點要與ddconv()的一致,所以其程式如下:

function f= rectanglestem( a,b)

k1=a-5;

k2=b+5;

p=k1:k2;

f=[zeros(1,length(k1:x-1)),ones(1,length(x:y)),zeros(1,length(y+1:k2))];

stem(p,f),grid on;

title('x(n)=u(n)-u(n-4)'),xlabel('n'),ylabel('x(n)'),set(gca,'xtick',k1:k2);

axis([k1 k2 min(f)-1 max(f)+1])

end現在呼叫這個rectanglestem()函式讓它生成,在」名命令視窗輸入「x1n=rectanglestem(0,4) 」其生成的影象如圖1所示;

圖 1 的影象

現在來求「,h(n)*x(n)」由於已經生成了x1(n),所以我們直接呼叫dconv()函式,直接在命令視窗輸入「xn=dconv(x1n,x1n)」生成的影象如圖2所示

圖 2(2)現在我們利用ddconv()函式來求兩個連續時間訊號的卷積,著兩個連續時間訊號分別是「」現在我們利用ddconv()求f(t)=e(t)*h(t),在這之前我們同樣編制兩個函式rectanglewindow()和signal(),他們分別用來產生「」和「」具體的程式如下:

function f= rectanglewindow( a,b)

k1=a-2.5;

k2=b+3;

p=k1:0.001:k2;

f=[zeros(1,length(k1:0.001:

a-0.001)),ones(1,length(a:0.

001:b)),zeros(1,length(b+0.001:

0.001:k2))];

plot(p,f),grid on;

title('f(t)=u(t-a)-u(t_b)');

xlabel('y');

xlabel('t');

set(gca,'xtick',k1:1/2:k2);

axis([k1 k2 min(f)-1 max(f)+1]);

end和

function f= signal(a,b)

k1=a-3;

k2=b+2;

t=k1:0.001:k2;

h=[zeros(1,length(k1:0.001:

a-0.001)),ones(1,length(a:0.

001:b)),zeros(1,length(b+0.001:

0.001:k2))];

g=(1/2).*t;

f=g.*h;

plot(t,f),grid on;

title('f(t)=1/2*t*[u(t-a)-u(t_b)]');

xlabel('y');

xlabel('t');

Matlab訊號處理實習報告

matlab訊號處理實習報告 實習名稱 matlab訊號處理 實習題目數字訊號處理 專業班級 姓名學號 成績評定 電氣與資訊學院 二0一一年六月 實習考核和成績評定辦法 1 實習的考核由指導教師根據設計表現 出勤 遵守紀律情況等 設計報告 設計成果 答辯等幾個方面,給出各項成績或權重,綜合後給出實習...

訊號與系統實驗matlab報告

本科實驗報告 課程名稱 訊號與系統實驗 學院 系 電信學部 專業 電子 班級 學號 姓名 1.掌握週期訊號的傅利葉級數展開 2.掌握週期訊號的有限項傅利葉級數逼近 3.掌握週期訊號的頻譜分析 4.掌握連續非週期訊號的傅利葉變換 5.掌握傅利葉變換的性質 t 3 0.01 3 n0 3 n1 1 t0...

訊號與系統MATLAB實驗報告

一 實驗名稱 matlab對連續訊號與系統的時域分析 頻域分析和s域分析 matlab對離散訊號與系統的時域分析。二 實驗目的 1.學習用matlab描述常用訊號的方法。2.掌握連續時間訊號和離散時間訊號的描述。3.利用matlab計算訊號卷積。4.掌握訊號頻譜的定義,理解非週期訊號頻譜密度的概念。...