【 MATLAB 】基本序列运算及其MATLAB的等效表示
本博文介绍几种基本序列运算的MATLAB函数表示,之后通过实例调用这些函数实现序列的基本运算。
目录
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. 移位
关于移位,我单独写了一篇博文:
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)');
文章来源: reborn.blog.csdn.net,作者:李锐博恩,版权归原作者所有,如需转载,请联系作者。
原文链接:reborn.blog.csdn.net/article/details/83268763
- 点赞
- 收藏
- 关注作者
评论(0)