赞
踩
在使用matlab的时候,可以很方便的表示二进制的序列或者其他形式的数字信号。用一个行向量表示即可。
但是有时候需要对数字信号的时域波形进行某些操作,例如对时域信号进行调制。将正弦波和一个向量相乘是不现实的,因此本文讲说明如何将matlab中的向量恢复成细小的采样点组成的函数采样序列
写贴上整个的代码
- %用来产生二进制码的波形
-
- %待转换的二进制序列
- x=round(rand(1,20));%用对随机数取整数的方法产生二进制序列,也可以是其它需要的序列
-
- %基本设定
- codeN=length(x);%码元个数
- codeTap=1;%每个码元的时间
- sampRate=50;%每个码元时间内有多少个取样点
- sampTime=codeTap/sampRate;%取样周期内每个取样点的时间间隔
-
- startTime=0;%信号开始的设定时间
- tCir=0:sampTime:codeTap-sampTime;%每个码元的时间范围
- t=startTime:sampTime:codeTap*codeN-sampTime;%最终输出结果的时间范围
-
- %设定码元和波形的对应关系,可以是需要的波形直接的01码
- x0=zeros(1,length(tCir));%码元为0时对应的波形
- x1=ones(1,length(tCir));%码元为1时对应的波形
- xDirection=[x0;x1];%波形的查询列表,用于在迭代时进行查询
-
- %得到输出波形
- y=[];%输出信号的初始化
- for i=x%对进制码进行迭代
- y=cat(2,y,xDirection(i+1,:));
- end
-
- plot(t,y);
输出波形如图
脚本前面的相关参数设定可以需要更改,也可以选择合适的输入输出变量变成一个需要的函数。
脚本中的xDirection变量可以扩展成不同的维度,适应不同的进制数,例如对于四进制的情况,可以把查询列表部分的代码改成这样:
- %待转换的二进制序列
- x=round(3*rand(1,20));%用对随机数取整数的方法产生二进制序列,也可以是其它需要的序列
-
-
- %设定码元和波形的对应关系,可以是需要的波形或直接的01码
- x0=zeros(1,length(tCir));%码元为0时对应的波形
- x1=ones(1,length(tCir));%码元为1时对应的波形
- x2=2*ones(1,length(tCir));%码元为2时对应的波形
- x3=3*ones(1,length(tCir));%码元为3时对应的波形
- xDirection=[x0;x1;x2;x3];%波形的查询列表,用于在迭代时进行查询
相应地波形如图
因为代码的结构设定,波形查询列表可以不是单纯的恒定值,也可以在产生波形的过程中直接完成调制的功能。例如将查询部分的代码改写成
- %设定码元和波形的对应关系,可以是需要的波形或直接的01码
- x0=cos(2*pi*codeTap*tCir);%码元为0时对应的波形
- x1=cos(6*2*pi*codeTap*tCir);%码元为1时对应的波形
- xDirection=[x0;x1];
从而完成了2FSK调制,波形如图所示
算法不完善的方面
最终生成信号的时候采用了迭代方法,并且迭代过程中对矩阵的大小进行了多次改写,运行速度较慢。因此烦请大佬指出是否有更优的解决方案。感谢提出指正。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。