当前位置:首页 > 实验一 离散信号的时域运算与变换
数字信号处理实验指导书(第二版) 0
实验一 离散信号的时域运算与变换 1. 熟悉MATLAB编程特点
2. 了解离散序列的延迟、相加、相乘及平移、反折、及倒相变换
实验目的 实验内容 1.设计一个实现序列移位的函数 将序列x(n)={1,2,3,4,0,7},其中n=0:5的每一个样本都移动3个周期,移位后的序列y(n)=x(n-3)
2.序列的奇偶分解
将序列x(n)={0,1,2,3,4,3,2,1,0},其中n=-3:5进行奇偶分解
x(n)?xe(n)?xo(n),其中偶序列xe(n)?[x(n)?x(?n)]2,奇序列xo(n)?[x(n)?x(?n)]2
用函数stem显示其奇偶序列 3.序列的加法运算
x(n)?x1(n)+x2(n)设x1(n)={1,0.5,0.3,0.4}其中n=-1:2 ;x2(n)={0.2,0.3,0.4,0.5,0.8,1}其中n=-2:3
4.实现2中序列的翻转
y(n)?x(-n) 实验报告 1.列出本次实验编写的所有文件及各项实验结果的曲线,加注必要的说明 2.对本实验结果做理论计算,解释实验结果 3.总结实验体会及实验中存在的问题 思考: 1. 在matlab中应如何实现序列的相乘运算 2. 在matlab中应如何实现序列的倒相运算? 1. 实验原理:
数字信号处理实验指导书(第二版) 1
首先,在用MATLAB表示离散序列并将其可视化时,我们还应注意以下几点:
第一、离散时间序列无法用符号运算来表示,要用矩阵的形式;
第二、由于在MATLAB 中矩阵的元素个数有限,因此,MATLAB无法表示无限长的序列;
第三、在绘制离散信号波形的函数stem命令,而不是plot命令。
下面是MATLAB绘制单位抽样序列及其移位序列的函数,n0是单位抽样
n 1 ?n 0 ?序列的位移量,n1,n2是序列的起止时刻, n 2,调用该函数就可以绘出单位抽样序列及其移位序列的波形图。 function [x,n] = impuls (n0,n1,n2) % Generates x(n) = delta(n-n0); n=n0 处建立一个单位抽样序列 % [x,n] = impuls (n0,n1,n2) if ((n0 < n1) | (n0 > n2) | (n1 > n2)) error('arguments must satisfy n1 <= n0 <= n2') end n = [n1:n2]; x = [zeros(1,(n0-n1)), 1, zeros(1,(n2-n0))]; 将上述文件存为:impuls.m,在命令窗口输入 >>n0=1,n1=-20,n2=30; [x,n]=impuls (n0,n1,n2);figure(1),stem(n,x) 上图为右移了一个单位的单位抽样序列
其次,对于离散序列来说,序列相加、相乘是将两序列对应时间序号的值逐项相加或相乘,平移、反折、及倒相变换与连续信号的定义完全相同,但需要注意,与连续信号不同的是,在MATLAB中,离散序列的时域运算和变换不能用符号运算来实现,必须用向量表示的方法,即在MATLAB中离散序列的相加、相乘需表示成两个向量的相加、相乘,因而参加运算的两序列向量必须具有相同的维数。
? 在MATLAB中,用一个向量即可表示一个有限长度的序列。但是,这样的向量并没有包含对应的时间序号的信息。所以,要完整地表示离散信号要用两个向量
数字信号处理实验指导书(第二版) 2
? ? ? ? ? 如: 序列: f(k)={1,2,-1,3,4,5}
k=0 在MATLAB中应表示为: f=[1,2,-1,3,4,5] k=[-3,-2,-1,0,1,2]或是k=-3:2 2. MATLAB常用信号生成函数: ? ★ ZEROS ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
功能:产生全零阵列
调用格式:X=ZEROS (N) %产生N行N列的全零矩阵 X=ZEROS(M,N) %产生M行N列的全零矩阵 ★ ONES
功能:产生全1阵列
调用格式:X=ONES(N) %产生N行N列的全1矩阵 X=ONES(M,N) %产生M行N列的全1矩阵 ★ SINC
功能:辛格函数
调用格式:Y= SINC(X) % ★ RECTPULS
功能:产生矩形脉冲信号
调用格式:Y= RECTPULS (T) %产生高度为1、宽度为1、关于T=0对称的矩形脉冲
Y= RECTPULS (T,W) %产生高度为1、宽度为W、关于T=0对称的矩形脉冲 ★ RAND
功能:产生伪随机序列
调用格式:Y= RAND (1,N) %产生[0,1]上均匀分布的随机序列 Y= RANDN (1,N) %产生均值为0,方差为1的白噪声序列 ★ SAWTOOTH
功能:产生周期锯齿波或三角波
调用格式:Y= SAWTOOTH (T) %产生幅值为+1,-1,以2为周期的方波
Y=SAWTOOTH(T,WIDTH)% 产生幅值为+1,-1,以WIDTH *2为周期的方波 ★ SQUARE 功能:产生方波
调用格式:Y= SQUARE (T) %产生幅值为+1,-1,以2为周期的锯
数字信号处理实验指导书(第二版) 3
? ? ? ? ? ? ? ? ? ? ?
齿波
Y= SQUARE(T,DUTY) % 产生幅值为+1,-1,以占空比为DUTY的方波
例: t = 0:.0001:.0625;
y = SQUARE(2*pi*30*t,80); plot(t,y)%产生一个占空比为80%的方波 ★ FLIPLR
功能: 序列左右翻转 调用格式:Y = FLIPLR(X) % X = 1 2 3 翻转后 3 2 1 4 5 6 6 5 4 ★ CUMSUM 、SUM 功能: 计算序列累加
调用格式:Y = CUMSUM(X) % 向量X元素累加,记录每一次的累加结果,而SUM只记录最后的结果
(1)实现序列移位的函数 ? function [y,n] = segshift(x,n,n0) ? % 功能 y(n) = x(n-n0) ? % [y,n] = segshift(x,n,n0) ? n = n+n0; y = x;
(2)实现两序列相加 ? function [y,n] = sigadd(x1,n1,x2,n2) ? % 实现 y(n) = x1(n)+x2(n) ? % ----------------------------- ? % [y,n] = sigadd(x1,n1,x2,n2) ? % y = 在包含n1 和 n2 的n点上求序列和, ? % x1 = 在 n1上的第一序列 ? % x2 = 在 n2上的第二序列(n2可与 n1不等) ? n = min(min(n1),min(n2)):max(max(n1),max(n2)); % y(n)的长度 ? y1 = zeros(1,length(n)); y2 = y1; % 初始化 ? y1(find((n>=min(n1))&(n<=max(n1))==1))=x1; % 具有y的长度的 x1 ? y2(find((n>=min(n2))&(n<=max(n2))==1))=x2; % 具有y的长度的x2 ? y = y1+y2; % 序列相加.
3. 参考程序
共分享92篇相关文档