加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Matlab 伪随机信号的产生(M序列)

(2012-10-27 22:08:32)
标签:

matlab

m序列

伪随机

simulink

脉冲响应

分类: 信号处理

这里主要介绍两种方法,一是使用m文件编辑,二是用simulink产生

一、用m文件编辑

Np=63;%循环周期
delta_T = 1;%时钟节拍
a=1;%幅度
%初始化M序列
M(1)=1;
M(2)=0;
M(3)=0;
M(4)=1;
M(5)=1;
M(6)=0;
M_XuLie(Np) = 0;
for n = 1 : Np
   temp = xor(M(6), M(5));
   if(temp == 0)
       M_XuLie(n) = a;
   else
       M_XuLie(n) = -a;
   end
    M(6) = M(5);
    M(5) = M(4);
    M(4) = M(3);
    M(3) = M(2);
    M(2) = M(1);
    M(1) = temp;
end
figure(4)
stairs(M_XuLie)

ylim([-2 2])

运行结果:

http://s15/middle/84024a4a4cd0af82c73de&690

说明:

1.原理:由于是用代码书写,可能原理表达不是很直观,后面会以仿真形式给出原理

2.周期:若有N个移位寄存器,那么周期为2^N-1

3.周期的延拓:

r = 3;  % 周期数
u=repmat(M_XuLie,1,r+1);%将M序列赋给输入,作为输入信号

二、使用simulink产生M序列

http://s1/middle/84024a4a4cd0af8383ac0&690

1 选6个移位寄存器,就是Z分之1那个 按顺序排列好,初始条件(initial conditions)全都设为1

2 先把这6个移位寄存器链接起来 第一个输出连第二个输入,以此类推到第六个接OUT,out这里再接一个scope以便观察信号波形或者接到工作空间(本例是接到工作空间中)。按照如下方法设置变量名和输出格式。

注意:尽量选矩阵形式输出,否则调用不方便。

http://s11/middle/84024a4a07ae77f37b5ea&690

3 选一个logical operator,并从设置中调成XOR,2输入端

4 继续连线

5 设置参数,主要是设置步长和总运行时间(点击菜单simulation-configuration parameters设置)

http://s13/middle/84024a4a4cd0af84f3c7c&690

6 点击运行 scope中显示的便是m序列!或者在命令行中输入stairs(M_seque)

运行结果:

http://s2/middle/84024a4a4cd0af87d6961&690

注:事实上,用这种方法在实际使用中存在一些问题,就是输出信号是bool型的,即是逻辑序列,无法作为传递函数的输入使用,如果是在m文件中可以通过double等方法进行转换,simulink应该是有方法转换的但还未做相关查询。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有