1. 程式人生 > 其它 >matlab實現訊號與系統中卷積的計算的兩種方法

matlab實現訊號與系統中卷積的計算的兩種方法

技術標籤:訊號與系統分析matlab學習matlab

卷積計算

前言

用matlab也可以實現的卷積計算操作,主要有兩種方法,第一種直接用符號運算,第二種就是用數值運算。


一、卷積是什麼?

卷積積分是訊號與系統時域分析中的重要方法之一。連續訊號的卷積積分定義如下:
在這裡插入圖片描述

MATLAB進行卷積計算可以通過符號運算方法和數值計算方法來實現。
符號運算求解主要是從卷積積分的定義出發,採用積分公式直接計算,此時要注意積分變數和積分限的選取。
數值計算方法是通過時間間隔取足夠小的離散時間訊號的來實現的。可呼叫MATLAB中的conv()函式近似地數值求解連續訊號的卷積積分。如果對連續時間訊號和進行等時間間隔均勻抽樣,則連續訊號變為離放序列。當取樣間隔夠小時,即為連續時間訊號和。因此連續時間訊號的卷積積分運算轉換為

在這裡插入圖片描述
採用數值計演算法,只求當t=n▲的卷積積分的值,n為整數,即
(3-3)

實際上就是離散序列和的卷積和。當▲足夠小時,上式就是卷積積分的結果,即對連續時間訊號的較好數值近似
當取樣間隔足夠夠小時,有
3-4)
通過 MATLAB實現連續訊號和的卷積,可以利用各自抽樣後的離散時間序列的卷積再乘上抽樣間隔。抽樣間隔越小,誤差也就越小。

二、計算方法

1.符號運算

其中用heaviside(t)表示階躍函式,subs()是符號計算函式,表示將符號表達式中的某些符號變數替換為指定的新的變數,再進行積分操作,類似我們用圖示法求解卷積的過程。

syms tao; 
t=sym('t','positive'); %t是限定符號變數
xt1=str2sym('heaviside(t)-heaviside(t-2)');
xt2=str2sym('heaviside(t)-heaviside(t-3)+heaviside(t-1)-heaviside(t-2)');
xt_tao=subs(xt1,t,tao)*subs(xt2,t,t-tao);
yt=int(xt_tao,tao,0,t);
yt=simplify(yt)
ezplot(yt,[0,10]),grid on
title('符號運演算法求解卷積');

2.數值運算

conv函式用於多項式乘法計算和矩陣卷積,用在離散訊號相乘結果比較合適,然後再進行一些細節上的操作和繪圖。
最後一個是階躍函式的封裝,matlab中的表示為
y=(t>0)

dt=0.001;t1=-0.5:dt:3.5;
f1=uCT(t1)-uCT(t1-2);
t2=t1;
f2=uCT(t2)+uCT(t2-1)-uCT(t2-2)-uCT(t2-3);
[t,f]=ctsconv(f1,f2,t1,t2,dt);

function[f,t]=ctsconv(f1,f2,t1,t2,dt)
f=conv(f1,f2);
f=f*dt;
ts=min(t1)+min(t2);
te=max(t1)+max(t2);
t=ts:dt:te;
subplot(221)
plot(t1,f1);grid on;
axis([min(t1),max(t1),min(f1)-abs(min(f1)*0.2),max(f1)+abs(max(f1)*0.2)])
title('f1(t)');xlabel('t')
subplot(222)
plot(t2,f2);grid on;
axis([min(t2),max(t2),min(f2)-abs(min(f2)*0.2),max(f2)+abs(max(f2)*0.2)])
title('f2(t)');xlabel('t')
subplot(212)
plot(t,f);grid on;
axis([min(t),max(t),min(f)-abs(min(f)*0.2),max(f)+abs(max(f)*0.2)])
title('f(t)-f1(t)*f2(t)');xlable('t')


function f=uCT(t)
f=(t>0);
end

遇到的一些問題和解決方法

1.sym還是str2sym
在吧heaviside表示為階躍函式的符號定義中採用的sym在matlab版本中報錯,修改為strtosym可以正常執行。
在這裡插入圖片描述
2,Heaviside還是heaviside
在這裡插入圖片描述
根據報錯資訊,修改為小寫即可。

一些總結

採用了兩種方法來計算卷積,第一種是比較直觀的符號計演算法,採用sym定義符號變數,得到要計算的兩個函式符號表示,其中階躍函式採用heaviside來進行表示,然後再利用subs操作換元,進而進行積分計算,簡化後得到最終結果,ezplot繪圖。第二種是更難理解的數值計算方法。巧妙利用了conv函式近似數值求解連續訊號的積分。