FPGA学习(2)m序列和gold序列的产生

这篇具有很好参考价值的文章主要介绍了FPGA学习(2)m序列和gold序列的产生。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

       m序列是最长线性反馈移位寄存器序列的简称。它是由带线性反馈的移存器产生的周期最长的序列。一般来说,一个n级线性反馈移存器可能产生的最长周期等于。

        m序列是一种典型的伪随机序列。在通信领域有着广泛的应用,如扩频通信、卫星通信的码分多址(CDMA),数字数据中的加密、加扰、同步、误码率测量等领域。

        m序列产生原理如图一所示,反馈系数表如图二所示,

FPGA学习(2)m序列和gold序列的产生

FPGA学习(2)m序列和gold序列的产生 

         下面为 m序列matlab产生函数,以4级m序列产生为例,周期为15,反馈系数为23,其反馈系数多项式为FPGA学习(2)m序列和gold序列的产生,则函数的输入参数为[0 1 1 1]。

function mseq = m_generate(fbconnection)
n=length(fbconnection);
N=2^n-1;
register=[1 zeros(1,n-1)]; %移位寄存器的初始状态
mseq(1)=register(n);       %m序列的第一个输出码元
for i=2:N
    newregister(1)=mod(sum(fbconnection.*register),2);
    for j=2:n
        newregister(j)=register(j-1);
    end
    register=newregister;
    mseq(i)=register(n);
end
% primpoly(n,'all');     %可以查看所有反馈系数

        Gold序列是由两个码长相等、码时钟速率相同的m序列优选对通过模2相加而构成的。通过对m序列循环移位产生不同Gold序列。

       在对m序列和Gold序列进行相关性能分析时,首先,要进行极性转换,转换为双极性码;其次,需要进行循环相关计算,而matlab自带的xcorr函数是通过补0操作进行计算,需要进行调整或者自己写函数实现。

%**************************************************
%m序列,Gold序列的自相关函数、互相关函数
%Gold序列是由两个m序列优选对模二加产生
%**************************************************
clc
clear all

%**************************************************
%寄存器参数
%**************************************************
T=1e-3;                           %码片宽度
% f1=[1 0 0 0 0 0 0 1 0 0 1];       %特征多项式x^10+x^3+1对应的系数
% f2=[1 0 1 0 0 0 0 1 1 0 1];       %特征多项式x^10+x^8+x^3+x^2+1对应的系数   
% r=10;                             %寄存器位数
f1=[1 0 0 0 0 0 0 1 0 0 1];       %生成m序列的抽头系数1
f2=[1 0 1 0 0 0 0 1 1 0 1];       %生成m序列的抽头系数2 
r = length(f1)-1;
n=2^r-1;                          %m序列长度
M1=zeros(1,n);
M2=zeros(1,n);
M1(1)=1;                          %初始状态10000000000
M2(1)=1;
 
%***************************************************
%产生m序列
%***************************************************
for i=r+1:n                      %递推公式得到m序列
    M1(i)=mod(sum(M1(i-r:i-1).*f1(1:r)),2);
    M2(i)=mod(sum(M2(i-r:i-1).*f2(1:r)),2);
end
mseq1 = m_generate([0 0 0 0 0 0 1 0 0 1]);
% M1 = mseq1;
mseq2 = m_generate([0 1 0 0 0 0 1 1 0 1]);
% M2 = mseq2;
% ***************************************************
% 产生Gold序列
% ***************************************************
G1=mod(M1+M2,2);                  %0比特相位差
s = randi([1 n],1);
% s=102;                              %s在0-n之间
G2=mod(M1+[M2(s+1:n) M2(1:s)],2); %s比特相位差
%***************************************************
%双极性序列
%***************************************************
M1=2*M1-1;                        %双极性m序列
M2=2*M2-1;                        %双极性m序列
G1=2*G1-1;                        %双极性m序列
G2=2*G2-1;                        %双极性m序列
%***************************************************
%自相关函数
%***************************************************
N=2*n-1;
t=(-n+1:n-1)*T;
Rm1=zeros(1,N);                  %M1的自相关函数
Rm2=zeros(1,N);                  %M2的自相关函数
Rg1=zeros(1,N);                  %G1的自相关函数
Rg2=zeros(1,N);                  %G2的自相关函数
 
for j=0:n-1
Rm1(n+j)= sum(M1.*[M1(j+1:n) M1(1:j)])/n;
Rm2(n+j)= sum(M2.*[M2(j+1:n) M2(1:j)])/n;
Rg1(n+j)= sum(G1.*[G1(j+1:n) G1(1:j)])/n;
Rg2(n+j)= sum(G2.*[G2(j+1:n) G2(1:j)])/n;
end
Rm1(1:n-1)= Rm1(N:-1:n+1);
Rm2(1:n-1)= Rm2(N:-1:n+1);
Rg1(1:n-1)= Rg1(N:-1:n+1);
Rg2(1:n-1)= Rg2(N:-1:n+1);
figure(1)
subplot(221);
plot(t,Rm1);
title('M1自相关函数');
subplot(222);
plot(t,Rm2);
title('M2自相关函数');
subplot(223);
plot(t,Rg1);
title('G1自相关函数');
subplot(224);
plot(t,Rg2);
title('G2自相关函数');
%********************************************************
%互相关函数
%********************************************************
Rm1m2=zeros(1,N);
Rm1g2=zeros(1,N);
Rm2g1=zeros(1,N);
Rg1g2=zeros(1,N);
 
for j=0:n-1
Rm1m2(n+j)= sum(M1.*[M2(j+1:n) M2(1:j)])/n;
Rm1g2(n+j)= sum(M1.*[G2(j+1:n) G2(1:j)])/n;
Rm2g1(n+j)= sum(M2.*[G1(j+1:n) G1(1:j)])/n;
Rg1g2(n+j)= sum(G1.*[G2(j+1:n) G2(1:j)])/n;
end
Rm1m2(1:n-1)= Rm1m2(N:-1:n+1);
Rm1g2(1:n-1)= Rm1g2(N:-1:n+1);
Rm2g1(1:n-1)= Rm2g1(N:-1:n+1);
Rg1g2(1:n-1)= Rg1g2(N:-1:n+1);
figure(2)
subplot(221);
plot(t,Rm1m2);
title('M1、M2互相关函数');
subplot(222);
plot(t,Rm1g2);
title('M1、G2互相关函数');
subplot(223);
plot(t,Rm2g1);
title('M2、G1互相关函数');
subplot(224);
plot(t,Rg1g2);
title('G1、G2互相关函数');

 

源代码均来自CSDN优秀博主,自己为了方便学习进行整理整合!文章来源地址https://www.toymoban.com/news/detail-511174.html

到了这里,关于FPGA学习(2)m序列和gold序列的产生的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于FPGA线性调频信号LFM的产生

    本文用了DDS来产生LFM信号,DDS的原理可以查看赛灵思的官方文档,这里不做赘述,同时对于LFM信号也不做赘述,直接上工程实现及其方法。 首先,我们要确定脉宽和PRI,在这里脉宽选取10us,PRI选取200us(fpga内部时钟用来100MHz),所以使用计数器去实现这两个信号的计数,当

    2024年02月16日
    浏览(86)
  • 力扣hot100 最长递增子序列 线性DP 贪心 二分

    Problem: 300. 最长递增子序列 时间复杂度: O ( n 2 ) O(n^2) O ( n 2 ) 空间复杂度: O ( n ) O(n) O ( n ) 👨‍🏫 参考题解 时间复杂度: O ( n log ⁡ n ) O(nlog{n}) O ( n lo g n ) 空间复杂度: O ( n ) O(n) O ( n )

    2024年01月20日
    浏览(39)
  • Gold序列

    前言 一、Gold序列产生原理 1.1 m序列 1.2 Gold序列 二、仿真实验 总结          本文主要介绍Gold序列的产生以及相关性仿真。 m序列产生        m序列是最大长度线性移位寄存器序列的简称,是由多级移位寄存器或其他延迟元件通过线性反馈产生的最长的码序列。若r为级数,

    2024年02月05日
    浏览(27)
  • 洛谷 P2782 友好城市 线性DP 最长上升子序列 二分查找 lower_bound

    🍑 算法题解专栏 有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同。每对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政

    2024年02月02日
    浏览(63)
  • Intel FPGA:线性序列机

    个人说明: 限于时间紧迫以及作者水平有限,本文错误、疏漏之处恐不在少数,恳请读者批评指正。意见请留言或者发送邮件至:“Email:noahpanzzz@gmail.com” 。 本博客的工程文件均存放在:GitHub:https://github.com/panziping。 本博客的地址:CSDN:https://blog.csdn.net/ZipingPan 。 参考: 芯

    2024年04月11日
    浏览(34)
  • [ACM 学习] 最长上升子序列

    LIS(最长上升子序列)的三种经典求法 - 一只不咕鸟 - 博客园 (cnblogs.com) 理解一下第三种方法(贪心+二分查找) 因为构建的是上升子序列,所以是可以用二分查找找到最大的小于当前 A[i] 的在子序列中的 F[j],并更新 F[j+1] 注:刚开始看的时候还在疑惑只换一个的话,后面的

    2024年01月16日
    浏览(38)
  • 贪心算法学习——最长单调递增子序列

    目录 ​编辑 一,题目 二,题目接口 三,解题思路和代码 给你一个整数数组  nums  ,找到其中最长严格递增子序列的长度。 子序列  是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如, [3,6,2,7]  是数组  [0,3,1,6,2,2,7]  的子序列。  

    2024年02月08日
    浏览(42)
  • 刚学习的最长不递增子序列的新求法

    P1020 [NOIP1999 提高组] 导弹拦截 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 在做这题的时候学到的 我看说是复杂度在O(nlogn)的算法才能通过这题 普通的办法就不行了(之前写过) 然后我去看题解,学了这种新的方法 网址如下:题解 P1020 【[NOIP1999 普及组] 导弹拦截】 - 古明地

    2024年01月22日
    浏览(35)
  • 【FPGA零基础学习之旅#12】三线制数码管驱动(74HC595)串行移位寄存器驱动

    🎉欢迎来到FPGA专栏~三线制数码管驱动 ☆* o(≧▽≦)o *☆ 嗨 ~我是 小夏与酒 🍹 ✨ 博客主页: 小夏与酒的博客 🎈该系列 文章专栏: FPGA学习之旅 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏 📜 欢迎大家关注! ❤️ 🥝 ISSP调试演示: 程序配置完成:

    2024年02月09日
    浏览(46)
  • 【FPGA零基础学习之旅#5】产生非等占空比信号

    🎉欢迎来到FPGA专栏~产生非等占空比信号 ☆* o(≧▽≦)o *☆ 嗨 ~我是 小夏与酒 🍹 ✨ 博客主页: 小夏与酒的博客 🎈该系列 文章专栏: FPGA学习之旅 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏 📜 欢迎大家关注! ❤️ 我们通过LED的亮灭来展现等占空

    2024年02月05日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包