m序列Simulink仿真实现
- 格式:doc
- 大小:551.50 KB
- 文档页数:8
[收稿日期]2014-04-25 [作者简介]刘亚娟(1980-),女,硕士,讲师,现主要从事通信技术方面的教学与研究工作。
基于Simulink的m序列仿真分析 刘亚娟 (宜宾学院物理与电子工程学院,四川宜宾644000)[摘要]在研究m序列基本原理和特性的基础上,利用Simulink搭建了一个二进制码序列的功率谱分析平台和一个针对数字信号的误码仿真分析系统,分别对m序列功率谱和误码率进行了仿真分析。
仿真平台中随机二进制码序列由Bernoulli binary generator产生,上半部直接对信号发生器产生的信号进行功率谱分析;下半部中先对信号发生器产生的数字信号进行m序列的加扰,使其“1”和“0”码的出现概率相等,再进行功率谱分析。
误码仿真分析系统中,将信号发生器产生的随机数字信号(满足Bernoulli分布)和加扰的数字信号分别通过一个BPSK调制传输系统,信道噪声为加性高斯白噪声。
仿真结果表明,利用m序列加扰的数字信号其功率谱更加平稳;信号发生器产生的随机数字信号要比加扰的数字信号具有更好的抗干扰性,在实际应用中,为了提高信号的抗干扰能力,最好利用m序列对其信源产生的数字信号进行加扰,让信号呈现伪随机特性。
[关键词]m序列;Simulink;功率谱;误码率[中图分类号]TN929.5[文献标志码]A [文章编号]1673-1409(2014)22-0052-03 图1 n级线性反馈移位寄存器m序列(具有最长周期的线性反馈移位寄存器序列)是目前广泛应用的一种伪随机序列,其在通信领域有着广泛的应用,如扩频通信,数字数据加密、加扰、同步,信道误码率测量等领域。
对于一个n级线性反馈移位寄存器(见图1)来说,最多可以有2n-1个状态,所以一个n级线性反馈移位寄存器的序列的最长周期为2n-1。
m序列中“1”和“0”码的出现概率大致相等,“1”码的出现次数只比“0”码的多1次,故常把m序列称为伪随机序列。
Simulink仿真⼊门到精通(⼋)M语⾔对Simulink模型的⾃动化操作及配置8.1 M语⾔控制模型的仿真M语⾔与Simulink结合的⽅式:在Simulink模型或模块中使⽤回调函数在M语⾔中调⽤与模型相关的命令,控制模型的建⽴,设置模块的属性,增删信号线,以及运⾏模型仿真等为了调⽤和操作Simulink模型,M语⾔中最常⽤的函数有sim、set_param、get_param。
8.1.1 sim控制模型仿真及参数配置(1)simOut=sim('model','ParameterName1',value1,'ParameterName2',value2,...);对名为model的模型进⾏仿真,仿真时将其参数通过[参数名,参数值]的⽅式进⾏配置。
simOut是⼀个Simulink.SimulationOutput对象,包含了仿真的输出:仿真采样时间、状态值和信号值。
sim_out=sim('mymodel','SimulationMode','Normal','stoptime','30');(2)simOut=sim('model',ParameterStruct);仿真时通过结构体变量配置参数。
param_struct=struct('SimulationMode','Normal','stoptime','30');sim_out=sim('mymodel',param_struct);(3)simOut=sim('model',ConfigSet);仿真时通过配置集合来配置参数。
getActiveConfigSet() %获取模型的配置集合变量attachConfigSet() %绑定参数配置集合到模型setActiveConfigSet() %激活模型的某个参数配置对ConfigSet对象进⾏参数获取/设定也使⽤set_param()/get_param()。
学习使用MATLABSimulink进行系统仿真【第一章:引言】在如今数字化时代,仿真已成为系统设计与优化的重要工具。
系统仿真能够帮助工程师在产品开发的早期阶段快速验证设计,预测产品性能,并提供有关系统行为的深入洞察。
由于其易用性和广泛应用领域,MATLABSimulink成为了工程界最受欢迎的仿真工具之一。
本文将介绍如何学习使用MATLABSimulink进行系统仿真,并强调其专业性。
【第二章:MATLABSimulink概览】MATLABSimulink是一个具有图形化界面的仿真环境,可用于建模、仿真和分析各种复杂动态系统。
它使用块状图形表示系统的组成部分,并通过连接输入和输出端口模拟系统的行为。
用户可以通过简单拖拽和连接块状元件来构建仿真模型,并通过调整参数和设置仿真参数来进行模拟分析。
【第三章:基本建模技巧】在使用MATLABSimulink进行系统仿真之前,掌握基本的建模技巧至关重要。
首先,需要熟悉各种块状元件的功能和用途,例如传感器、执行器、逻辑运算器等。
其次,理解信号流和数据流的概念,以及如何在模型中正确地引导信号传递和数据流动。
最后,学习使用条件语句、循环语句等控制结构来实现特定的仿真逻辑。
【第四章:系统模型的构建】在使用MATLABSimulink进行系统仿真时,首先需要根据实际系统的需求和特点进行系统模型的构建。
这包括确定系统的输入和输出,以及分析系统的功能和性能要求。
然后,使用块状元件将系统的各个组成部分建模,并建立各个组件之间的联系和依赖关系。
在构建模型的过程中,要注意选择恰当的块状元件和参数设置,以确保模型的合理性和可靠性。
【第五章:仿真参数设置与分析】为了获得准确且可靠的仿真结果,需要合理设置仿真参数。
常见的仿真参数包括仿真时间、步长和求解器类型等。
仿真时间应根据系统的实际运行时间确定,步长要足够小以保证仿真的精度,而求解器类型则根据系统的特点选择。
完成仿真后,还需要对仿真结果进行分析,以评估系统的性能和进行优化调整。
大连理工大学实验报告学院(系):专业:班级:姓名:学号:组:实验时间:实验室:实验台:指导教师签字:成绩:实验名称: Simulink 仿真 AM 调制解调系统一、实验程序和结果:利用 matlab 中的 simulink功能,对系统进行仿真。
1.语音信号的调制与解调( 1)各部分参数设计:①输入的调制信号:调制信号的频率为20Hz,载波信号的频率为200Hz,二者的采样频率均为1000Hz,满足采样频率的要求。
② 随机信号模拟的干扰:在实际仿真时,随机信号模拟信道的干扰信号,但在进行仿真时,并无图像输出。
大概设置存在问题。
③ 带通滤波器的参数设置:滤波器为带通滤波器,下限通带频率为 150Hz,阻带频率为 100Hz ;上限通带频率为 250Hz,阻带频率为300Hz.采样频率为 1000Hz.④ 低通滤波器:低通滤波器的上限通带截止频率为25Hz,阻带频率为30Hz;采样频率为1000Hz。
( 3)各处时域频域波形:A.调制信号:时域图像:频域图像:时域波形:频域波形:C.调制后信号波形:时域波形:频域波形:D.加入噪声后图像:时域波形:频域波形:E.带通滤波器后信号图像:时域波形:频域波形:F.通过低通滤波器后信号图像:时域波形:频域波形:2、结果分析该系统使用乘法器对低频信号进行幅度调制,用低频信号u 控制高频载波u0 的幅度。
再利用想干解调的方法将原信号还原。
由输出波形可知,该系统基本实现了预定的功能。
但加噪声后的波形输出幅度波动较大,原因是带通滤波器对噪声的滤波效果不理想,导致解调后的波形含有剩余的噪声分量,主要是f0 附近的噪声对波形造成了影响。
二、自选系统的系统函数为H(s)=(s^2+8s+10)/(s^2+5s+4)。
( 1)系统框图:采用冲击信号作为输入(幅度为1),仿真信号进过系统后的单位冲击响应。
( 3)输入信号时域波形:输出信号时域波形:。
simulink仿真与m函数
Simulink是一个用于建模、仿真和分析动态系统的工具,而M 函数则是一种在Simulink中使用的自定义函数。
在Simulink中,可以使用M函数来实现特定的功能或算法,以便在模型中进行复杂的计算或处理。
M函数可以通过MATLAB语言编写,然后在Simulink 模型中调用和使用。
在Simulink中进行仿真时,M函数可以用于实现特定的计算、控制逻辑或者其他复杂的功能。
这些函数可以在Simulink模型中作为子系统进行调用,从而实现对系统行为的精确建模和仿真。
M函数可以帮助用户将复杂的算法或逻辑模块化,使得模型更加清晰和易于维护。
另外,Simulink还提供了许多内置的仿真工具和模块,用户可以直接使用这些工具来进行仿真分析。
但是对于一些复杂的功能或特定的算法,M函数可以提供更灵活和定制化的解决方案。
通过编写M函数,用户可以根据自己的需求来实现特定的功能,从而扩展Simulink的仿真能力。
总的来说,Simulink仿真与M函数密切相关,M函数可以为
Simulink模型提供额外的功能和灵活性,帮助用户更好地建模和仿真复杂的动态系统。
通过合理地使用M函数,用户可以更好地理解系统行为,优化控制策略,并进行深入的仿真分析。
如何使用MATLABSimulink进行动态系统建模与仿真如何使用MATLAB Simulink进行动态系统建模与仿真一、引言MATLAB Simulink是一款强大的动态系统建模和仿真工具,广泛应用于各个领域的工程设计和研究中。
本文将介绍如何使用MATLAB Simulink进行动态系统建模与仿真的方法和步骤。
二、系统建模1. 模型构建在MATLAB Simulink中,可以通过拖拽模块的方式来构建系统模型。
首先,将系统的元件和子系统模块从库中拖拽到模型窗口中,然后连接这些模块,形成一个完整的系统模型。
2. 参数设置对于系统模型的各个组件,可以设置对应的参数和初始条件。
通过双击模块可以打开参数设置对话框,可以设置参数的数值、初始条件以及其他相关属性。
3. 信号连接在模型中,各个模块之间可以通过信号连接来传递信息。
在拖拽模块连接的同时,可以进行信号的名称设置,以便于后续仿真结果的分析和显示。
三、系统仿真1. 仿真参数设置在进行系统仿真之前,需要设置仿真的起止时间、步长等参数。
通过点击仿真器界面上的参数设置按钮,可以进行相关参数的设置。
2. 仿真运行在设置好仿真参数后,可以点击仿真器界面上的运行按钮来开始仿真过程。
仿真器将根据设置的参数对系统模型进行仿真计算,并输出仿真结果。
3. 仿真结果分析仿真结束后,可以通过查看仿真器界面上的仿真结果来分析系统的动态特性。
Simulink提供了丰富的结果显示和分析工具,可以对仿真结果进行绘图、数据处理等操作,以便于对系统模型的性能进行评估。
四、参数优化与系统设计1. 参数优化方法MATLAB Simulink还提供了多种参数优化算法,可以通过这些算法对系统模型进行优化。
可以通过设置优化目标和参数范围,以及定义参数约束条件等,来进行参数优化计算。
2. 系统设计方法Simulink还支持用于控制系统、信号处理系统和通信系统等领域的特定设计工具。
通过这些工具,可以对系统模型进行控制器设计、滤波器设计等操作,以满足系统性能要求。
simulink仿真过程Simulink求解器Simulink仿真过程Simulink 模型的执⾏分⼏个阶段进⾏。
⾸先进⾏的是初始化阶段,在此阶段,Simulink 将库块合并到模型中来,确定传送宽度、数据类型和采样时间,计算块参数,确定块的执⾏顺序,以及分配内存。
然后,Simulink 进⼊到“仿真循环”,每次循环可认为是⼀个“仿真步”。
在每个仿真步期间,Simulink 按照初始化阶段确定的块执⾏顺序依次执⾏模型中的每个块。
对于每个块⽽⾔,Simulink 调⽤函数来计算块在当前采样时间下的状态,导数和输出。
如此反复,⼀直持续到仿真结束。
下图所⽰为⼀个仿真的步骤:Simulink求解器分类Simulink求解器可分为两⼤类:变步长求解器和定步长求解器。
也可细分为:连续求解与离散求解、隐式求解与显式求解、单步求解与多步求解以及单阶式与变阶式求解。
(1)定步长与变步长求解器定步长求解器的仿真步长为定制,没有误差控制机制;变步长求解器在仿真过程中需要计算仿真步长,通过增加/减⼩步长来满⾜所设定的误差宽容限。
在⽣成实时运算代码时,必须使⽤定步长求解器,若不打算配置模型代码⽣成,求解器的选择根据建⽴模型⽽定。
通常,变步长求解器可以减少仿真时间,定步长求解步长越⼩,仿真精度越⾼,故在同样仿真精度要求下,在采⽤定步长求解器进⾏仿真时,整个仿真过程必须采⽤变步长求解器中的最⼩步长。
(2)连续与离散求解器在定步长与变步长求解器中均有连续与离散求解器。
连续与离散求解器都是依靠模块来计算所有离散状态值。
定义离散状态的模块负责在每个步长的时间点计算离散状态值,连续求解器是通过数值积分来计算定义连续状态的模块的状态值。
在选择求解器时,必须先确定模型中是否需要离散求解器。
在模型中若没有连续状态模块,求解器采⽤连续、离散均可,若有连续状态模型必须采⽤连续求解器。
(3)显式与隐式求解器隐式求解器的应⽤主要解决模型中的刚性问题,显式求解器应⽤解决⾮刚性问题。
m序列Simulink仿真Verilog实现1. 4阶m序列生成器
Simulink模型如下:
其中,可以在Unit Delay属性中设置初始值为1000,由于Unit Delay输出为double,所以要将其转为Boolean以便进行模二加运算,使用XOR实现。
下面分别是最后一级和所有级的输出波形,可以看出,与上面的是一致的。
Verilog实现
`timescale 1ns / 1ps
////////////////////////////////////////////////////////////////////////////////// // Company:
// Engineer:
//
// Create Date: 11:02:17 05/01/2012
// Design Name:
// Module Name: PNcode
// Project Name:
////////////////////////////////////////////////////////////////////////////////// module PNcode(
clk,
rst,
PNstate,
PNout
);
input clk;
input rst;
output PNstate;
output PNout;
// PN code n = 4, f(x) = 1 + x + x^4
parameter order = 4;
reg PNout = 0;
reg [order-1 : 0] PNstate = 0;
always @ (posedge clk)
if(rst == 1)
begin
PNout <= 0;
PNstate <= 4'b1000; // PN seed = b1000
end
else
begin
PNout <= PNstate[0];
PNstate <= {PNstate[3]+PNstate[0], PNstate[3:1]};
end
endmodule
测试文件:
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////// // Company:
// Engineer:
//
// Create Date: 14:37:43 05/01/2012
// Design Name: PNcode
// Module Name: E:/me/CAST/Project/FPGAcomm/PNcode/PNcode_tb.v
// Project Name: PNcode
//
//////////////////////////////////////////////////////////////////////////////// module PNcode_tb;
// Inputs
reg clk;
reg rst;
// Outputs
wire [3:0] PNstate;
wire PNout;
// Instantiate the Unit Under Test (UUT)
PNcode uut (
.clk(clk),
.rst(rst),
.PNstate(PNstate),
.PNout(PNout)
);
initial begin
// Initialize Inputs
clk = 0;
rst = 1;
// Wait 100 ns for global reset to finish
#100;
rst = 0;
// Add stimulus here
end
always begin
forever #10 clk = !clk;
end
endmodule
clk使用一个单独的always模块
输出序列:0 0 0 1 1 1 1 0 1 0 1 1 0 0 1 0 0 0 1 2. 8阶m序列生成器,初始全为1
1。