一、实验目的 1. 掌握离散信号的时域特性。 2. 用 MATLAB 实现离散信号的各种运算。
二、实验原理及方法 在数字信号处理中,离散信号由序列表示,则离散信号的运算表现在序列上就是序列的各种运算,信号的基本运算包括加法、乘法、加权﹑移位、翻转、尺度变换、卷积等。设有两个序列 x1(n)和 x2(n): 1. 将两序列相加 x(n)= x1(n) x2 (n),在 MATLAB 中可用“ ”来实现,但是 x1(n)和 x2(n)的长度必须相同,如果序列长度不同,或者长度相同的序列而样本位置不同,也不能直接用算符 。首先必须对 x1(n)和 x2(n)扩大或延长以使它们具有相同位置的向量 n。此时可以用函数 sigadd 来实现。 2. 相乘 x(n)= x1(n)· x2 (n)可用“.*”实现,对 算符所加的限制同样对算符.*使用,此时用函数 sigmult 实现。 3. 加权在 MATLAB 中可用“*”来实现; 4. 移位在 MATLAB 中可用 y=sigshift(x,m,n0)来实现,其中n0 时所移动的位数。 5. 翻转 y(n)=x1(-n) 样本值可由函数 fliplr(x) 实现, 翻转序列 y(n) 可由函数 [y,n]=sigfold(x,n)实现。 6. 尺度变换可用类似于 y(n)=x(2n)的式子实现; 7. 卷积 y(n)= x1(n)*x2 (n)可由函数 y=conv(x,h)实现但conv 函数默认两个序列都是从 n=0 开始。其简单扩展 conv_m 能完成任意位置序列的卷积。(所使用的各种库函数见教材,可直接使用) 三、实验内容 1、先输入两个序列(长短不一),然后变成相同长度的序列,再分别实现相加和相乘。 1) 已知序列: x₁(n)= n² -n 0≤n≤10 x₂(n)=-n² n –5≤n≤15 用 MATLAB 编程计算 y₁=x₁(n) x ₂ (n) 并画出其序列波形。 2) 已知序列: x₁(n)=Sin(ω₀n) ω₀₌π/20, -20≤n≤20 x₂(n)=aⁿ a=1.05, -20≤n≤20 用 MATLAB 编程计算 y₁=x₁(n).*x ₂ (n)并画出其序列波形。
3)已知序列: x₁(n)=cos(ω₀n) ω₀₌π/20, -10≤n≤10 x₂(n)=(0.6) ⁿ -5≤n≤15 用 MATLAB 编程计算 y₁=x₁(n)*x ₂ (n)并画出其序列波形
参考流程图:
2、现该序列的翻转。 n 的范围=0:4 序列 x=[1 2 3 4 5] 四、实验报告要求 写出实验程序,绘出原序列及运算后序列的实验结果图形。并与自己数学运算的结果进行 比较,验证实验的准确性。
代码语言:javascript复制% paramete setting
clc;clear;
n=0:10;
x1=n.^2-n;
k=-5:15;
x2=-k.^2 k;
xx1=[zeros(1,(min(n)-min(k))) x1 zeros(1,(max(k)-max(n)))];
y=xx1 x2;
subplot(3,1,1)
plot(k,y);xlabel('index');ylabel('sum');
title('x1 x2')
% y=x1*x2 clear;
n=-20:20;
w=pi/20;
a=1.05;
x1=sin(w.*n);
x2=a.^n;
y=x1.*x2; subplot(3,1,2)
plot(n,y);xlabel('index');ylabel('mult');title('x1*x2');
% y=x1*x2
clear
n1=-10:10;
n2=-5:15;
w=pi/20;
a=0.6;
x1=sin(w.*n1);
x2=a.^n2;
q=max([min(n1),min(n2)]);
w=min([max(n1),max(n2)]);
y=x1((end-length(q:w) 1):end).*x2(1:length(q:w));
subplot(3,1,3)
plot(q:w,y);
xlabel('index');ylabel('mult');title('x1*x2')