114python之家

您现在的位置是:首页 > python > 正文

python

信号处理第一式——离散信号序列的基本运算及MATLAB实现

admin2021-02-06python186
【114python之家】离散时间信号——序列的基本运算及matlab实现文章目录离散时间信号——序列的基本运算及matlab实现前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言

离散时间信号——序列的基本运算及matlab实现

文章目录

  • 离散时间信号——序列的基本运算及matlab实现
  • 前言
  • 一、什么是离散时间信号?
    • 1、离散时间信号
    • 2、数字信号处理系统
  • 二、序列的基本运算
    • 1.序列相加
    • 2.序列相乘
    • 3、序列倍率
    • 4、序列移位
    • 5、序列折叠
  • 总结

前言

本篇文章主要介绍数字信号处理内容中的离散信号序列的基本运算,如:序列相加、序列相乘、倍率、移位、折叠、样本和等内容及matlab代码的实现。

提示:以下是本篇文章正文内容,下面MATLAB已亲测有效

一、什么是离散时间信号?

1、离散时间信号

信号可分为模拟信号和数字信号。模拟信号可表示为x(t),表示连续时间,,例如生活中的声音信号。而数字信号可以用x(n)来表示,代表时间的离散时刻,因此也称为离散时间信号,它的表示方法是一个有序的数字序列。
离散时间信号:时间为离散变量,幅度为连续变化的变量。

2、数字信号处理系统

数字信号处理系统基本由以下部分组成:前端模拟信号接收装置、抗混叠滤波、A/D转换装置、数字信号处理模块(DSP)、D/A转换装置、平滑滤波组成。

信号处理第一式——离散信号序列的基本运算及MATLAB实现 python 第1张

二、序列的基本运算

1.序列相加

序列相加是一个对应样本与样本之间的相加。
自定义sigadd函数演示运算:

function[y,n]=sigadd(x1,n1,x2,n2)
%实现序列相加
%实现y(n)=x1(n)+x2(n)
%[y,n]=sigadd(x1,n1,x2,n2)
n=min(min(n1),min(n2)):max(max(n1),max(n2));
y1=zeros(1,length(n));
y2=y1;

y1(find((n>=min(n1))&(n<=max(n1))==1))=x1;
y2(find((n>=min(n2))&(n<=max(n2))==1))=x2;

y=y1+y2;

end

调用该函数

n1=[0123];
x1=[1234];

n2=[2345];
x2=[1234];

subplot(131);
stem(n1,x1);
axis([-15,05]);
title('x1序列');

subplot(132);
stem(n2,x2);
axis([-16,05]);
title('x2序列');

[y,n]=sigadd(x1,n1,x2,n2);

subplot(133);
stem(n,y);
axis([-16,08]);
title('相加后序列');

结果是正确的
信号处理第一式——离散信号序列的基本运算及MATLAB实现 python 第2张

2.序列相乘

序列相乘是对应采样点之间的相乘(点乘)
自定义sigmuti函数演示运算:

function[y,n]=sigmuti(x1,n1,x2,n2)
%实现y(n)=x1(n)*x2(n)
%[y,n]=sigmuti(x1,n1,x2,n2)
n=min(min(n1),min(n2)):max(max(n1),max(n2));
y1=zeros(1,length(n));
y2=y1;

y1(find((n>=min(n1))&(n<=max(n1))==1))=x1;
y2(find((n>=min(n2))&(n<=max(n2))==1))=x2;

y=y1.*y2;
end


调用该函数

n1=[0123];
x1=[1234];

n2=[2345];
x2=[1234];

subplot(131);
stem(n1,x1);
axis([-15,05]);
title('x1序列');

subplot(132);
stem(n2,x2);
axis([-16,05]);
title('x2序列');

[y,n]=sigmuti(x1,n1,x2,n2);

subplot(133);
stem(n,y);
axis([-16,010]);
title('相乘后序列');

结果图
信号处理第一式——离散信号序列的基本运算及MATLAB实现 python 第3张

3、序列倍率

这个运算很简单,每一个采样值都乘以倍数a就可以了。
自定义sigdouble函数演示运算:

function[y,n]=sigdouble(x1,n1,a)
%sigdouble序列倍率
%在此运算中,
%每个采样值乘以一个常数a。
%a{x(n)}={ax(n)}
%在MATLAB中可用算术运算符“*”来实现倍率运算。
n=n1;
y=a*x1;
end

调用运行

n1=[0123];
x1=[1234];
a=3;%倍率
[y,n]=sigdouble(x1,n1,a);
subplot(121);
stem(n1,x1);
axis([-15,05]);
title('x1序列');

subplot(122);
stem(n,y);
axis([-15,013]);
title('倍率后序列');

结果图
信号处理第一式——离散信号序列的基本运算及MATLAB实现 python 第4张

4、序列移位

通过移位运算,每个采样值都向右移动k个单位(k正为右,负为左)。
移位后:y(n)={x(n-k)}
自定义sigfold函数演示运算:

function[y,n]=sigshift(x,m,n0)
%实现y(n)=x(n-n0)
%移位--在此运算中,x(n)的每一个样本都移动n0个周期,移位后的序列y(n)如下。

n=m+n0;
y=x;


end

调用运行:

n1=[0123];
x1=[1234];
a=-3;%向左平移3个单位
[y,n]=sigshift(x1,n1,a);
subplot(121);
stem(n1,x1);
axis([-44,05]);
title('x1序列');

subplot(122);
stem(n,y);
axis([-44,05]);
title('移位后序列');

结果图:
信号处理第一式——离散信号序列的基本运算及MATLAB实现 python 第5张

5、序列折叠

通过折叠运算,使得采样值每个样本按照n=0翻转
自定义sigfold函数演示运行:

function[y,n]=sigfold(x,n0)
%序列折叠运算
%在此运算中,x(n)的每个样本都对n=o翻转,得到一个折叠后的序列y(n)
%y(n)={x(-n)}
y=fliplr(x);
n=-max(n0):-min(n0);

end

调用运行:

n1=[0123];
x1=[1234];
[y,n]=sigfold(x1,n1);
subplot(121);
stem(n1,x1);
axis([-44,05]);
title('x1序列');

subplot(122);
stem(n,y);
axis([-44,05]);
title('折叠后序列');

结果图:
信号处理第一式——离散信号序列的基本运算及MATLAB实现 python 第6张

总结

至此,序列的基本运算就介绍完了。往后我会持续更新信号处理的其他内容,欢迎志同道合的同仁批评指正,一起探讨经验。
QQ:2395277840
作者:草莓味的徐大力

扫描关注公众号,第一时间获取网站更新动态

转载请说明来源于"114python之家"

本文地址:http://www.114python.com/post/9596.html

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~