【 MATLAB 】基本序列运算及其MATLAB的等效表示

举报
李锐博恩 发表于 2021/07/15 06:20:13 2021/07/15
【摘要】 本博文介绍几种基本序列运算的MATLAB函数表示,之后通过实例调用这些函数实现序列的基本运算。 目录 1. 信号相加 2. 信号相乘 3. 信号翻转 4. 加权(乘以常数) 5. 移位 6. 样本累加 7. 样本乘积 8. 信号能量 9. 信号功率 1. 信号相加 这是一个样本对样本的相加。表示式为: 注意:序列的位置要对应...

本博文介绍几种基本序列运算的MATLAB函数表示,之后通过实例调用这些函数实现序列的基本运算。

目录

1. 信号相加

2. 信号相乘

3. 信号翻转

4. 加权(乘以常数)

5. 移位

6. 样本累加

7. 样本乘积

8. 信号能量

9. 信号功率


1. 信号相加

这是一个样本对样本的相加。表示式为:

\left \{ x_1(n) \right \}+\left \{ x_2(n) \right \} = \left \{ x_1(n)+x_2(n) \right \}

注意:序列的位置要对应,长度要相等,如果长度不等,则要扩大或延长使长度相等且位置对应。

对应的函数为:


  
  1. function [y,n] = sigadd(x1,n1,x2,n2)
  2. % implements y(n) = x1(n) + x2(n)
  3. % [y,n] = sigadd(x1,n1,x2,n2)
  4. %——————————————————————————————
  5. % y = sum sequence over n, which includes n1 and n2
  6. % x1 = first sequence over n1
  7. % x2 = second sequence over n2( n2 can be different from n1)
  8. %
  9. n = min( min(n1), min(n2) ):max( max(n1), max(n2) ); %duration of y(n)
  10. y1 = zeros(1,length(n)); y2 = y1; %initialization
  11. y1( find( ( n >= min(n1) )&( n <= max(n1) ) == 1 ) ) = x1; %x1 with duration of y1
  12. y2( find( ( n >= min(n2) )&( n <= max(n2) ) == 1 ) ) = x1; %x2 with duration of y2
  13. y = y1 + y2;

代码中用到了find线性索引函数,不了解的话可以参考博文:【 MATLAB 】find 函数的使用(线性索引)

2. 信号相乘

这是一个样本对样本的相乘(或称为点乘‘.*’),表示式为:

\left \{ x_1(n) \right \}\cdot \left \{ x_2(n) \right \} = \left \{ x_1(n)\cdot x_2(n) \right \}

对+运算符所有的限制同样对.*运算符适用。

下面直接给出函数:


  
  1. function [y,n] = sigmult(x1,n1,x2,n2)
  2. % implements y(n) = x1(n)* x2(n)
  3. %[y,n]=sigmult(x1,n1,x2,n2)
  4. %_____________________________
  5. % y = product sequence over n, which includes n1 and n2
  6. % x1 = first sequence over n1
  7. % x2 = second sequence over n2( n2 can be different from n1)
  8. %
  9. n = min( min(n1), min(n2) ):max( max(n1), max(n2) ); %duration of y(n)
  10. y1 = zeros(1,length(n)); y2 = y1; %initialization
  11. y1( find( ( n >= min(n1) )&( n <= max(n1) ) == 1 ) ) = x1; %x1 with duration of y1
  12. y2( find( ( n >= min(n2) )&( n <= max(n2) ) == 1 ) ) = x2; %x2 with duration of y2
  13. y = y1 .* y2;

3. 信号翻转

y(n)= x(-n)

在MATLAB中,这个运算对样本值用函数fliplr(x)实现,对样本位置通过函数-fliplr(n)实现,函数如下:


  
  1. function [y,n] = sigfold(x,n)
  2. %implements y(n) = x(-n)
  3. %___________________________
  4. % [y,n] = sigfold(x,n)
  5. y = fliplr(x);
  6. 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. 信号能量

一个序列的能量有下式给出:

\varepsilon _x=\sum_{n=n1}^{n2}x(n)x^*(n)=\sum_{n=n1}^{n2}\left | x(n) \right |^2

下面给出两种方法计算信号能量:


  
  1. Ex = sum( x.* conj(x) ) % one approach
  2. Ex = sum( abs(x) .^2 ) % another approach

9. 信号功率

基波周期为N的周期序列 \tilde{x}(n) 的平均功率给出为:

P_x=\frac{1}{N} \sum_{0}^{N-1}\left | \tilde{x}(n) \right |^2

相应的MATLAB代码为:

P=(1/N)sum( abs( x(1:N-1) ).^2 )
 

实例解析

x(n) = \left \{1,2,\underset{\wedge }{3},4,5,6,7,6,5,4,3,2,1 \right \},

确定并画出下列序列:

a. 

x_1(n)=2x(n-5)-3x(n+4)

b.

x_2(n) = x(3-n)+x(n)x(n-2)

题解:


  
  1. clc
  2. clear
  3. close all
  4. %generate x(n)
  5. n = [-2:10];
  6. x = [1:7,6:-1:1];
  7. subplot(3,1,1)
  8. stem(n,x);
  9. title('original sequence');
  10. xlabel('n');ylabel('x(n)');
  11. %x1(n)=2x(n-5)-3x(n+4)
  12. [x11,n11]= sigshift(x,n,5);
  13. [x12,n12]= sigshift(x,n,-4);
  14. [x1,n1] = sigadd(2*x11, n11, -3*x12, n12);
  15. subplot(3,1,2)
  16. stem(n1,x1);
  17. title('sequence in example a');
  18. xlabel('n');ylabel('x1(n)');
  19. %x2(n) = x(3-n) + x(n)x(n-2)
  20. [x21,n21]=sigfold(x,n);
  21. [x21,n21] = sigshift(x21,n21,3);
  22. [x22,n22] = sigshift(x,n,2);
  23. [x22,n22] = sigmult(x22,n22,x,n);
  24. [x2,n2] = sigadd(x21,n21,x22,n22);
  25. subplot(3,1,3);
  26. stem(n2,x2);
  27. title('sequence in example b');
  28. xlabel('n');ylabel('x2(n)');

 

 

 

 

 

文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。

原文链接:reborn.blog.csdn.net/article/details/83268763

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。