对于连续信号 f(t),若有常数 t0>0,延时信号 f(t-t0)是将原信号沿正 t 轴方向
平移时间 t0,而 f(t+t0)是将原信号沿负 t 轴方向移动时间 t0。我们可用下面的命
令来实现连续信号的平移及其结果可视化, 其中 f 是用符号表达式表示的连续时
间信号, t 是符号变量, subs命令则将连续信号中的时间变量 t 用 t-t0 替换:
y=subs(f,t,t-t0); ezplot(y)
(2).反折
连续信号的反折, 是指将信号以纵坐标为轴反折, 即将信号 f(t)中的自变量 t
换为- t。实现如下:
y=subs(f,t,-t); ezplot(y)
(3).尺度变换
连续信号的尺度变换, 是指将信号的横坐标进行展宽或压缩变换, 即将信号
f(t)中的自变量 t 换为 at,当 a>1 时,信号 f(at)以原点为基准, 沿横轴压缩到原来
的 1/a;当 0
function [f,k]=lsfz(f1,k1)
f=fliplr(f1);k=-fliplr(k1);
%调用此函数实现向量 f1 和 k1 的反折
stem(k,f,’filled ’)
axis([min(k)-1,max(k)+1,min(f)-0.5,max(f)+0.5])
2).离散序列的平移
离散序列的平移可看作是将离散序列的时间序号向量平移, 而表示对应时间
序号点的序列样值不变,当序列向左移动 k0 个单位时,所以时间序号向量都减
小 k0 个单位,反之则增加 k0 个单位。实现如下:
function [f,k]=lsyw(ff,kk,k0)
k=kk+k0;f=ff;
stem(k,f,’filled ’)
axis([min(k)-1,max(k)+1,min(f)-0.5,max(f)+0.5])
3).离散序列的倒相
离散序列的倒相可看作是将表示序列样值的向量取反, 而对应的时间序号向
量不变,得到的离散时间序列。实现如下:
function [f,k]=lsdx(ff,kk)
f=-ff;
k=kk;
stem(k,f,’filled ’)
axis([min(k)-1,max(k)+1,min(f)-0.5,max(f)+0.5])
这些时域变换, 我们可以把我们在第一节中描述过的信号带入其中, 来看看
信号时域变换的结果如何。 除此以外,我们通过时域变换也可以锻炼我们描述信
号的能力,一些复杂信号,往往都是一些简单信号经过一系列的时域变换得到。
前面的内容,其实是给以下的学习做的准备, 我们在了解如何描述信号以后,
接下来就只要把信号带入卷积运算中就可以了。
在 MATLAB 中,conv( )函数可以帮助我们快速求出两个离散序列的卷积和。
conv 函数的调用格式为: f=conv(f1,f2)
其中 f1 为包含序列 f1(k)的非零样值点的行向量, f2 为包含序列 f2(k)的非零
样值点的行向量,向量 f 则返回序列 f(k)=f1(k)* f2(k)的所有非零样值点行向量。
在求信号卷积之前,我们先来看看在 MATLAB 中 conv( )这个程序是如何来
实现的。我们可以通过看它的流程图来了解,流程图如图
3. 5 所示:
图 3. 5 conv( ) 函数流程图
由于 conv 是针对离散时间序列的函数,我们先从离散的信号入手 [12]。
1、离散时间信号的卷积
我们试举一例来看 conv 的功能,已知序列 f1(k)和 f2(k)如下所示:
f1(k)=1,(0≤k≤2)
f2(k)=k,(0 ≤k≤3)
则调用 conv( )函数求上述两序列的卷积和的 MATLAB 命令为:
f1=ones(1,3);
f2=0:3;
f=conv(f1,f2)
运行结果为: f=0 1 3 6 5 3
由这个例子可以看出,函数 conv( )不需要给定序列 f1(k)和 f2(k)非零样值点
的时间序号,也不返回序列 f(k)=f1(k)* f2(k)的非零样值点的时间序号。因此,要
正确地标识出函数 conv( )的计算结果向量 f,我们还必须构造序列 f1(k)、f2(k)及
f (k)的对应序号向量。我们可以看出 f(k)的序号向量 k 是由序列 f1(k)和 f2(k)的非
零样值点的起始序号及他们的时域宽度决定的。 在此,我们自己可以构造一个实
用一点的函数 dconv( ),该函数实现的功能为:可以在计算出卷积 f (k)的同时,
还可以绘出序列 f1(k)、f2(k)及 f (k)在时域内的波形图。并返回 f (k)的非零样值点
的对应向量。程序如下所示:
function [f,k]=dconv(f1,f2,k1,k2)
%the function of compute f=f1*f2
%f: 卷积序列 f(k) 对应的非零样值向量
%k: 序列 f(k) 的对因序号向量
%f1: 序列 f1(k) 非零样值向量
%f2: 序列 f2(k) 非零样值向量
%k1: 序列 f1(k) 的对应序号向量
%k2: 序列 f2(k) 的对应序号向量
f=conv(f1,f2)
k0=k1(1)+k2(1);
%计算序列 f1 与 f2 的卷积和 f
%计算序列 f 非零样值的起点位置
k3=length(f1)+length(f2)-2;
%计算卷积和 f 的非零样值的宽度
%确定卷积和 f 非零样值的序号向量
%在子图 1 绘序列 f1(k) 时域波形图
%在子图 2 绘序列 f2(k) 时波形图
k=k0:k0+k3
subplot(2,2,1)
stem(k1,f1)
title('f1(k)')
xlabel('k')
ylabel('f1(k)')
subplot(2,2,2)
stem(k2,f2)
title('f2(k)')
xlabel('k')
ylabel('f2(k)')
subplot(2,2,3)