信号实验(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)=e−2tsin(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,−3≤n≤3=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,−4≤n≤4
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 编程基础及典型实例的主要内容,如果未能解决你的问题,请参考以下文章