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

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

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

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

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

m序列的产生

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

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

基于matlab下的m序列波形产生_第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下的m序列波形产生_第2张图片
仿真波形

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

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

你可能感兴趣的:(基于matlab下的m序列波形产生)