美文网首页技术浪潮@IT·互联网
基于matlab下的m序列波形产生

基于matlab下的m序列波形产生

作者: 荻确如此 | 来源:发表于2017-07-12 18:06 被阅读385次

在通信系统中的随机噪声会使模拟信号产生失真,是数字信号产生误码,并且他还是限制信道容量的一个重要因素。因此,人们经常希望消除或减少通信系统中的随机噪声。

但是,有时候人们会希望获得随机噪声。比如,在实验室对通信设备或系统性能进行测试,可能要故意加入一定的噪声。又比如在战争通信中,实现高保密的通信,也希望利用随机噪声来迷惑敌方。

那么就来了一个名字“伪随机序列”,他具有类似于随机噪声的某些统计特性,同时又能够重复产生。所以运用广泛,今天来讲讲m序列。

m序列是最长线性反馈移位寄存器序列的简称。它是由带线性反馈的移存器产生的周期最长的序列。

m序列的产生

从上图可以看出,先设置初始状态,之后根据框图的原型来进行移位,进行mod2运算。这样最后移位15次后又回到初始状态(1,0,0,0)。所以除了全零状态,一共可以用15种。

一般来说,一个n级线性反馈移存器可能产生的最长周期等于2^n-1

线性反馈移位寄存器原理方框图

接下来是matlab代码

close all; clear all; clc;
fb=200000;
upsample_NUM=20;  %每个符号的采样点数目
BIT_NUM=520;
load RC_LPF.mat;

close all为关闭所有窗口,clear all为清除所有变量,clc清除命令

这里加载了一个LPF文件。

下面的公式可以作为依据直接产生m序列:

image.png
%产生m序列
%m序列本原多项式:x^3+x+1, x^4+x+1, x^5+x^2+1,x^6+x+1, x^7+x^3+1
% g3=[0 1 1];
% g4=[0 0 1 1];
% g5=[0 0 1 0 1];
% g6=[0 0 0 0 1 1];
% g7=[0 0 0 1 0 0 1];
g8=[0 0 0 1 1 1 0 1];

这里的要求是2的8次方的m序列,所以m的本原多项式可以得出。g8为特征多项式表示的数组模式,就相当于反馈系数cof,注意一开头的都是0;

%下面产生m=8的序列
m=length(g8);
N=2^m-1;
register=[zeros(1,m-1) 1];  %移位寄存器的初始状态
new_register=zeros(1,m);
m_seq_out8=zeros(1,N+1);
m_seq_out8(1)=register(m);
for i=2:N
    new_register(1)=mod(sum(g8.*register),2); %移存器与反馈系数进行模2加,更新移存器第1个数
    for j=2:m
        new_register(j)=register(j-1); %更新移存器其他数
    end
    register=new_register;
    m_seq_out8(i)=register(m);  %输出
end
m_seq_out9=2*m_seq_out8-1;  %双极性变换
seq_byte=zeros(1,32);  %32字节,每个字节8bit,m序列被存放在该32字节中

产生m=8的序列,当然N=2^m-1,这是最长周期,设置移位寄存器的初始状态,m-1列的0,最后是1,应该是[00000001],即a7为1,其他为0.。

接下来的循环语句就是更新移存器,定义了新的变量new_register保存新的数据,最后返还给register。最后m序列数据都被存在32个字节中。

for i=1:32
    for j=1:8
        seq_byte(i)=seq_byte(i)*2;
        if m_seq_out8((i-1)*8+j)==1
            seq_byte(i)=seq_byte(i)+1;
        end
    end
end

data1=zeros(1,20*length(m_seq_out9));  %将采样率扩展20倍,每个bit对应20个样值
for i=1:length(m_seq_out9)
    for j=1:20
        data1(20*(i-1)+j)=m_seq_out9(i);
    end
end
data2=[data1,data1,data1,data1];
data3=convn(data2,LPF1);  %LPF1为低通滤波器,对应抽样率为(20*200KSPS=4 MSPS)
i=1:length(data3);
figure;
plot(i,data3);

接下来的语法嵌套for循环,最后将data和LPF进行卷积,也就是说在频域进行相乘,这时候会出现“吉布斯”效应,就是低通滤波器产生的峰值谷值会比一跌个8.5%左右,所以产生了这样的波形。

仿真波形

这样就产生了想要的波形~

把需要的语法熟悉,matlab和c语言语法很相似。任何模型都是需要算法作为基础的,好好学习,加油

相关文章

  • 基于matlab下的m序列波形产生

    在通信系统中的随机噪声会使模拟信号产生失真,是数字信号产生误码,并且他还是限制信道容量的一个重要因素。因此,人们经...

  • matlab序列产生

    基本方法和基本序列 1:5和1:5.1都产生如下序列,即默认步长为1 1:2:5和1:2:6设置了步长,产生序列如...

  • 测周法实现位同步时钟的提取

    1、M序列产生电路 M序列产生以移位寄存器为基础,每次输出移位寄存器的最后一位,并更新数值,从而形成伪随机序列。

  • matlab下,rosbag文件读取

    matlab下,rosbag文件读取: filepath=fullfile('F:','LeonFiles','M...

  • 数字图像处理实验2:差分方程求解

    1.建立线性时不变离散系统的差分方程和系统输入序列的数学模型,产生输入序列; 2.利用MATLAB信号处理工具箱的...

  • 高斯噪声、高斯白噪声、SNR、噪声方差

    如何用matlab 产生 均值为0,方差为5的高斯噪声 就得到了 N ( 0, 5 ) 的高斯分布序列。 其中MU...

  • Matlab方法类_plot函数2D

    plot 作为一种Matlab的语言工具,可以用此来描绘连续的波形变化,是不可以用此来描绘离散类的波形,离散类则...

  • 《通信原理》第一章小结

    趁着记忆尚存,记一下对通信原理的几个重要公式的理解。引入几个概念: M: M进制波形, 有几个符号。 码元:在数字...

  • 信号生成和波形生成

    波形生成只是产生一段信号(信号长度=采样数/采样率),信号生成则是产生连续的波形信号,不断的对信号进行采样,然后产...

  • matlab随机序列

    伪随机序列发生器有多种,先看一种吧 基本思想:先通过rand('seed', key);设置一个种子,控制随机序列...

网友评论

    本文标题:基于matlab下的m序列波形产生

    本文链接:https://www.haomeiwen.com/subject/tgovhxtx.html