離散時間信號——序列的基本運算及matlab實作
文章目錄
- 離散時間信號——序列的基本運算及matlab實作
- 前言
- 一、什么是離散時間信號?
- 1、離散時間信號
- 2、數字信號處理系統
- 二、序列的基本運算
- 1.序列相加
- 2.序列相乘
- 3、序列倍率
- 4、序列移位
- 5、序列折疊
- 總結
前言
本篇文章主要介紹數字信號處理內容中的離散信號序列的基本運算,如:序列相加、序列相乘、倍率、移位、折疊、樣本和等內容及matlab代碼的實作,
提示:以下是本篇文章正文內容,下面MATLAB已親測有效
一、什么是離散時間信號?
1、離散時間信號
信號可分為模擬信號和數字信號,模擬信號可表示為x(t),表示連續時間,,例如生活中的聲音信號,而數字信號可以用x(n)來表示,代表時間的離散時刻,因此也稱為離散時間信號,它的表示方法是一個有序的數字序列,
離散時間信號:時間為離散變數,幅度為連續變化的變數,
2、數字信號處理系統
數字信號處理系統基本由以下部分組成:前端模擬信號接收裝置、抗混疊濾波、A/D轉換裝置、數字信號處理模塊(DSP)、D/A轉換裝置、平滑濾波組成,

二、序列的基本運算
1.序列相加
序列相加是一個對應樣本與樣本之間的相加,
自定義sigadd函式演示運算:
function [y,n] = sigadd(x1,n1,x2,n2)
%實作序列相加
% 實作y(n)=x1(n)+x2(n)
% [y,n ]=sigadd(x1 ,n1,x2,n2)
n = min(min(n1),min(n2)):max(max(n1),max(n2));
y1 = zeros(1,length(n));
y2=y1;
y1 (find( (n>=min (n1) ) & (n<=max (n1) )==1) )=x1 ;
y2 (find( (n>=min (n2) ) & (n<=max (n2) )==1) )=x2 ;
y=y1+y2;
end
呼叫該函式
n1=[0 1 2 3];
x1=[1 2 3 4];
n2=[2 3 4 5];
x2=[1 2 3 4];
subplot(131);
stem(n1,x1);
axis([-1 5,0 5]);
title('x1序列');
subplot(132);
stem(n2,x2);
axis([-1 6,0 5]);
title('x2序列');
[y,n]=sigadd(x1,n1,x2,n2);
subplot(133);
stem(n,y);
axis([-1 6,0 8]);
title('相加后序列');
結果是正確的

2.序列相乘
序列相乘是對應采樣點之間的相乘(點乘)
自定義sigmuti函式演示運算:
function [y,n] = sigmuti(x1,n1,x2,n2)
% 實作y(n)=x1(n)*x2(n)
% [y,n ]=sigmuti(x1 ,n1,x2,n2)
n = min(min(n1),min(n2)):max(max(n1),max(n2));
y1 = zeros(1,length(n));
y2=y1;
y1 (find( (n>=min (n1) ) & (n<=max (n1) )==1) )=x1 ;
y2 (find( (n>=min (n2) ) & (n<=max (n2) )==1) )=x2 ;
y=y1.*y2;
end
呼叫該函式
n1=[0 1 2 3];
x1=[1 2 3 4];
n2=[2 3 4 5];
x2=[1 2 3 4];
subplot(131);
stem(n1,x1);
axis([-1 5,0 5]);
title('x1序列');
subplot(132);
stem(n2,x2);
axis([-1 6,0 5]);
title('x2序列');
[y,n]=sigmuti(x1,n1,x2,n2);
subplot(133);
stem(n,y);
axis([-1 6,0 10]);
title('相乘后序列');
結果圖

3、序列倍率
這個運算很簡單,每一個采樣值都乘以倍數a就可以了,
自定義sigdouble函式演示運算:
function [y,n] = sigdouble(x1,n1,a)
%sigdouble 序列倍率
% 在此運算中,
% 每個采樣值乘以一個常數a,
% a{x(n)}= {ax(n)}
% 在MATLAB中可用算術運算子“*”來實作倍率運算,
n=n1;
y=a*x1;
end
呼叫運行
n1=[0 1 2 3];
x1=[1 2 3 4];
a=3; %倍率
[y,n]=sigdouble(x1,n1,a);
subplot(121);
stem(n1,x1);
axis([-1 5,0 5]);
title('x1序列');
subplot(122);
stem(n,y);
axis([-1 5,0 13]);
title('倍率后序列');
結果圖

4、序列移位
通過移位運算,每個采樣值都向右移動k個單位(k正為右,負為左),
移位后:y(n)={x(n-k)}
自定義sigfold函式演示運算:
function [y,n] = sigshift(x,m,n0)
%實作y(n)=x(n-n0)
%移位--在此運算中,x (n)的每一個樣本都移動n0個周期,移位后的序列y (n)如下,
n=m+n0;
y=x;
end
呼叫運行:
n1=[0 1 2 3];
x1=[1 2 3 4];
a=-3; %向左平移3個單位
[y,n]=sigshift(x1,n1,a);
subplot(121);
stem(n1,x1);
axis([-4 4,0 5]);
title('x1序列');
subplot(122);
stem(n,y);
axis([-4 4,0 5]);
title('移位后序列');
結果圖:

5、序列折疊
通過折疊運算,使得采樣值每個樣本按照n=0翻轉
自定義sigfold函式演示運行:
function [y,n] = sigfold(x,n0)
%序列折疊運算
%在此運算中,x (n)的每個樣本都對n= o翻轉,得到一個折疊后的序列y(n)
%y(n)={x(-n)}
y=fliplr(x);
n=-max(n0):-min(n0);
end
呼叫運行:
n1=[0 1 2 3];
x1=[1 2 3 4];
[y,n]=sigfold(x1,n1);
subplot(121);
stem(n1,x1);
axis([-4 4,0 5]);
title('x1序列');
subplot(122);
stem(n,y);
axis([-4 4,0 5]);
title('折疊后序列');
結果圖:

總結
至此,序列的基本運算就介紹完了,往后我會持續更新信號處理的其他內容,歡迎志同道合的同仁批評指正,一起探討經驗,
QQ:2395277840
作者:草莓味的徐大力
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/257111.html
標籤:python
上一篇:Python資料分析小技巧
下一篇:模糊數學基礎
