【 MATLAB 】基本序列运算及其MATLAB的等效表示
本博文介绍几种基本序列运算的MATLAB函数表示,之后通过实例调用这些函数实现序列的基本运算。
目录
1. 信号相加
2. 信号相乘
3. 信号翻转
4. 加权(乘以常数)
5. 移位
6. 样本累加
7. 样本乘积
8. 信号能量
9. 信号功率
1. 信号相加
这是一个样本对样本的相加。表示式为:
注意:序列的位置要对应,长度要相等,如果长度不等,则要扩大或延长使长度相等且位置对应。
对应的函数为:
function [y,n] = sigadd(x1,n1,x2,n2)
% implements y(n) = x1(n) + x2(n)
% [y,n] = sigadd(x1,n1,x2,n2)
%——————————————————————————————
% y = sum sequence over n, which includes n1 and n2
% x1 = first sequence over n1
% x2 = second sequence over n2( n2 can be different from n1)
%
n = min( min(n1), min(n2) ):max( max(n1), max(n2) ); %duration of y(n)
y1 = zeros(1,length(n)); y2 = y1; %initialization
y1( find( ( n >= min(n1) )&( n <= max(n1) ) == 1 ) ) = x1; %x1 with duration of y1
y2( find( ( n >= min(n2) )&( n <= max(n2) ) == 1 ) ) = x1; %x2 with duration of y2
y = y1 + y2;
代码中用到了find线性索引函数,不了解的话可以参考博文:【 MATLAB 】find 函数的使用(线性索引)
2. 信号相乘
这是一个样本对样本的相乘(或称为点乘‘.*’),表示式为:
对+运算符所有的限制同样对.*运算符适用。
下面直接给出函数:
function [y,n] = sigmult(x1,n1,x2,n2)
% implements y(n) = x1(n)* x2(n)
%[y,n]=sigmult(x1,n1,x2,n2)
%_____________________________
% y = product sequence over n, which includes n1 and n2
% x1 = first sequence over n1
% x2 = second sequence over n2( n2 can be different from n1)
%
n = min( min(n1), min(n2) ):max( max(n1), max(n2) ); %duration of y(n)
y1 = zeros(1,length(n)); y2 = y1; %initialization
y1( find( ( n >= min(n1) )&( n <= max(n1) ) == 1 ) ) = x1; %x1 with duration of y1
y2( find( ( n >= min(n2) )&( n <= max(n2) ) == 1 ) ) = x2; %x2 with duration of y2
y = y1 .* y2;
3. 信号翻转
在MATLAB中,这个运算对样本值用函数fliplr(x)实现,对样本位置通过函数-fliplr(n)实现,函数如下:
function [y,n] = sigfold(x,n)
%implements y(n) = x(-n)
%___________________________
% [y,n] = sigfold(x,n)
y = fliplr(x);
n = -fliplr(n);
不了解fliplr(x)的话,看博文:【 MATLAB 】fliplr 函数介绍(从左到右翻转阵列)
4. 加权(乘以常数)
a{ x(n) } = { a* x(n) }
在MATLAB中,直接使用*运算符就可以了。
5. 移位
关于移位,我单独写了一篇博文:
【 MATLAB 】序列运算之序列移位的函数实现
6. 样本累加
样本累加区别于信号相加,它是将该序列的样本值全部加起来,使用 sum( x(n1:n2) )函数来实现。
7. 样本乘积
样本乘积有别于信号相乘,它是将该序列的样本值连乘得到,使用函数 prod( x(n1:n2) )即可实现。
prod函数的相关知识,见博文:【 MATLAB 】prod 函数介绍(Product of array elements)
8. 信号能量
一个序列的能量有下式给出:
下面给出两种方法计算信号能量:
Ex = sum( x.* conj(x) ) % one approach
Ex = sum( abs(x) .^2 ) % another approach
9. 信号功率
基波周期为N的周期序列 的平均功率给出为:
相应的MATLAB代码为:
P=(1/N)sum( abs( x(1:N-1) ).^2 )
实例解析
令
,
确定并画出下列序列:
a.
b.
题解:
clc
clear
close all%generate x(n)
n = [-2:10];
x = [1:7,6:-1:1];subplot(3,1,1)
stem(n,x);
title('original sequence');
xlabel('n');ylabel('x(n)');%x1(n)=2x(n-5)-3x(n+4)
[x11,n11]= sigshift(x,n,5);
[x12,n12]= sigshift(x,n,-4);
[x1,n1] = sigadd(2*x11, n11, -3*x12, n12);subplot(3,1,2)
stem(n1,x1);
title('sequence in example a');
xlabel('n');ylabel('x1(n)');%x2(n) = x(3-n) + x(n)x(n-2)
[x21,n21]=sigfold(x,n);
[x21,n21] = sigshift(x21,n21,3);[x22,n22] = sigshift(x,n,2);
[x22,n22] = sigmult(x22,n22,x,n);[x2,n2] = sigadd(x21,n21,x22,n22);subplot(3,1,3);
stem(n2,x2);
title('sequence in example b');
xlabel('n');ylabel('x2(n)');
【 MATLAB 】基本序列运算及其MATLAB的等效表示相关推荐
- matlab m序列扩频,基于matlab的移位寄存器法m序列的产生
描述 扩频通信是在民用和军用都有广泛应用的一种通信技术,自从其诞生就受到了广泛关注. 扩频通信中频谱的扩展是通过一个独立的伪随机序列来完成的. 其中 m 序列是最常用的一种伪随机码,本文在 matla ...
- 【 MATLAB 】序列运算之序列移位的函数实现
这种运算有点理解,反正我是觉得有点绕,所以单独拿出来,表示注重. 在这种运算中,x(n)的每个样本都要移位一个量k得到一个移位的序列y(n). 如果令m=n-k,那么n = m + k,上面运算给出为 ...
- 基于MATLAB完成卷积运算,基于Matlab的离散卷积
基于Matlab 的离散卷积 刘国良 (洛阳理工学院 河南洛阳 471000) 摘 要:卷积运算广泛用于通讯.电子.自动化等领域的线性系统的仿真.分析及数字信号处理等方面.在Matlab 中可以使用线 ...
- matlab 异或运算符号,MATLAB运算符
算术运算符 逻辑运算符 关系运算符 位运算 集合运算 算术运算符 MATLAB 的工作针对的是整个矩阵和阵列,它允许两种不同类型的算术运算:矩阵算术运算 阵列算术运算 矩阵的算术运算是线性代数中的定义 ...
- matlab 高斯序列,如何用MATLAB产生高斯随机序列
MATLAB命令是normrnd 功能:生成服从正态分布的随机数列,也就是你需要的高斯随机序列 >> help normrnd NORMRND Random arrays from the ...
- 【 MATLAB 】两个序列的卷积和运算的MATLAB实现(1)
设矩形脉冲 是脉冲响应 的LTI系统的输入,求输出 y(n). 下面的脚本中用到了一个自定义的函数,也就是两个信号相加的函数: 相关博文:[ MATLAB ]基本序列运算及其MATLAB的等效表示 ...
- 【 MATLAB 】序列的奇偶分解的 MATLAB 函数编写实践
序列 x(n)的奇偶分解的公式为: 编写一个序列 x(n) 的奇偶分解式 xe(n) 和 xo(n),需要考虑的问题是序列长度,下标的变化. 这里必须做个声明,下面的程序中用到了前几篇博客中的几个函数 ...
- 【 MATLAB 】两个序列的卷积和运算的MATLAB实现(2)
已知下面两个序列: 求这两个序列的卷积. 求卷积的函数是conv,但是使用这个函数有个问题,就是下标问题,也就是求卷积之后的元素值的位置.因此,我们必须要定一个起始点和一个结束点. 方法: 是两个有限 ...
- MATLAB程序设计教程(2)——MATLAB矩阵及其运算
第2章 MATLAB矩阵及其运算 2.1 变量和数据操作 2.2 MATLAB矩阵 2.3 MATLAB运算 2.4 矩阵分析 2.5 矩阵的超越函数 2.6 字符串 2.7 结构数据 ...
最新文章
- 使用 $.grep() 方法
- windows下用GCC编译DLL
- 【jzoj3734,Usaco2014Open银组】双导航(gpsdual)
- fetch 不是xhr_春招|前端2019应届春招:不是被大厂选,而是选大厂(字节跳动,美团,网易)...
- python 怎么表示sqlserver null_如何使用Python将sqlserver查询输出写入.txt文件?
- C++类构造函数与析构函数
- Mybatis的数据库连接池
- autohold有什么弊端吗_自动驻车AUTO HOLD有啥作用?怎样使用?
- C#中如何截取Windows消息来触发自定义事件
- ibatis基础(五):删除指定id的单个对象
- 萦绕在头脑中的思路_我的编程梦们 【更新至2010.06.03】
- hallo world
- python名字排序_python 中文排序(按拼音)
- win10电脑右键视频或者图片文件卡死
- 英特尔核显驱动hd630_英特尔首款独显Xe Max 评测出炉:低于移动端 GTX 1050 Ti
- lack名词形式_lack是什么意思_lack的翻译_音标_读音_用法_例句_爱词霸在线词典
- [新手教程]如何使用 AirDrop 发送文件
- ReactNative 深层连结
- 【Havel 定理】Degree Sequence of Graph G
- LVGL lv_line线条(15)
热门文章
- 【笔记】C++ 简化位图图像操作
- vsftpd安装及虚拟用户认证
- 新时代网管的十二大主要职责(一)
- html照片4张 9张布局,css实现朋友圈照片排列布局
- 学完python基础开始学爬虫_零基础入门Python爬虫不知道怎么学?这是入门的完整教程...
- php嵌套模板,thinkphp3.1自定义模板标签嵌套实现
- java nio channel原理_Java NIO 选择器(Selector)与通道(Channel) 原理 | 学步园
- java 遇到的问题_Java常见问题汇总(一)
- openssh漏洞_漏洞预警 | OpenSSH 命令注入漏洞
- python实现远程登录_python远程登录代码