离散信号运算的MATLAB 实现

2022-07-20 14:21:25 浏览数 (1)

一、实验目的 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')

0 人点赞