1. 程式人生 > >數字訊號處理——MATLAB實驗(一)

數字訊號處理——MATLAB實驗(一)

實驗名稱: 離散時間訊號和系統的時域分析

一、實驗目的:

熟悉Mat lab中產生訊號和繪製訊號的基本命令,掌握產生離散時間訊號的基本方法;掌握離散時間系統對輸入訊號的簡單運算處理,驗證離散時間系統有關特性。

二、實驗內容及要求:

1. 離散時間訊號的時域分析:

(1)修改程式P1.1,產生單位抽樣序列 並繪圖。 (2)修改程式P1.1,產生單位步長序列 並繪圖。 (3)修改程式P1.4,產生長度為50、頻率為0.08、振幅為2.5、相移為90度的一個正弦序列並繪圖,該序列的週期是多少?

2. 離散時間系統的時域分析:

(1)修改程式P2.3,其中a=4, b=-6, 並繪圖,該離散時間系統是線性嗎? (2)修改程式P2.4,其中D=15, 並繪圖,該離散時間系統是時不變嗎? (3)修改程式P2.5,產生如下因果線性時不變系統的衝激響應的前45個樣本並繪圖: (4)執行程式P2.7,對序列 和 求卷積生成 ,並用FIR濾波器 對輸入 濾波,求得 ; 和 有差別嗎?為什麼要使用對 補零後得到的 作為輸入來產生 ?

三、實驗結果及問題回答:

1. 離散時間訊號的時域分析:

(1)實驗結果:

% Program P1_1
% Generation of a Unit Sample Sequence 
clf;
% Generate a vector from -10 to 20
n = -10:20;
% Generate the unit sample sequence
u = [zeros(1,21) 1 zeros(1,9)];
% Plot the unit sample sequence
stem(n,u);
xlabel('Time index n');ylabel('Amplitude');
title('Unit Sample Sequence');
axis([-10 20 0 1.2]);

在這裡插入圖片描述 (2)實驗結果:

% Program P1_1
% Generation of a Unit Sample Sequence 
clf;
% Generate a vector from -10 to 20
n = -10:20;
% Generate the unit sample sequence
u = [zeros(1,3) ones(1,28)];
% Plot the unit sample sequence
stem(n,u);
xlabel('Time index n');ylabel('Amplitude');
title('Unit Step Sequence');
axis([-10 20 0 1.2]);

在這裡插入圖片描述 (3)實驗結果:

  % Program P1_4
    % Generation of a sinusoidal sequence
    n = 0:50;   
    f = 0.08;           
    phase = pi/2;         
    A = 2.5;            
    arg = 2*pi*f*n - phase; 
    x = A*sin(arg);
    clf;            % Clear old graph
    stem(n,x);      % Plot the generated sequence
    axis([0 40 -4 4]);
    grid; 
    title('Sinusoidal Sequence');
    xlabel('Time index n');
    ylabel('Amplitude');
    axis;

在這裡插入圖片描述

2. 離散時間系統的時域分析:

(1)實驗結果:

% Program P2_3
% Generate the input sequences
clf;
n = 0:40;
a = 4;b = -6;
x1 = cos(4*pi*0.1*n);
x2 = cos(4*pi*0.4*n);
x = a*x1 + b*x2;
num = [2.2403 2.4908 2.2403];
den = [1 -0.4 0.75];
ic = [0 0]; % Set zero initial conditions
y1 = filter(num,den,x1,ic); % Compute the output y1[n]
y2 = filter(num,den,x2,ic); % Compute the output y2[n]
y = filter(num,den,x,ic); % Compute the output y[n]
yt = a*y1 + b*y2; 
d = y - yt; % Compute the difference output d[n]
% Plot the outputs and the difference signal
subplot(3,1,1)
stem(n,y);
ylabel('Amplitude');
title('Output Due to Weighted Input: a \cdot x_{1}[n] + b \cdot x_{2}[n]');
subplot(3,1,2)
stem(n,yt);
ylabel('Amplitude');
title('Weighted Output: a \cdot y_{1}[n] + b \cdot y_{2}[n]');
subplot(3,1,3)
stem(n,d);
xlabel('Time index n');ylabel('Amplitude');
title('Difference Signal');

在這裡插入圖片描述 (2)實驗結果:

% Program P2_4
% Generate the input sequences
clf;
n = 0:40; D = 15;a = 3.0;b = -2;
x = a*cos(4*pi*0.1*n) + b*cos(4*pi*0.4*n);
xd = [zeros(1,D) x];
num = [2.2403 2.4908 2.2403];
den = [1 -0.4 0.75];
ic = [0 0]; % Set initial conditions
% Compute the output y[n]
y = filter(num,den,x,ic);
% Compute the output yd[n]
yd = filter(num,den,xd,ic);
% Compute the difference output d[n]
d = y - yd(1+D:41+D);
% Plot the outputs
subplot(3,1,1)
stem(n,y);
ylabel('Amplitude'); 
title('Output y[n]'); grid;
subplot(3,1,2)
stem(n,yd(1:41));
ylabel('Amplitude');
title(['Output due to Delayed Input x[n ?, num2str(D),']); grid;
subplot(3,1,3)
stem(n,d);
xlabel('Time index n'); ylabel('Amplitude');
title('Difference Signal'); grid;

在這裡插入圖片描述 (3)實驗結果:

%%
clf;
N = 45;
num1 = [0.9 -0.45 0.35 0.002];
den1 = [1 0.71 -0.46 -0.62];
y1 = impz(num1,den1,N);
% Plot the impulse response
figure(1)
 stem(y1);
xlabel('Time index n'); ylabel('Amplitude');
title('Impulse Response'); grid;

在這裡插入圖片描述 (4)實驗結果

沒有差別。對x[n]補零是因為filter函式產生的輸出序列和輸入序列相等,而兩訊號卷積得到的序列長度為N1+N2-1,所以要補相應個數的零。