信号实验(01)MATLAB 编程基础及典型实例

Posted jinzhi666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了信号实验(01)MATLAB 编程基础及典型实例相关的知识,希望对你有一定的参考价值。

信号实验(01)MATLAB 编程基础及典型实例

一.例子

1.1.duiqi.m

function [f1_new, f2_new, n ] = duiqi(f1,n1,f2,n2)
%  功能:将两个序列对齐,以实现两个序列之间的运算
%  输入:
%  (1 ) f1,f2:  原来的两个序列;
%  (2 ) n1,n2: f1,f2  所对应的时间变量范围;
%  输出:
% f1_new, f2_new  :对齐后的两个序列
% n :  对齐后的两个序列的时间变量范围
%-------------------------------------------------------------------------
a = min(min(n1), min(n2));
b = max(max(n1), max(n2));
n = a : b;
f1_new = zeros(1, length(n));
f2_new = zeros(1, length(n));
tem1 = find((n>=min(n1))&(n<=max(n1))==1);
f1_new(tem1) = f1;
tem2 = find((n>=min(n2))&(n<=max(n2))==1);
f2_new(tem2) = f2;

二.实验

2.1.新建自己姓名文件夹

2.2.绘制曲线

绘制信号 x ( t ) = e − 2 t s i n ( 2 3 t ) x(t)=e^-\\sqrt2tsin(\\frac23t) x(t)=e2 tsin(32t)的曲线,t 的范围在 0   30 s 0 ~ 30s 0 30s,取样时间间隔为 0.1 s 0.1s 0.1s.

% 绘制信号 的曲线,t 的范围在 0 ~ 30s,取样时间间隔为 0.1s.
t = 0:0.1:30;
x = exp(-sqrt(2) .* t) .* sin(2 / 3 .* t);
plot(t,x);

2.3.离散分段函数

n = [ − 10 : 10 ] n = [-10:10] n=[10:10] 范围产生离散序列:
x ( n ) = 2 n , − 3 ≤ n ≤ 3 = 0 , o t h e r x(n)=2n,-3\\le n\\le 3\\\\ =0,other x(n)=2n,3n3=0,other
并绘图。

n = (-10:1:10);
% 生成一样维度x
x = zeros(size(n));
for i = 1:length(n)
    if -3 <= n(i) && n(i) < 3
        x(i) = 2 * n(i);
    else
        x(i) = 0;
    end
end
% 是离散序列
plot(n, x, '.');

2.4.根据图像

% 是一个小括号
t = (-3:0.001:3);
% 生成一样维度x
y = zeros(size(t));
for i = 1:length(t)
    if -1 <= t(i) && t(i) < 1
        y(i) = 2 ;
%     elseif 是不分开的
    elseif 1 <= t(i) && t(i) < 2
        y(i) = 1;
    else
        y(i) = 0;
    end
end
% 是离散序列

% staris(t, y);

plot(t, y);
xlabel('X轴');ylabel('Y轴');
% 先画图再控制
axis([-2, 3, 0, 3]);

2.5.对齐函数

利用 duiqi.m 函数,求 add_f(k) = f 1 (k)-f 2 (k),pro_f(k) = f 1 (k)×f 2 (k),并以子图形式画出 f 1 (k)、f 2 (k)、add_f(k)、pro_f(k)。

clear;
f1 = 0:5;
f2 = 6:-1:0;
n1 = -1:4;
n2 = -5:1;

% function [f1_new, f2_new, n ] = duiqi(f1,n1,f2,n2)
[f1_new, f2_new, n] = duiqi(f1, n1, f2, n2);
add_f = f1_new - f2_new;
pro_f = f1_new .* f2_new;
subplot(2, 2, 1);

% 原来得不变
stem(n1, f1);
xlabel('n1');
ylabel('f1');
grid on;

subplot(2, 2, 2);
stem(n2, f2);
xlabel('n2');
ylabel('f2');
grid on;

subplot(2, 2, 3);
stem(n, add_f);
xlabel('n3');
ylabel('add_f');
grid on;

subplot(2, 2, 4);
stem(n, pro_f);
xlabel('n');
ylabel('pro_f');
grid on;


三.思考题

整理并给出“实验内容与步骤”(2)、(3)、(4)、(5)中的程序代码与产生
的图形;并回答下面的问题。

3.1.

在调用某一函数文件时,该文件中除了输入、输出变量外的其它变量在调用 函数结束后是否还存在?这些变量是全局还是局部变量?

不存在,局部变量

3.2.

设 n = -10:0.2:20,你可以通过哪些方法查看向量 n 的维数?经过关系运 算 y = (n >= 3)以后,y 的维数是多少?y又等于什么?

n = -10:0.2:20;
% 151 = (20-(-10)) / 0.2 + 1
length(n)

y = (n >= 3)
% 得到n就是真假
% y = [0,0,...]
length(y)

length()方法查看n的维数,y的维数是151,y = [0,0,0,…1,1,1]

3.3.

通过 MATLAB 的帮助系统,学习 fliplr 函数的功能和使用方法。再此基础上,写出能够产生如下图形的程序,
x ( n ) = 2 n , − 4 ≤ n ≤ 4 x(n)=2^n,-4\\le n \\le 4 x(n)=2n,4n4

n = -4:4;
x_n = 2.^n;
subplot(1, 2, 1);
stem(n, x_n);
xlabel('n');
ylabel('x(n)')

% 左右翻转

subplot(1, 2, 2);
stem(n, fliplr(x_n));
xlabel('n');
ylabel('x(-n)')

以上是关于信号实验(01)MATLAB 编程基础及典型实例的主要内容,如果未能解决你的问题,请参考以下文章

信号实验(01)MATLAB 编程基础及典型实例

山东大学数字图像处理实验:MATLAB的图像显示方法

MATLAB在信号与系统分析中的应用 ?

(高分)用Matlab模拟ASK系统(数字信号处理实验)

信号与系统实验 01 - | 连续系统频域分析的MATLAB实现

抽样函数是冲激脉冲函数吗