MATLAB中命令x=x( : )是什么意思

MATLAB中命令x=x( : )是什么意思 :

最近用matlab发现总是用不好冒号,感觉可能是理解得不是很好,记录一下最近学到的东西


问题描述:

以emframe函数举例,函数中第二行就出现了x(:)。

function f=enframe(x,win,inc)%定义函数。

nx=length(x(:)); 

nwin=length(win);

if (nwin == 1)

len = win; %如果win中就一个数,则len就=该数,此例中为256个点。即每帧长

else

len = nwin; %如果有多个数,则len=个数。

end

if (nargin < 3) % nargin返回的是函数输入的个数,如果中间有变量,返回的是负值。

inc = len; %也就是说,如果函数enframe的输入只有两个的话,系统就自动赋inc

end

nf = fix((nx-len+inc)/inc);

f=zeros(nf,len); %构成以组数为行,帧长为列的矩阵。

indf= inc*(0:(nf-1)).'; %indf为一列nf个数据,即0到nf-1的inc倍,即分好了每幀起点。

inds = (1:len); %构成了长度为len的一行。

f(:) = x(indf(:,ones(1,len))+inds(ones(nf,1),:));

if (nwin > 1) %nwin大于1的情况就不说了。

w = win(:)';

f = f .* w(ones(nf,1),:);

end

原理分析:

程序中使用x(:)是为了将信号转换为一段连续的向量。
在这里插入图片描述

图为matlab工作区中的信号变量,其中从上到下的坐标相当于x轴,从左到右的可以看成y轴。

而x(:)取的这一列数据就相当于按时间轴x依次取值,length(x(: ))则是取信号中的数据个数。而且在取值时,若信号是矩阵,则把x矩阵按列拆分后纵向排列成一个大的列向量;若信号是行向量,则相当于转置;若信号是列向量则不变。

(但是取信号如果为立体声可以考虑使用x(:,1)只取第一列,即只取单通道来计算)


  • 14
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值