1. 程式人生 > >數字訊號處理(MATLAB版)學習筆記1--離散時間訊號與系統

數字訊號處理(MATLAB版)學習筆記1--離散時間訊號與系統

一、週期序列的MATLAB程式設計

1.產生包含x(n)的P行矩陣

2.利用結構( : )將P行連成一個長的行向量。

注:( : )僅對列起作用,所以必須要用矩陣轉置符 ' 

程式

xtilde = x' * ones(1, P) %P代表x週期,x為一個一週期序列
xtilde = xtilde( : ); %長縱列
xtilde = xtilde';      %長行列

二、序列運算

1.訊號相加

在MATLAB中用“+”實現。但樣本序列x1(n)和x2(n)長度必須相同。

注:如果序列長度不等,或長度相等但樣本位置不同,也不能直接用“+”。

function [y, n] = sigadd(x1, n1, x2, n2)
% implements y(n) = x1(n) + x2(n)
%-----------------------------------------
%[y, n] = sigadd(x1, n1, x2, n2)
% y = sum sequence over n, which include n1
% and n2
% x1 = first sequence over n1
% x2 = second sequence over n2(n2 can be 
% different from n1)
%
n = min(min(n1), min(n2)) : max(max(n1), max(n2)); %duration of y(n)
y1 = zeros(1, length(n)); y2 = y1;        %initialization
y1(find((n >= min(n1)) & (n <= max(n1)) == 1)) = x1; % x1 with duration of y
y2(find((n >= min(n2)) & (n <= max(n2)) == 1)) = x2;    % x2 with duration of y
y = y1 + y2;
注:摘自《數字訊號處理(MATLAB版)》(第三版)

2.訊號相乘

樣本序列的相乘(或稱點乘),用符號“ .* ”實現,限制條件同上。

function [y, n] = sigmult(x1, n1, x2, n2)
%   implements y(n) = x1(n) * x2(n)
%   -----------------------------------------------
%   [y, n] = sigmult(x1, n1, x2, n2)
%   y = product sequence over n, which includes
%   n1 and n2
%   x1 = first sequence over n1
%   x2 = second sequence over n2(n2 can be 
%   different from n1)
%
n = min(min(n1), min(n2)) : max(max(n1), max(n2));      % duration of y(n)
y1 = zeros(1, length(n)); y2 = y1;                                    % 
y1(find((n >= min(n1)) & (n <= max(n1)) == 1)) = x1;    % x1 with duration of y(n)
y2(find((n >= min(n2)) & (n <= max(n2)) == 1)) = x2;    % x2 with duration of y(n)
y = y1 .* y2;                                                                      % sequence multiplication
注:摘自《數字訊號處理(MATLAB版)》(第三版)

3.加權

樣本序列乘以標量a(a為常數或其他)

用符號“*”實現。

4.移位

實現方法

function [y, n] = sigshift(x, m, k)
%   implements y(n) = x(n - k)
%   -----------------------------------------------
%   [y, n] = sigshift(x, m, k)
%
n = m + k; y = x;
注:摘自《數字訊號處理(MATLAB版)》(第三版)

5.反轉

function [y, n] = sigfold(x, n)
%   implements y(n) = x(-n)
%   -----------------------------------------------
%   [y, n] = sigfold(x, n)
%
y = fliplr(x); n = - fliplr(n);
注:摘自《數字訊號處理(MATLAB版)》(第三版)

6.樣本累加

將樣本序列x中的n1 : n2之間的全部樣本值相加。(非樣本序列相加)

由sum(x(n1 : n2))函式實現。

7.樣本乘積

將n1 : n2之間的全部樣本值連乘起來。

由prod((n1 : n2))函式實現。

8.訊號能量

有限長度序列x(n)的能量可由以下兩種方法計算

Ex = sum(x .* conj(x)); %方法一
Ex = sum(abs(x) .^ 2); %方法二
注:摘自《數字訊號處理(MATLAB版)》(第三版)