实验二 系统响应及系统稳定性

ops/2024/11/25 16:25:50/

实验目的

(1)学会运用Matlab 求解离散时间系统的零状态响应;

(2)学会运用Matlab 求解离散时间系统的单位取样响应;

(3)学会运用Matlab 求解离散时间系统的卷积和。

实验原理及实例分析

1. 离散时间系统的响应

【例2-1】已知某LTI系统的差分方程为:

3 y ( n ) − 4 y ( n − 1 ) + 2 y ( n − 2 ) = x ( n ) + 2 x ( n − 1 ) 3y(n)-4y(n-1)+2y(n-2)=x(n)+2x(n-1) 3y(n)4y(n1)+2y(n2)=x(n)+2x(n1)

试用Matlab命令绘出当激励信号为 x ( n ) = ( 1 2 ) n u ( n ) x(n)=(\frac{1}{2})^n u(n) x(n)=(21)nu(n) 时该系统的零状态响应。

matlab">a=[3 -4 2];
b=[1 2];
n=0:30;
x=(1/2).^n;
%%%
% 函数名:filter(b,a,x)
% 功能:计算离散系统的零状态响应
% 格式:filter(b,a,x), 其中a 为响应的系数行向量,b 为激励的系数行向量,x 为激励序列。
y=filter(b,a,x);
%%%
stem(n,y,'filled'),grid on
xlabel('n'),title('系统响应y(n)')

2. 离散时间系统的单位取样响应

系统的单位取样响应定义为系统在 δ ( n ) \delta (n) δ(n) 激励下系统的零状态响应,用 h ( n ) h(n) h(n) 表示。

Matlab 求解单位取样响应可利用函数filter,并将激励设为单位抽样序列。

例如,求解实例2-1 中系统的单位取样响应时,MATLAB 源程序为:

matlab">a=[3 -4 2];
b=[1 2];
n=0:30;
x=(n==0);% 产生单位抽样序列
h=filter(b,a,x);
stem(n,h,"fill"),grid on
xlabel('n'),title('系统单位取样响应h(n)')

Matlab另一种求单位取样响应的方法是利用控制系统工具箱提供的函数impz来实现。

matlab">a=[3 -4 2];
b=[1 2];
%%%
% 函数名:impz(b,a,N)
% 功能:求离散系统的单位响应并绘出图形
% 格式:其中,a 为响应的系数行向量,b 为激励的系数行向量,参数N通常为正整数,代表计算单位取样响应的样值个数。
impz(b,a,30);
%%%
grid on;
title('系统单位取样响应h(n)');

程序运行结果如图2-3 所示,比较图2-1 和图2-2,不难发现结果相同。

3. 离散时间信号的卷积和运算

【例2-2】利用Matlab 的conv 命令求两个长为4 的矩形序列的卷积和。

即: g ( n ) = [ u ( n ) − u ( n − 4 ) ] ∗ [ u ( n ) − u ( n − 4 ) ] \textrm{g}\left(n\right)=\left\lbrack u\left(n\right)-u\left(n-4\right)\right\rbrack *\left\lbrack u\left(n\right)-u\left(n-4\right)\right\rbrack g(n)=[u(n)u(n4)][u(n)u(n4)]

matlab">x1=ones(1,4);
x2=ones(1,4);
%%%
% 函数名f=conv(f1,f2)
% 功能:求卷积
% 格式:f1,f2 为参与卷积运算的两个序列,f 为卷积的结果,f 的长度为length(f1)+length(f2)-2
g=conv(x1,x2);
%%%
n=0:length(x1)+length(x2)-2;
stem(n,g,'filled'),grid on,xlabel('n')

【例2-3】已知某系统的单位取样响应为 h ( n ) = 0. 8 n [ u ( n ) − u ( n − 8 ) ] h\left(n\right)=0.8^n \left\lbrack u\left(n\right)-u\left(n-8\right)\right\rbrack h(n)=0.8n[u(n)u(n8)] ,试求Matlab 求当激励信号为 x ( n ) = u ( n ) − u ( n − 4 ) x\left(n\right)=u\left(n\right)-u\left(n-4\right) x(n)=u(n)u(n4) 时,系统的零状态响应。

解:Matlab 中可通过卷积求解零状态响应,即 x ( n ) ∗ h ( n ) x\left(n\right)*h\left(n\right) x(n)h(n) 。由题意可知,

描述 h ( n ) h\left(n\right) h(n) 向量的长度至少为 8,描述 x ( n ) x\left(n\right) x(n) 向量的长度至少为 4,因此为了图形

完整美观,我们将 h ( n ) h\left(n\right) h(n) 向量和 x ( n ) x\left(n\right) x(n) 向量加上一些附加的零值。

matlab">addpath('.\2024-2025(1)《信号处理实验》资料(请拷贝到u盘中,每次试验带到实验室)\实验中用到的一些函数和音频图像文件');% 定义x(n)向量显示范围(添加了附加的零值)
nx = -1:5;
% 定义h(n)向量显示范围(添加了附加的零值)
nh = -2:10;% 生成单位阶跃序列
x = uDT(nx) - uDT(nx-4);
% 生成h(n)序列
h = 0.8.^nh .* (uDT(nh) - uDT(nh-8));% 计算卷积
y = conv(x, h);% 计算卷积结果的起始点和终点
ny1 = nx(1) + nh(1);
ny2 = nx(end) + nh(end);
ny = ny1:ny2;% 绘制x(n)的图像
subplot(311);
stem(nx, x, 'fill');
grid on;
xlabel('n');
title('x(n)');
axis([-4 16 0 3]);% 绘制h(n)的图像
subplot(312);
stem(nh, h, 'fill');
grid on;
xlabel('n');
title('h(n)');
axis([-4 16 0 3]);% 绘制y(n)的图像
subplot(313);
stem(ny, y, 'fill');
grid on;
xlabel('n');
title('y(n) = x(n) * h(n)');
axis([-4 16 0 3]);

实验内容

(1)试用Matlab 命令求解以下离散时间系统的单位取样响应,并判断系统的稳定性。

$ 1)~~3y\left(n\right)+4y\left(n-1\right)+y\left(n-2\right)=x\left(n\right)+x\left(n-1\right) $

matlab">clear;
clc;
close;a1=[3 4 1];
b1=[1 1];
n=0:30;
x=(n==0);% 产生单位抽样序列
h=filter(b1,a1,x);
subplot(211);
stem(n,h,"fill")
grid on
xlabel('n')
title('filter法-系统单位取样响应h(n)')subplot(212);
impz(b1,a1,30);
grid on;
title('impz法-系统单位取样响应h(n)');
matlab">%%%
% 函数名:zplane(b,a)
% 功能:得到系统函数H(z)的零极点分布图
% 格式:其中b和a分别表示H(z)的分子和分母多项式的系数向量,函数的作用是在z平面上画出单位圆,零点和极点。
%%%
zplane(b1,a1);

$ 2)~~\frac{5}{2}y\left(n\right)+6y\left(n-1\right)+10y\left(n-2\right)=x\left(n\right) $

matlab">close;
a2=[5/2 6 10];
b2=[1];
n=0:30;
x=(n==0);% 产生单位抽样序列
h=filter(b2,a2,x);
subplot(211)
stem(n,h,"fill")
grid on
xlabel('n')
title('filter法-系统单位取样响应h(n)')
subplot(212)
impz(b2,a2,31)
axis([0 30 -3*10^8 2*10^8]);
grid on
title('impz法-系统单位取样响应h(n)')
matlab">zplane(b2,a2);

(2)已知某系统的单位取样响应为 h ( n ) = ( 7 8 ) n [ u ( n ) − u ( n − 10 ) ] h\left(n\right)={\left(\frac{7}{8}\right)}^n \left\lbrack u\left(n\right)-u\left(n-10\right)\right\rbrack h(n)=(87)n[u(n)u(n10)] , 试用MATLAB 求当激励信号为 x ( n ) = u ( n ) − u ( n − 5 ) x\left(n\right)=u\left(n\right)-u\left(n-5\right) x(n)=u(n)u(n5) 时,系统的零状态响应。

matlab">clear;
addpath('.\2024-2025(1)《信号处理实验》资料(请拷贝到u盘中,每次试验带到实验室)\实验中用到的一些函数和音频图像文件');
% 定义x(n)向量显示范围(添加了附加的零值)
nx = -1:6;
% 定义h(n)向量显示范围(添加了附加的零值)
nh = -1:11;% 生成单位阶跃序列
x = uDT(nx) - uDT(nx-5);
% 生成h(n)序列
h = (7/8).^nh .* (uDT(nh) - uDT(nh-10));% 计算卷积
y = conv(x, h);% 计算卷积结果的起始点和终点
ny1 = nx(1) + nh(1);
ny2 = nx(end) + nh(end);
ny = ny1:ny2;% 绘制x(n)的图像
subplot(311);
stem(nx, x, 'fill');
grid on;
xlabel('n');
title('x(n)');
axis([-4 18 0 2]);% 绘制h(n)的图像
subplot(312);
stem(nh, h, 'fill');
grid on;
xlabel('n');
title('h(n)');
axis([-4 18 0 2]);% 绘制y(n)的图像
subplot(313);
stem(ny, y, 'fill');
grid on;
xlabel('n');
title('y(n) = x(n) * h(n)');
axis([-4 18 0 4]);

(3)用数字图像处理中的Sobel 算子,调用conv2 函数对lena 图像进行滤波。

设两个3×3 的Sobel 矩阵算子Gx=[-1 0 1;-2 0 2;-1 0 1],Gy=[1 2 1;0 0 0;-1-2 -1]。

  1. 读取lena 图像数据,保存到B 矩阵中;

  2. 分如下三种情况对B 进行卷积滤波

     ① 采用Gx 与B 进行卷积;

     ② 采用Gy 与的B 进行卷积;

     ③ 先采用Gx 与B 进行卷积,然后再采用Gy 与B 进行卷积;

     ④ 在一个figure 中,分四个子图显示出:原始图像,经过Gx 卷积滤波后

图像、经过Gy 卷积滤波后图像,先后采用Gx 和Gy 与的B 进行卷积滤波后

的图像,观察滤波后的图像的效果。

matlab">clear;
% 定义Sobel算子
Gx = [-1 0 1; -2 0 2; -1 0 1];
Gy = [1 2 1; 0 0 0; -1 -2 -1];% 读取Lena图像
B = imread('.\2024-2025(1)《信号处理实验》资料(请拷贝到u盘中,每次试验带到实验室)\实验中用到的一些函数和音频图像文件\lena.bmp') 
matlabTextOutput">B = 512x512 uint8 矩阵    131   136   133   132   137   137   135   138   133   134   132   128   128   129   126   122   122   120   118   116   113   108   103    99    84    86    77    74    71    67    68    60    59    57    52    56    67    67    62    65    70    73    67    64    70    71    72    79    73    74134   135   132   134   139   133   130   138   140   138   133   126   124   124   122   118   122   120   118   117   114   109   103    98    91    94    81    76    70    65    66    57    60    69    70    68    66    59    60    73    75    75    73    72    71    71    70    71    80    69136   129   137   134   130   135   132   133   135   130   127   128   131   131   126   121   121   114   116   115   108   107   102    90    89    84    78    84    70    69    60    57    55    54    56    60    56    67    59    65    68    72    77    76    69    65    71    80    74    76137   130   137   135   131   135   132   132   135   131   128   129   132   132   127   122   124   122   117   112   114   109   102    99   100    89    76    76    62    66    65    67    62    62    65    67    64    73    67    73    58    62    69    73    70    65    65    68    76    77137   132   137   135   131   134   133   132   135   132   129   129   132   132   128   124   127   125   116   110   115   108   105   103    97    89    79    81    67    69    64    64    56    57    62    62    59    66    62    69    66    66    69    74    75    73    73    75    75    71137   133   136   136   132   133   133   131   134   130   128   128   130   130   127   124   127   120   115   112   114   104   108   101    95    87    79    83    69    69    63    61    53    53    60    58    56    61    59    65    67    67    70    74    75    73    75    79    76    79136   134   134   136   132   131   134   130   131   128   126   126   128   128   126   124   124   120   115   114   120   103   108    99    90    85    79    83    70    69    61    58    62    60    68    65    66    68    67    72    63    68    77    82    80    74    74    78    65    66134   133   132   135   132   130   135   130   129   127   125   125   126   126   125   124   121   125   116   113   131   105   105   103    89    83    77    83    69    69    61    59    64    60    68    63    68    69    68    70    68    72    79    82    78    73    75    80    72    78132   132   130   134   131   129   136   130   129   127   126   125   126   127   126   126   120   125   114   111   132   102   105   103    96    86    75    76    63    67    66    68    60    53    60    55    64    65    63    62    71    70    70    71    69    66    68    73    76    74131   132   129   134   131   129   136   130   130   128   127   126   127   127   127   127   120   119   111   110   125    97   107   100    92    85    77    82    69    71    66    66    64    55    61    56    67    68    65    63    76    73    73    76    77    74    70    68    77    73
matlab">
% ① 采用Gx与B进行卷积
B_Gx = conv2(B, Gx, 'same');% ② 采用Gy与B进行卷积
B_Gy = conv2(B, Gy, 'same');% ③ 先采用Gx与B进行卷积,然后再采用Gy与B进行卷积
B_Gx_Gy = conv2(B_Gx, Gy, 'same');% ④ 在一个figure中,分四个子图显示图像
figure;
subplot(2,2,1), imshow(B), title('原始图像');
subplot(2,2,2), imshow(B_Gx, []), title('Gx卷积滤波后图像');
subplot(2,2,3), imshow(B_Gy, []), title('Gy卷积滤波后图像');
subplot(2,2,4), imshow(B_Gx_Gy, []), title('Gx和Gy卷积滤波后图像');

原始图像:未经处理的灰度图像。

Gx卷积滤波后图像:突出水平边缘。

Gy卷积滤波后图像:突出垂直边缘。

Gx和Gy卷积滤波后图像:结合两者,全面突出边缘。

思考题

(1) Matlab 的工具箱函数conv,能用于计算两个有限长序列之间的卷积,但conv 函数假定这两个序列都从n=0 开始。试编写M 文件计算x(n) = [3,11,7,0,−1,4,2],−3≤ n ≤ 3 和 h(n) = [2,3,0,−5,2,1],−1≤ n ≤ 4 之 间 的 卷积,并绘制y(n)的波形图。

matlab">close;
clear;
% 定义序列 x(n) 和 h(n)
nx = -3:3; % n 的范围
x = [3, 11, 7, 0, -1, 4, 2]; % x(n)nh = -1:4; % n 的范围
h = [2, 3, 0, -5, 2, 1]; % h(n)% 计算卷积
y = conv(x, h);% 定义 y(n) 的范围
ny = nx(1) + nh(1) : nx(end) + nh(end); % y(n) 的范围% 绘制x(n)的图像
subplot(311);
stem(nx, x, 'fill');
grid on;
xlabel('n');
title('x(n)');
axis([-4 8 -5 15]);% 绘制h(n)的图像
subplot(312);
stem(nh, h, 'fill');
grid on;
xlabel('n');
title('h(n)');
axis([-4 8 -5 5]);% 绘制y(n)的图像
subplot(313);
stem(ny, y, 'fill');
grid on;
xlabel('n');
title('y(n) = x(n) * h(n)');
axis([-4 8 -80 80]);

(2) 在数字图像处理边缘检测技术中,除了Sobel 算子外,还有哪些边缘检测算子?通过查找资料,选择某种边缘检测算子,在Matlab 平台上编程实现对lena 或其他图像进行边缘检测,显示出原图和边缘检测后的图像。

  • Prewitt 算子
  • Canny 边缘检测
  • Roberts 交叉梯度算子
  • Laplacian 边缘检测
  • Scharr 算子

数字图像处理(19): 边缘检测算子(Roberts算子、Prewitt算子、Sobel算子 和 Laplacian算子)_ubuntu写出roberts、sobel、laplace边缘检测算法-CSDN博客

图像特征与边缘检测:从Sobel算子到Canny边缘检测【计算机视觉】-CSDN博客

matlab">clear;
% 读取图像
img = imread([...'.\2024-2025(1)《信号处理实验》资料(请拷贝到u盘中,每次试验带到实验室)\实验中用到的一些函数和音频图像文件\lena_colour.bmp'% '运动.jpg'% '东方明珠.jpg']);
img_RGB = img; % MATLAB 读取图像默认是 RGB 格式% 灰度化处理图像
grayImage = rgb2gray(img);% 高斯滤波
gaussianBlur = imgaussfilt(grayImage, 1); % 1 为标准差% 阈值处理
binary = imbinarize(gaussianBlur, 0.5); % 0.5 为阈值% Roberts算子
kernelx = [-1 0; 0 1];
kernely = [0 -1; 1 0];
x_roberts = imfilter(double(binary), kernelx);
y_roberts = imfilter(double(binary), kernely);
Roberts = uint8(sqrt(x_roberts.^2 + y_roberts.^2));% Prewitt算子
kernelx = [1 1 1; 0 0 0; -1 -1 -1];
kernely = [-1 0 1; -1 0 1; -1 0 1];
x_prewitt = imfilter(double(binary), kernelx);
y_prewitt = imfilter(double(binary), kernely);
Prewitt = uint8(sqrt(x_prewitt.^2 + y_prewitt.^2));% Sobel算子
Sobel_x = imfilter(double(binary), fspecial('sobel'));
Sobel_y = imfilter(double(binary), fspecial('sobel')');
Sobel = uint8(sqrt(Sobel_x.^2 + Sobel_y.^2));% Laplacian算子
Laplacian = uint8(imfilter(double(binary), fspecial('laplacian')));% 显示图像
figure;
subplot(2, 3, 1), imshow(img_RGB), title('原始图像'), axis off;
subplot(2, 3, 2), imshow(binary,[]), title('二值图'), axis off;
subplot(2, 3, 3), imshow(Roberts,[]), title('Roberts算子'), axis off;
subplot(2, 3, 4), imshow(Prewitt,[]), title('Prewitt算子'), axis off;
subplot(2, 3, 5), imshow(Sobel,[]), title('Sobel算子'), axis off;
subplot(2, 3, 6), imshow(Laplacian,[]), title('Laplacian算子'), axis off;
matlab">clear;
matlab">
% 读取图像
img = imread('.\2024-2025(1)《信号处理实验》资料(请拷贝到u盘中,每次试验带到实验室)\实验中用到的一些函数和音频图像文件\lena_colour.bmp');
img_RGB = img; % MATLAB 读取图像默认是 RGB 格式% 灰度化处理图像
grayImage = rgb2gray(img);% 高斯滤波
gaussianBlur = imgaussfilt(grayImage, 1); % 1 为标准差% 阈值处理
binary = imbinarize(gaussianBlur, 0.); % 0.5 为阈值% Roberts算子(使用 conv2)
kernelx = [-1 0; 0 1];
kernely = [0 -1; 1 0];
x_roberts = conv2(double(binary), kernelx, 'same');
y_roberts = conv2(double(binary), kernely, 'same');
Roberts = uint8(sqrt(x_roberts.^2 + y_roberts.^2));% Prewitt算子(使用 conv2)
kernelx_prewitt = [1 1 1; 0 0 0; -1 -1 -1];
kernely_prewitt = [-1 0 1; -1 0 1; -1 0 1];
x_prewitt = conv2(double(binary), kernelx_prewitt, 'same');
y_prewitt = conv2(double(binary), kernely_prewitt, 'same');
Prewitt = uint8(sqrt(x_prewitt.^2 + y_prewitt.^2));% Sobel算子(使用 conv2)
Sobel_x = conv2(double(binary), fspecial('sobel'), 'same');
Sobel_y = conv2(double(binary), fspecial('sobel')', 'same');
Sobel = uint8(sqrt(Sobel_x.^2 + Sobel_y.^2));% Laplacian算子(使用 conv2)
Laplacian = uint8(conv2(double(binary), fspecial('laplacian'), 'same'));% 显示图像
figure;
subplot(2, 3, 1), imshow(img_RGB), title('原始图像'), axis off;
subplot(2, 3, 2), imshow(binary, []), title('二值图'), axis off;
subplot(2, 3, 3), imshow(Roberts, []), title('Roberts算子'), axis off;
subplot(2, 3, 4), imshow(Prewitt, []), title('Prewitt算子'), axis off;
subplot(2, 3, 5), imshow(Sobel, []), title('Sobel算子'), axis off;
subplot(2, 3, 6), imshow(Laplacian, []), title('Laplacian算子'), axis off;

http://www.ppmy.cn/ops/136617.html

相关文章

Vue框架中this指向问题

在 Vue 中,this 的指向问题与 JavaScript 的基本规则一致,但由于 Vue 的框架特性,其 this 在不同的场景下有特定的含义和使用方式。以下是 Vue 中常见的 this 指向情况和可能遇到的问题。 1. Vue 实例中的 this 在 Vue 的组件或根实例中&…

CSS中calc语法不生效

问题起因 在使用calc时发现无法生效,写法是: height:calc(100vh-100px);页面无效果,加空格后就发现有效果了: height:calc(100vh - 100px);这是为什么? calc是什么? css3 的计算属性,用于动态…

《Python编程实训快速上手》第八天--组织文件

一、shutil模块 shutil(或称为shell工具)模块中包含一些函数,让你可以在Python程序中复制、移动、重命名和删除文件。 1、复制文件和文件夹 source destinationdestination存在destination不存在文件文件将 source 文件复制并覆盖 d…

模拟器多开限制ip,如何设置单窗口单ip,每个窗口ip不同

很多手游多开玩家都是利用安卓模拟器实现手游多开,但是很多手游会限制ip,导致多开之后封号等问题,模拟器本身没有更换IP的功能,就需要通过第三方软件来实现 安卓模拟器概述 雷电模拟器、夜神模拟器、mum模拟器等都是目前市场上比…

c#通过网上AI大模型实现对话功能

目录 基础使用给大模型额外提供函数能力用Microsoft.Extensions.AI库实现用json格式回答 基础使用 https://siliconflow.cn/网站有些免费的大模型可以使用,去注册个账户,拿到apikey 引用 nuget Microsoft.Extensions.AI.OpenAI using Microsoft.Extensi…

移动端自动化环境搭建_Android

adb的安装与使用 adb安装adb环境变量adb使用adb常用命令adb简介adb作用 adb安装 选择对应系统进入下载界面,选中版本下载即可: Windows版本:Windows Mac版本:Mac Linux版本:Linux 安装完成后,进行压缩&…

.Net框架以及桌面UI时间线

依托于.net框架,按照时间线可分为以下三种。 桌面应用的UI可分为以下三种。 2024.10.20

工业相机视场角计算

现在常用的是海康威视品牌的相机,打开官网查找现在相机型号,在详细信息里面找到像元尺寸、和分辨率 通过计算得到传感器尺寸 (1.85/1000*40247.4444)mm (1.85*3036/10005.6166)mm 当前使用镜头焦距8mm,可以通过计算得出视场角(…