认知无线电频谱切换源码matlab仿真

合集下载

认知无线电中频谱感知技术研究Matlab仿真设计

认知无线电中频谱感知技术研究Matlab仿真设计

毕业设计(论文)题目:认知无线电中频谱感知技术研究专业:学生:班级学号:指导教师:指导单位:20分太坑爹了。

老子放个免费的日期:年月日至年月日摘要无线业务的持续增长带来频谱需求的不断增加,无线通信的发展面临着前所未有的挑战。

无线电频谱资源一般是由政府统一授权分配使用,这种固定分配频谱的管理方式常常会出现频谱资源分配不均,甚至浪费的情形,这与日益严重的频谱短缺问题相互矛盾。

认知无线电技术作为一种智能频谱共享技术有效的缓解了这一矛盾。

它通过感知时域、频域和空域等频谱环境,自动搜寻已授权频段的空闲频谱并合理利用,达到提高现有频谱利用率的目的。

频谱感知技术是决定认知无线电能否实现的关键技术之一。

本文首先介绍了认知无线电的基本概念,对认知无线电在 WRAN 系统、UWB 系统与 WLAN 系统等领域的应用分别进行了讨论。

在此基础上,针对实现认知无线电的关键技术从理论上进行了探索,分析了影响认知网络正常工作的相关因素与认知网络对授权用户正常工作所形成的干扰。

从理论上推导了在实现认知无线电系统所必须面对的弱信号低噪声比恶劣环境下,信号检测的相关方法和技术,并进行了数字滤波器的算法分析,指出了窗函数的选择原则。

接着详细讨论了频谱检测技术中基于发射机检测的三种方法:匹配滤波器检测法、能量检测法和循环平稳特性检测法。

为了检验其正确性,借助 Matlab 工具,在Matlab 平台下对能量检测和循环特性检测法进行了建模仿真,比较分析了这两种方法的检测性能。

研究结果表明:在低信噪比的情况下,能量检测法检测正确率较低,检测性能远不如循环特征检测。

其次还详细的分析认知无线电的国外研究现状与关键技术。

详细阐述了频谱感知技术的研究现状和概念,并指出了目前频谱感知研究工作中受到关注的一些主要问题,围绕这些问题进行了深入研究。

关键词:感知无线电;频谱感知;匹配滤波器感知;能量感知;合作式感知;ABSTRACTThe development of the wireless business results in increasing needs of the frequency. Wireless communication is facing a challenge. Radio resource is distributed by the government, which generally rises inequality and waste of Radio resource. So,there is a contradiction between the waste and the shortage of Radio resource. The cognitive radio, a technology of intelligent spectrum sharing, effectively bridges the contradiction. Based on the perception of time domain, frequency domain and airspace,automatic discovery and reasonably use of free spectrum among distributed spectrum,the cognitive radio improves the utilization ratio in the existing frequency. Spectrum sensing is one of the sky technologies in the cognitive radio.Based on the introduction of Cognitive Radio(CR) and the discussion of applications of CR in WRAN, UWB and WLAN, the key technologies of achieving CR were researched in theory and the factors controlling cognitive network and the interferences raised by cognitive network in normal working of authorized user were analyzed. The related method and technology of signal detection was theoretically derived in the severe environment of weak signal and low signal to noise ratio that is must facing to achieve CR. With the algorithm analysis of digital filter, the selection principle of windows function was proposed. Three spectrum detection methods namely matching filter detection way, energy detection way and cycle property detection way, were investigation in great detail. For testing and verifying the correction of above results, the detailed modeling and simulation of energy detection and cycle property detection were completed with Matlab and the performances of that two detections were also compared. The results show that the energy detection way , in the low SNR , is low and the property of that is very poorer than the cycle property detection. And this paper suggested that improvement of algorithm of window function can promote the performance of cycle detection algorithm.Secondly, detailed analysis of the cognitive radio is also and the key technology research status.Elaborated on spectrum the sensing techniques and concepts Research,then points out the research work in the spectrum sensing some of the main issues of concern,around theseissues in depth study also.Key Words:Cognitive Radio;Spectrum Sensing;Matched filter Sensing;Energy Sensing;Cooperative Sensing;目录第一章绪论11.1认知无线电的研究背景与意义11.2认知无线电技术的国外发展现状11.2.1国际上和我国认知无线电技术的研究情况11.3全文的主要结构和研究容6第二章认知无线电技术82.1频谱感知技术82.2频谱分配技术92.3功率控制技术102.4认知无线电技术的应用112.4.1认知无线电在WRAN中的应用112.4.2认知无线电在UWB系统中的应用112.4.3认知无线电在WLAN中的应用122.5本章小结12第三章认知无线电频谱感知技术133.1频谱感知技术系统模型163.2单节点频谱感知技术173.2.1匹配滤波器感知173.2.2能量感知193.2.3循环平稳感知223.2.4单节点频谱感知的局限性253.3合作式频谱感知技术273.3.1合作式频谱感知的概念273.4合作式频谱感知的关键技术293.4.1“与”准则293.4.2“或”准则303.4.3“K秩”法313.5基于干扰温度的感知技术323.6本章小结34第四章实验仿真364.1实验仿真环境364.2能量检测仿真与结果364.3匹配滤波器检测仿真与结果374.4合作式检测仿真与结果384.5本章小结40第五章结束语425.1论文总结425.2未来研究展望43 致错误!未定义书签。

无线通信原理-基于matlab的ofdm系统设计与仿真

无线通信原理-基于matlab的ofdm系统设计与仿真

无线通信原理-基于matlab的ofdm系统设计与仿真基于matlab的ofdm系统设计与仿真摘要OFDM即正交频分复用技术,实际上是多载波调制中的一种。

其主要思想是将信道分成若干正交子信道,将高速数据信号转换成并行的低速子数据流,调制到相互正交且重叠的多个子载波上同时传输。

该技术的应用大幅度提高无线通信系统的信道容量和传输速率,并能有效地抵抗多径衰落、抑制干扰和窄带噪声,如此良好的性能从而引起了通信界的广泛关注。

本文设计了一个基于IFFT/FFT算法与802.11a标准的OFDM系统,并在计算机上进行了仿真和结果分析。

重点在OFDM系统设计与仿真,在这部分详细介绍了系统各个环节所使用的技术对系统性能的影响。

在仿真过程中对OFDM信号使用QPSK 调制,并在AWGN信道下传输,最后解调后得出误码率。

整个过程都是在MATLAB环境下仿真实现,对ODFM系统的仿真结果及性能进行分析,通过仿真得到信噪比与误码率之间的关系,为该系统的具体实现提供了大量有用数据。

- 1 -第一章 ODMF系统基本原理1.1多载波传输系统多载波传输通过把数据流分解为若干个子比特流,这样每个子数据流将具有较低的比特速率。

用这样的低比特率形成的低速率多状态符号去调制相应的子载波,构成了多个低速率符号并行发送的传输系统。

在单载波系统中,一次衰落或者干扰就会导致整个链路失效,但是在多载波系统中,某一时刻只会有少部分的子信道会受到衰落或者干扰的影响。

图1,1中给出了多载波系统的基本结构示意图。

图1-1多载波系统的基本结构多载波传输技术有许多种提法,比如正交频分复用(OFDM)、离散多音调制(DMT)和多载波调制(MCM),这3种方法在一般情况下可视为一样,但是在OFDM中,各子载波必须保持相互正交,而在MCM则不一定。

1.2正交频分复用OFDM就是在FDM的原理的基础上,子载波集采用两两正交的正弦或余弦函sinm,tcosn,t数集。

qpsk 信号 matlab仿真代码

qpsk 信号 matlab仿真代码

1. 介绍QPSK信号QPSK (Quadrature Phase Shift Keying) 是一种数字调制技术,常用于无线通信和数字通信系统中。

它是通过改变相位来传输数字信息的一种调制方式,相较于单相位调制方式,QPSK可以提高信号传输效率和频谱利用率。

2. QPSK信号的生成原理QPSK信号的产生可以通过正交调制的方式完成,即将数据流分为两个独立的流并分别与正弦和余弦信号相乘,经过合并后即可生成QPSK信号。

具体过程如下:(1) 将二进制数据流分为实部和虚部,分别代表I信号和Q信号;(2) 分别对I信号和Q信号进行调制,得到两路调制信号;(3) 将两路调制信号通过信号合并器得到QPSK信号。

3. QPSK信号的Matlab仿真代码在Matlab中,可以通过编程实现QPSK信号的生成和仿真。

以下是一个简单的QPSK信号Matlab仿真代码示例:```Matlab设置QPSK调制参数M = 4; 调制阶数msg = randi([0 M-1],10000,1); 随机生成10000个0到M-1的整数,模拟二进制信息流txSig = qammod(msg,M); QAM调制绘制星座图scatterplot(txSig) 绘制QPSK星座图添加高斯噪声rxSig = awgn(txSig, 10); 添加信道噪声,信噪比为10dB解调rxMsg = qamdemod(rxSig,M); QPSK解调[numErrors,ber] = biterr(msg,rxMsg); 计算比特错误率disp(['比特错误率为:',num2str(ber)])```4. QPSK信号仿真结果分析通过上述Matlab代码,我们可以得到QPSK信号的仿真结果。

通过绘制星座图可以直观地观察到QPSK信号在复平面上的分布情况。

随后,我们可以添加高斯噪声,模拟信道中的干扰,然后进行解调并计算比特错误率。

5. 结论通过以上QPSK信号的Matlab仿真代码,我们可以成功生成和仿真QPSK信号,并得到比特错误率等性能指标。

利用matlab移频信号调制代码的方法

利用matlab移频信号调制代码的方法

利用matlab移频信号调制代码的方法摘要:一、引言二、Matlab移频信号调制的基本原理1.移频信号的定义2.移频信号调制的目的3.Matlab实现移频信号调制的方法三、Matlab移频信号调制的代码实现1.信号发生器2.调制器3.解调器4.性能分析四、实例分析1.实例一:频率偏移调制2.实例二:相位调制3.实例三:频移键控(FSK)五、总结与展望正文:一、引言移频信号调制是一种在无线通信中广泛应用的调制技术。

它通过改变信号的频率来传输信息,具有抗干扰性强、传输速率高等优点。

Matlab作为一种数学计算软件,可以方便地模拟移频信号调制的整个过程。

本文将详细介绍如何利用Matlab实现移频信号调制,并给出实例分析。

二、Matlab移频信号调制的基本原理1.移频信号的定义移频信号是指信号的频率随着时间变化而变化的信号。

它的基本表达式为:f(t) = f0 + f1 * cos(ωt + θ)其中,f0为载波频率,f1为频率偏移量,ω为角频率,θ为相位差。

2.移频信号调制的目的移频信号调制的目的是在保持载波功率不变的情况下,通过改变载波频率来传输信息。

这样可以提高信号的抗干扰能力,提高通信质量。

3.Matlab实现移频信号调制的方法在Matlab中,可以利用信号生成函数、调制函数和性能分析函数实现移频信号调制。

三、Matlab移频信号调制的代码实现1.信号发生器使用Matlab的`awgn`函数生成高斯白噪声,`randn`函数生成随机数。

2.调制器利用Matlab的`cos`、`sin`函数实现移频信号的调制。

例如,对于频率偏移调制,可以编写如下代码:```Matlab% 参数设置Fs = 1000; % 采样频率Ts = 1/Fs; % 采样间隔= 1000; % 数据长度% 信号生成t = (0:N-1)"/Ts;f1 = 10; % 频率偏移量f0 = 100; % 载波频率θ= 0; % 相位差% 调制modulated_signal = sin(2 * pi * (f0 + f1 * cos(t)) * t);```3.解调器利用Matlab的信号处理函数解调信号,例如`fft`、`ifft`等。

基于MATLAB下的频率选择性信道仿真

基于MATLAB下的频率选择性信道仿真

基于MATLAB下的频率选择性信道仿真简介本文档旨在介绍使用MATLAB进行频率选择性信道仿真的基本方法和步骤。

背景频率选择性信道是无线通信中常见的信道类型之一,其特点是在不同的频率上具有不同的衰减和相位响应。

为了更好地理解和分析这种信道的性能,我们需要进行仿真模拟。

仿真步骤以下是在MATLAB中进行频率选择性信道仿真的基本步骤:1. 信道建模:首先,我们需要使用合适的数学模型来描述频率选择性信道。

常用的模型包括扁平衰落模型、Jakes模型、Rician衰落模型等。

根据具体的应用场景和需求,选择合适的模型进行建模。

信道建模:首先,我们需要使用合适的数学模型来描述频率选择性信道。

常用的模型包括扁平衰落模型、Jakes模型、Rician衰落模型等。

根据具体的应用场景和需求,选择合适的模型进行建模。

2. 频谱分析:通过频谱分析可以获得信号在不同频率上的衰减和相位响应。

MATLAB提供了丰富的信号处理工具箱,可以方便地对信号进行频谱分析。

频谱分析:通过频谱分析可以获得信号在不同频率上的衰减和相位响应。

MATLAB提供了丰富的信号处理工具箱,可以方便地对信号进行频谱分析。

3. 信道仿真:在信道建模和频谱分析的基础上,我们可以开始进行信道仿真。

根据所选用的信道模型和信号特性,使用MATLAB编写仿真代码,生成仿真结果。

可以考虑包括信号衰落、传输误码率等性能指标。

信道仿真:在信道建模和频谱分析的基础上,我们可以开始进行信道仿真。

根据所选用的信道模型和信号特性,使用MATLAB编写仿真代码,生成仿真结果。

可以考虑包括信号衰落、传输误码率等性能指标。

4. 结果分析:对于信道仿真的结果,我们需要进行详细的分析和评估。

根据仿真结果,可以评估系统在频率选择性信道下的性能表现,并针对性地进行优化。

结果分析:对于信道仿真的结果,我们需要进行详细的分析和评估。

根据仿真结果,可以评估系统在频率选择性信道下的性能表现,并针对性地进行优化。

频率编码matlab

频率编码matlab

频率编码matlab频率编码是一种数字信号处理技术,通常用于将模拟信号转换为数字信号。

在Matlab中,我们可以使用信号处理工具箱中的函数来实现频率编码。

首先,我们需要将模拟信号进行采样,将其转换为离散时间信号。

可以使用Matlab中的`resample`函数对信号进行重采样,或者使用`downsample`函数进行降采样。

重采样的目的是将连续时间信号转换为离散时间信号,以便后续处理。

接下来,我们可以使用傅里叶变换将离散时间信号转换为频域信号。

Matlab中的`fft`函数可以用来计算离散傅里叶变换(DFT),将信号从时域转换到频域。

在频域中,我们可以选择一定的频率范围作为编码的频率带宽。

可以使用`fftshift`函数将频谱进行平移,使得零频率位于频谱的中心。

然后,根据选定的频率带宽,可以将频谱中的能量分布进行编码。

一种常见的频率编码方法是脉冲位置调制(PPM)。

在PPM中,信号的能量分布被编码为脉冲的位置。

可以使用Matlab中的逻辑运算和索引操作来实现PPM编码。

首先,我们可以根据选定的频率带宽确定频率分辨率,然后将频率分辨率映射到时间分辨率。

根据时间分辨率,可以确定每个脉冲的位置,并将其编码为相应的脉冲序列。

另一种常见的频率编码方法是频率调制(FM)。

在FM中,信号的能量分布被编码为频率的变化。

可以使用Matlab中的数学函数和数组操作来实现FM编码。

根据选定的频率带宽和调制参数,可以计算出每个离散时间点上的频率,然后将其编码为相应的频率序列。

除了PPM和FM,还有其他一些频率编码方法,如频率偏移编码(FSK)、相位调制编码(PSK)等。

这些方法的实现方式略有不同,但基本思想相似。

总结起来,在Matlab中实现频率编码的步骤包括,信号采样、傅里叶变换、频率带宽选择、能量分布编码。

具体的实现方式取决于所选用的编码方法和信号特性。

以上只是一个简单的概述,具体的实现细节需要根据实际情况进行调整和优化。

matlab无线通信仿真代码

matlab无线通信仿真代码

matlab无线通信仿真代码
本文分享了一份基于MATLAB平台的无线通信仿真代码。

该代码包含了常用的调制解调算法、信道模型、编码解码等模块,通过调用这些模块可以实现多种无线通信系统的仿真。

具体来说,该代码可以用于仿真以下几种无线通信系统:
1. 传统的模拟调制系统,包括AM、FM、PM等模式的调制解调。

2. 数字调制系统,包括PSK、QAM、FSK等模式的调制解调。

3. 多径衰落信道模型,包括AWGN信道、瑞利衰落信道、莱斯衰落信道等。

4. 信道编码解码,包括卷积码、Turbo码、LDPC码等。

除此之外,该代码还包含了多个演示程序,可以直观地展示无线通信系统的仿真结果。

这些演示程序涉及到信道容量、误码率、信噪比等指标,可以帮助用户深入理解无线通信系统的性能。

总之,该MATLAB无线通信仿真代码简单易用,功能齐全,可用于学术研究、教学实验、工程应用等多个领域。

- 1 -。

MATLAB仿真AM调制解调 无线通信实验报告

MATLAB仿真AM调制解调  无线通信实验报告

无线通信实验报告院系名称:信息科学与工程学院专业班级:电信班学生姓名:学号:授课教师:2014 年11 月 6 日实验一 高斯衰落信道建模一、基本原理QPSK 信号可以看成是对两个正交的载波进行多电平双边带调制后所得信号的叠加,因此可以用正交调制的方法得到QPSK 信号。

QPSK 信号的星座如图4.1.1所示:图1.1 QPSK 信号星座图从AWGN 信道中,在一个信号区间内接收到的带宽信号可以表示为()()()()()cos(2)()sin(2)m m c c s c r t u t n t u t n t f t n t f t ππ=+=+-这里()c n t 和()s n t 是加性噪声的两个正交分量。

可以将这个接收信号与1()()cos(2)T c t g t f t ψπ=,2()sin(2)T c g t f t ψπ=-给出的1()t ψ和2()t ψ作相关,两个相关器的输出产生受噪声污损的信号分量,它们可表示为22()m s s s m m r s n n n M Mππξξ=+=++ 式中c n 和s n 定义为 1()()2c T c n g t n t dt ∞-∞=⎰ 1()()2s T s n g t n t dt ∞-∞=⎰ 这两个正交噪声分量()c n t 和()s n t 是零均值,互不相关的高斯随机过程。

这样,()()0c s E n E n ==和()0c s E n n =。

c n 和s n 的方差是 220()()2c s N E n E n == 最佳检测器将接收信号向量r 投射到M 个可能的传输信号向量{m s }之一上去,并选取对应于最大投影的向量。

据此,得到相关准则为(,)m m C r s r s =•,m=0,1,…,M-1由于全部信号都具有相等的能量,因此,对数字相位调制一种等效的检测器标准是计算接收信号向量r=(c r ,s r )的相位为 arctan s r cr r θ= 并从信号集{m s }中选取其相位最接近r θ的信号。

Matlab系统仿真代码技术文档

Matlab系统仿真代码技术文档

流程示意图(a)发射端框图CSI流程示意图 (1)1 主程序ofdm_wav_trans_system.m (2)2 D/A转换模块:Get_wav_data.m (9)3 长短帧设定:construct_flag.m (10)4 子载波参数设定:bitload.m (11)5 数据读取Fetch_data_old.m (11)6 数据读取:Fetch_data.m (12)7 加扰模块Scramble_data_old.m (13)8 加扰模块Scramble_data (14)9 卷积码encd216.m (14)10 交织模块1 index_change.m (16)11 交织模块2 index_change2.m (18)12 交织模块3 Data_interleave.m (20)13 导频模块:add_prefix.m (21)14 QAM模块:modulate.m (22)15 成型滤波器模块:shape_filtering.m (24)16 信道模拟模块:channel.m (25)17 匹配滤波器:match_filtering.m (26)18 欠抽样恢复模块:sample_decision.m (28)19 同步模块:fresym_combine_est.m (30)20 解帧模块:decompose_frame.m (32)21 频偏估计:get_sample_clock_offset.m (33)22 频偏补偿:recov_sample_clock.m (34)23 QAM解映射:demodulate.m (35)24 解交织模块1:index_normal2.m (37)25 解交织模块2:index_normal.m (38)26 解交织模块3:Data_Deinterleave.m (39)27 V iterbi译码模块:decd216.m (40)1 主程序ofdm_wav_trans_system.m功能:描述数据在数字域的变化,将音频文件转为数字,组帧,加扰,解扰clear all;tic;%帧参数global GUARD_num; GUARD_num=16; %循环前缀所占global FFT_num; FFT_num=64; %每符号子载波数global OFDM_symbols_per_frame; OFDM_symbols_per_frame =25; %每帧数据符号数global OFDM_prefix_per_frame; OFDM_prefix_per_frame=5; %每帧前导符号数global OFDM_wavbits_per_frame1;OFDM_wavbits_per_frame=1408; %每帧比特数global OFDM_wavbits_per_frame2; OFDM_wavbits_per_frame2=1440;global OFDM_scrambits_per_frame;OFDM_scrambits_per_frame=1440; %每帧扰码后比特数global Total_bits_per_symbol; Total_bits_per_symbol=144; %每个符号的比特数36×4scram_polynomial=[1 0 0 0 1 0 0 1]; %扰码多项式SNR=10; %单位:DBrolloff_factor=0.25;up_sampling_factor=4;%帧结构% 长训练符号LTS = [0 0 0 0 0 0 1 1 -1 -1 1 1 -1 1 -1 1 ...1 1 1 1 1 -1 -1 1 1 -1 1 -1 1 1 1 1 ...0 1 -1 -1 1 1 -1 1 -1 1 -1 -1 -1 -1 -1 1 ...1 -1 -1 1 -1 1 -1 1 1 1 1 0 0 0 0 0];% 短训练符号STS = sqrt(13/6)* ...[0 0 0 0 0 0 0 0 1+j 0 0 0 -1-j 0 0 0 ...1+j 0 0 0 -1-j 0 0 0 -1-j 0 0 0 1+j 0 0 0 ...0 0 0 0 -1-j 0 0 0 -1-j 0 0 0 1+j 0 0 0 ...1+j 0 0 0 1+j 0 0 0 1+j 0 0 0 0 0 0 0]; ...global SIGNAL1;% 信令符号SIGNAL1 = zeros(1,144);global SIGNAL2;SIGNAL2 = ones(1,144);% 导频PILOT=[-1 1 1 1];Pattern_Datas_Symbols_Index = [8:15 17:26 40:49 51:58];Pattern_Pilot_Symbols_Index = [16 27 39 50];% 功率放大器参数HPA_para_AmAm_alpha = 2.1587;HPA_para_AmAm_beta = 1.1517;HPA_para_AmPm_alpha = 4.0033;HPA_para_AmPm_beta = 9.1040;HPA_para_InputScaling = 1; % Not dbHPA_para_OutputScaling = 1;% Not dbHPA_para=[HPA_para_AmAm_alpha,HPA_para_AmAm_beta;HPA_para_AmPm_alpha,HPA_para_AmPm_beta; HPA_para_InputScaling,HPA_para_OutputScaling];chan_multipath_imp_res_upsampling=[1 0.89 0.81 0.74 0.68 0.62 0.57 0.52 0.48 0.46 0.44 0.43 0.42 ...0.41 0.405 0.402 0.40 0.392 0.387 0.383 0.38 0.36 0.34 0.33 0.32 ...0.27 0.23 0.19 0.17 0.12 0.09 0.06]; %多径效应trans_carrier_num=length(Pattern_Datas_Symbols_Index); %数字载波的子载波数energy_per_carrier=1; %符号能量load ENC2.matload ENC4.mat %qpsk对照表load ENC16.mat %16QAM对照表load ENC64.mat %64QAM对照表load ENC256.mat %256QAM对照表% I/Q ImbalenceIQ_Imb_am = 0.025;IQ_Imb_ph = 1*pi*2/360;[Wav_data,sample_rate,per_sample_bits] =Get_wav_data('tada.wav'); %将声音文件转化为数据trans_frame_wav_data=[];data_index=1;%flag_in=[0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1];flag_in=[0 0 0 0 1];flag=flag_in;%flag=construct_flag(flag_in); % 产生flag序列% trans_iter_num=ceil(length(Trans_wav_data)/OFDM_wavbits_per_frame); %所需传输帧数rec_wav_data=[];[trans_bits_alloctrans_energy_alloc]=bitload(Pattern_Datas_Symbols_Index,Total_bits_per_symbol,tran s_carrier_num,energy_per_carrier);%chan_multipath_fre=fft(chan_multipath_imp_res,FFT_num);%频域信道响应for Trans_frame_index =1:1:length(flag)flag_value=flag(Trans_frame_index);[Frame_wav_data,get_signal_data,new_begin_index] =Fetch_data(Wav_data,data_index,flag_value); % 基于缓冲池的状态决定帧长% 并根据flag决定信令data_index=new_begin_index;trans_frame_wav_data=[trans_frame_wav_data Frame_wav_data];T_data=[get_signal_data Frame_wav_data];T_data=Scramble_data(T_data);% 加扰,信令144比特+1440比特数据Scram_signal_data=T_data(1:144);% 前面144比特为加扰后的信令Scram_Frame_wav_data=T_data(145:1584);% 后面是1440比特加扰后的数据coded_Frame_wav_data=encd216(Scram_Frame_wav_data);Frame_scram_data=[Scram_signal_data coded_Frame_wav_data]; %两次交织总效果%temp_data=index_change( Frame_scram_data);% 第一次交织%trans_wav_data=index_change2(temp_data);% 第二次交织% Construct OFDM frameOFDM_trans_frame=zeros(25,80);OFDM_trans_frame=add_prefix(OFDM_trans_frame,STS,LTS); %生成帧头% 包括信令在内的21个符号,每个符号144比特,经过16QAM调制到相应的信道,并插入导频,这里信令也插入了导频data_begin_index=1;for k=1:OFDM_symbols_per_frame-OFDM_prefix_per_frame+1trans_bits_per_symbol=trans_wav_data(data_begin_index:data_begin_index+Total_bits_per_symbol-1);trans_16QAM_per_symbol = zeros(1,FFT_num);trans_16QAM_per_symbol=modulate(trans_bits_per_symbol,trans_bits_alloc,trans_energy_alloc,s2,s4,s16,s64,s256);trans_16QAM_per_symbol(Pattern_Pilot_Symbols_Index)=PILOT;%加入导频符号trans_tmdata_per_symbol=ifft(trans_16QAM_per_symbol,FFT_num);%进行ifft变换,相当于系统模块中OFDM调制OFDM_trans_frame(k+4,:)=[trans_tmdata_per_symbol(49:64)trans_tmdata_per_symbol]; % 数据帧加循环前缀data_begin_index=data_begin_index+Total_bits_per_symbol;endOFDM_trans_frame=transpose(OFDM_trans_frame); %矩阵转置,变成时间域表示形式% 以下步骤形成一个数据帧tx_frame_signal =reshape(OFDM_trans_frame,1,OFDM_symbols_per_frame*(GUARD_num+FFT_num));% 形成一个2000个采样点的数据帧,参考批注4。

基于matlab ofdm通信系统仿真代码

基于matlab ofdm通信系统仿真代码

基于matlab ofdm通信系统仿真代码
基于MATLAB OFDM通信系统仿真代码是一种应用在无线通信领域的高
效的通信技术。

OFDM(正交分频多载波)技术是一种高效的技术,它
能够在有限的信道容量内传输大量的数据,同时也能抵御多径衰减和
多路径效应。

此外,OFDM还可以抵抗非线性干扰和伪噪声,从而提高
系统的可靠性和稳定性。

MATLAB OFDM通信系统仿真代码可以帮助我们快速验证一个OFDM系统的性能,从而帮助我们更好地理解OFDM技术
背后的原理和技术。

MATLAB OFDM通信系统仿真代码由信道模拟、OFDM调制和解调制的子
模块组成,其中每个子模块都可以通过MATLAB编程实现。

首先,我们
需要定义一个简单的信道函数,以模拟实际信道的衰减和多路径效应,然后将信号传输给OFDM调制模块,它将信号转换成OFDM调制的多载
波信号。

接着,多载波信号被发射到信道中,经过信道后,经过OFDM
解调制模块处理,得到恢复后的信号,再经过信道衰减模拟得到最终
信号,完成仿真。

通过使用MATLAB OFDM通信系统仿真代码,我们可以更有效地对OFDM
技术进行仿真评估,同时也可以获得更为准确、直观的仿真结果。

此外,MATLAB OFDM通信系统仿真代码还可以帮助我们了解OFDM技术的
具体实施方法,为实际开发工作提供有效的技术支持。

调制解调matlab仿真源码

调制解调matlab仿真源码

一、概述调制解调技术是无线通信中的重要组成部分,它能够将数字信号转换成模拟信号,通过无线信道传输,并在接收端将模拟信号转换成数字信号。

在通信系统中,调制解调技术的准确性和稳定性对整个系统的性能起着至关重要的作用。

而Matlab作为一种强大的数学计算软件,其仿真源码能够帮助工程师们更好地理解调制解调原理,优化系统设计。

二、调制解调技术概述1. 调制技术调制技术是指利用某种载波信号来传送信息信号的过程。

常见的调制技术包括幅度调制(AM)、频率调制(FM)和相位调制(PM)等。

2. 解调技术解调技术是指将调制后的信号还原成原始信号的过程。

解调技术根据调制技术的不同可以分为幅度解调、频率解调和相位解调等。

三、调制解调Matlab仿真源码1. 调制仿真源码在Matlab中,可以利用Simulink工具箱进行调制仿真源码的编写。

对于AM调制可以通过搭建AM调制系统模型,设置载波频率、调制信号频率和调制指数等参数,然后进行仿真验证调制效果。

另外,Matlab还提供了丰富的调制函数库,如ammod()函数用于进行AM调制,fmmod()函数用于进行FM调制,pmmod()函数用于进行PM调制等。

工程师们可以通过编写简单的脚本文件调用这些函数,实现调制仿真源码的编写。

2. 解调仿真源码同样地,在Matlab中可以利用Simulink工具箱进行解调仿真源码的编写。

对于AM解调可以通过搭建AM解调系统模型,设置解调信号频率和解调环节参数,然后进行仿真验证解调效果。

Matlab还提供了一系列的解调函数库,如amdemod()函数用于进行AM解调,fmdemod()函数用于进行FM解调,pmdemod()函数用于进行PM解调等。

工程师们同样可以通过编写简单的脚本文件调用这些函数,实现解调仿真源码的编写。

四、调制解调Matlab仿真实例下面我们以AM调制解调为例,展示如何使用Matlab编写调制解调仿真源码。

1. AM调制仿真源码``` matlab设置参数fc = 1000; 载波信号频率fm = 100; 调制信号频率ka = 1; 调制指数t = 0:0.001:1; 时间范围生成调制信号m_t = cos(2*pi*fm*t); 调制信号c_t = cos(2*pi*fc*t); 载波信号s_t = (1+ka*m_t).*c_t; AM调制信号绘制调制信号图像subplot(3,1,1);plot(t,m_t);title('调制信号');绘制载波信号图像subplot(3,1,2);plot(t,c_t);title('载波信号');绘制AM调制信号图像subplot(3,1,3);plot(t,s_t);title('AM调制信号');```2. AM解调仿真源码``` matlab设置解调参数fs = xxx; 采样频率t = 0:1/fs:1; 时间范围s_t = (1+ka*m_t).*c_t; AM调制信号解调信号y = amdemod(s_t,fc,fs,0,ka);t = 0:1/fs:1; 时间范围绘制解调信号图像subplot(2,1,1);plot(t,m_t);title('调制信号');绘制解调信号图像subplot(2,1,2);plot(t,y);title('解调信号');```通过上述实例,我们可以清晰地了解到如何利用Matlab编写调制解调的仿真源码,从而深入理解调制解调原理,优化系统设计。

频谱matlab程序

频谱matlab程序

频谱matlab程序
频谱matlab程序是一种用于对信号进行频域分析的工具。

该程序可以将信号转换成频谱图,以便进一步分析信号的特性。

频谱matlab程序通常包含以下步骤:
1. 载入信号数据,例如音频文件。

2. 对信号进行预处理,例如去噪、滤波等。

3. 对信号进行时域分析,例如绘制时域波形和频率响应图。

4. 进行傅里叶变换,将信号转换成频谱图。

5. 绘制频谱图,例如绘制功率谱密度图和频谱时序图。

6. 对频谱进行分析,例如计算主频、谐波、失真等特性参数。

频谱matlab程序是一种强大的工具,可以帮助工程师和科学家分析各种类型的信号,例如音频、视频、传感器数据等。

该程序的设计和实现需要深入了解信号处理和傅里叶分析的原理和方法。

- 1 -。

matlab电路仿真代码

matlab电路仿真代码

matlab电路仿真代码以下是一个简单的MATLAB电路仿真代码示例,演示如何使用MATLAB进行基本的电路仿真:matlab定义电路参数R = 1; 电阻值C = 1; 电容值L = 1; 电感值Vin = 1; 输入电压定义仿真参数t_start = 0; 仿真起始时间t_end = 10; 仿真结束时间dt = 0.01; 仿真步长计算仿真所需变量N = floor((t_end - t_start) / dt) + 1; 仿真步数t = linspace(t_start, t_end, N); 时间向量Vout = zeros(1, N); 输出电压向量I = zeros(1, N); 电感电流向量进行仿真for i = 2:NVout(i) = Vout(i-1) + (Vin - Vout(i-1)) * dt / (R*C); RC电路输出电压I(i) = I(i-1) + (Vin - Vout(i-1)) * dt / L; 电感电流end绘制输出结果figure;subplot(2,1,1);plot(t, Vout);title('输出电压');xlabel('时间');ylabel('电压');subplot(2,1,2);plot(t, I);title('电感电流');xlabel('时间');ylabel('电流');以上代码演示了一个简单的RC电路和电感电流的仿真。

首先定义了电路的参数,然后定义了仿真的时间范围和步长。

接下来,根据定义的参数和仿真步长计算出时间向量,以及初始化输出电压和电感电流的向量。

然后,使用一个for 循环进行仿真,根据RC电路和电感电流的公式更新输出电压和电感电流的值。

最后,使用subplot将输出电压和电感电流的结果绘制在一个图形窗口中。

请注意,上面的示例只是一个简单的电路仿真示例,实际的电路仿真可能更复杂,具体的仿真方法和计算公式取决于电路的特性和您的需求。

matlab实现频谱

matlab实现频谱
Matlab作为编程语言和可视化工具,用Matlab开发的实验为学生提供了“信号分析”、“信号抽样”、“系统仿真”、“系统特性”、“滤波器设计”及“傅立叶变换”等实验模块。它的界面演示框如同通用示波器,显示了信号分析与系统设计的动态仿真过程,给人以直观的感受。在教学中它能为同学们提供了大量的实例,同时它也留下了在实验中同学们可以改变信号、模块、仿真子系统等的参数,并观察信号与系统的相应变化.在实验过程中,同学们对所学的书本知识会有感性的认识和直观的验证,加深对“信号与系统”原理的理解。
Matlab实验平台发展到现在,虽然时间不长,然现如今已经发展成为信息产业中一个大的研究热点。更是由于次实验系统的复杂性和所具有的挑战性,才使得有更多的Matlab爱好者投身其中,为基于Matlab的信号与系统实验平台的发展贡献力量。
要在最短的时间内写出最成功的论文,不仅靠课堂上的知识,还要靠平时的积累,和课外阅读的素材。MATLAB有很好的图象处理功能,其特点是开发效率高,接受能力快,所以选择Matlab软件来实现对信号频谱分析具有很大优势,我以后还会通过更深层次的学习来掌握Matlab,从而解决信号领域的一些难题,使信号领域的学习更加清晰,更加轻松!
Matlab在全世界内都很是流行,特别是在工程计算领域。近年来越来越多的国人也喜爱上了这一套软件。Matlab的toolbox中也含有概率统计方面的库函数。概率方面的库函数主要有各种常见分布的分布函数、概率密度、分布率以及生成服从各种分布随机数的函数.统计方面的库函数含盖了简单随机样本下常见的参数估计(点估计、区间估计),假设检验等等。
N=1024;%设定数据长度
i=0:N-1;
t=i/fs;
f=100;%设定正弦信号频率
%生成正弦信号
y=fft(x,N);%进行fft变换

无线通信信道编码matlab仿真

无线通信信道编码matlab仿真

现给出循环码及卷积码的编解码程序,理解各程序,完成以下习题。

将程序运行结果及各题目的解答写入word 中:1.用matlab 运行书上习题中的“clockcode.m ” (a )说明(7,4)码的纠错检错方法(b )在程序中标注“注释”处加上注释(英文或中文)(c )对于编码和未编码的情况,误比特率为1e-2、1e-3及1e-4时的Eb/N0分别是多少? (d )从物理意义上说明编码增益问题(e )当采用(15,11)码时,观察与(7,4)码相比编码增益的变化。

解: clockcode.m 程序运行结果如下:101010101010B E RE b /N 0 [dB](a) 纠错方法:首先将接收且进行判决过后的值进行分组,每7个二进制码为一组,视为一个向量。

用这一向量乘以一致校验矩阵H ,得到生成伴随式矢量s 。

若s=0,则认认为没有错,直接输出。

若s 与H T 的某一列相同,即有着相同的错误图样,则将收到的该位取反(即进行模二加),进行纠错,将纠错后的结果输出。

(b) clockcode.m 程序:data1=rand(1,nd)>0.5; % 注释:产生信源数据 x=encode(data1); %%注释:对信源数据进行信道编码 sigma=E/sqrt(2*SNR);%注释:能量归一化sigma1=E/sqrt(2*SNR*code_rate); %注释: 能量归一化 data2(i)=-E+Gngauss(sigma);% 注释:对未编码的信号进行BPSK 调制,同时加入加性高斯白噪声data2(i)=E+Gngauss(sigma); % 注释:对未编码的信号进行BPSK 调制,同时加入加性高斯白噪声 data3(i)=-E+Gngauss(sigma1); % 注释:对编码后的信号进行BPSK 调制,同时加入加性高斯白噪声 data3(i)=E+Gngauss(sigma1);% 注释:对编码后的信号进行BPSK 调制,同时加入加性高斯白噪声demodata1=data2 > 0; % 注释:过零比较判决,大于零判为1码,反之判为0码 noe2=sum(abs(data1-demodata1)); % 注释:统计误码个数 nod2=length(data1); % 注释:统计发送的码的个数 ber(snr_num) = noe/nod; %注释:误码率=误码个数/发送个数encode.m 程序:temp=data1(4*i-3:4*i); %注释:从data1(信源)中取数,每次取4个 cyctemp=temp*G; %注释:结合下一条语句完成对4位二进制数的编码cyctemp=mod(cyctemp,2); %注释:结合上一条语句完成对4位二进制数的编码;前一条完成了x=uG ,本条将生成的x变成二进制的结果encode(7*i-6:7*i)=cyctemp; %注释:将编出的7位码存放到输出数组中decode.m程序:temp = x(7*j-6:7*j); %注释:从待译码的序列中取出7个数s=temp*Ht; %注释:利用一致校验矩阵生成生成伴随式矢量if(s == Ht(k,:)) %注释:若S和Ht中的某一行相同,即有着相同的“错误图样”temp(k)=mod(temp(k)+1,2); %注释:就将收到的某一位进行模2加,进行纠错。

matlab编程fft变换,Matlab编程实现FFT变换及频谱分析的程序代码(喜欢进行

matlab编程fft变换,Matlab编程实现FFT变换及频谱分析的程序代码(喜欢进行

matlab编程fft变换,Matlab编程实现FFT变换及频谱分析的程序代码(喜欢进⾏Matlab编程实现FFT变换及频谱分析的程序代码(喜欢进⾏fgdgdfgdf 符合法规和法规和⼟壤突然图腾Matlab 编程实现 FFT 变换及 频谱分析的程序代码(喜欢进⾏电磁兼容仿真分析的朋友可以借⽤)内容1.⽤ Matlab 产⽣正弦波,矩形波,以及⽩噪声信号,并显⽰各⾃时域波形图2.进⾏ FFT 变换,显⽰各⾃频谱图,其中采样率,频率、数据长度⾃选3.做出上述三种信号的均⽅根图谱,功率图谱,以及对数均⽅根图谱4.⽤ IFFT 傅⽴叶反变换恢复信号,并显⽰恢复的正弦信号时域波形图源程序%*************************************************************************%% FFT 实践及频谱分析%%*************************************************************************%%*************************************************************************%%*************正弦波****************%fs=100;%设定采样频率N=128;n=0:N-1;t=n/fs;f0=10;%设定正弦信号频率%⽣成正弦信号x=sin(2*pi*f0*t);figure(1);subplot(231);plot(t,x);%作正弦信号的时域波形xlabel( t );ylabel( y );title( 正弦信号 y=2*pi*10t 时域波形);grid;%进⾏ FFT 变换并做频谱图y=fft(x,N);%进⾏ fft 变换mag=abs(y);%求幅值f=(0:length(y)-1) *fs/length(y);%进⾏对应的频率转换figure(1);subplot(232);plot(f,mag);%做频谱图axis([0,100,0,80]);xlabel( 频率(Hz) );ylabel( 幅值 );title( 正弦信号 y=2*pi*10t 幅频谱图 N=128 );grid;%求均⽅根谱sq=abs(y);figure(1);subplot(233);plot(f,sq);xlabel( 频率(Hz) );ylabel( 均⽅根谱 );title( 正弦信号y=2*pi*10t 均⽅根谱 );grid;%求功率谱power=sq.^2;figure(1);subplot(234);plot(f,power);xlabel( 频率(Hz) );ylabel( 功率谱 );title(正弦信号 y=2*pi*10t 功率谱 );grid;%求对数谱ln=log(sq);figure(1);subplot(235);plot(f,ln);xlabel( 频率(Hz) );ylabel( 对数谱 );title(正弦信号 y=2*pi*10t 对数谱 );grid;%⽤ IFFT 恢复原始信号xifft=ifft(y);magx=real(xifft);ti=[0:length(xifft)-1]/fs;figure(1);subplot(236);plot(ti,magx);xlabel( t );ylabel( y );title( 通过 IFFT 转换的正弦信号波形 );grid;%****************2.矩形波****************%fs=10;%设定采样频率t=-5:0.1:5;x=rectpuls(t,2);x=x(1:99);figure(2);subplot(231);plot(t(1:99),x);%作矩形波的时域波形xlabel( t );ylabel( y );title( 矩形波时域波形 );grid;%进⾏ FFT 变换并做频谱图y=fft(x);%进⾏ fft 变换mag=abs(y);%求幅值f=(0:length(y)-1) *fs/length(y);%进⾏对应的频率转换figure(2);subplot(232);plot(f,mag);%做频谱图xlabel( 频率(Hz) );ylabel( 幅值);title( 矩形波幅频谱图 );grid;%求均⽅根谱sq=abs(y);figure(2);subplot(233);plot(f,sq);xlabel( 频率(Hz) );ylabel( 均⽅根谱 );title( 矩形波均⽅根谱 );grid;%求功率谱power=sq.^2;figure(2);subplot(234);plot(f,power);xlabel( 频率(Hz) );ylabel( 功率谱 );title( 矩形波功率谱 );grid;%求对数谱ln=log(sq);figure(2);subplot(235);plot(f,ln);xlabel( 频率(Hz) );ylabel( 对数谱 );title( 矩形波对数谱 );grid;%⽤IFFT 恢复原始信号xifft=ifft(y);magx=real(xifft);ti=[0:length(xifft)-1]/fs;figure(2);subplot(236);plot(ti,magx);xlabel( t );ylabel( y);title( 通过 IFFT 转换的矩形波波形 );grid;%****************3.⽩噪声****************%fs=10;%设定采样频率t=-5:0.1:5;x=zeros(1,100);x(50)=100000;figure(3);subplot(231);plot(t(1:100),x);%作⽩噪声的时域波形xlabel( t );ylabel( y );title(⽩噪声时域波形 );grid;%进⾏ FFT 变换并做频谱图y=fft(x);%进⾏ fft 变换mag=abs(y);%求幅值f=(0:length(y)-1) *fs/length(y);%进⾏对应的频率转换figure(3);subplot(232);plot(f,mag);%做频谱图xlabel( 频率(Hz) );ylabel( 幅值 );title( ⽩噪声幅频谱图 );grid;%求均⽅根谱sq=abs(y);figure(3);subplot(233);plot(f,sq);xlabel( 频率(Hz) );ylabel( 均⽅根谱 );title( ⽩噪声均⽅根谱 );grid;%求功率谱power=sq.^2;figure(3);subplot(234);plot(f,power);xlabel( 频率(Hz) );ylabel( 功率谱 );title( ⽩噪声功率谱 );grid;%求对数谱ln=log(sq);figure(3);subplot(235);plot(f,ln);xlabel( 频率(Hz) );ylabel( 对数谱 );title( ⽩噪声对数谱 );grid;%⽤ IFFT 恢复原始信号xifft=ifft(y);m。

qpsk信号matlab仿真程序

qpsk信号matlab仿真程序

qpsk信号matlab仿真程序QPSK信号MATLAB仿真程序—理论与应用导言:随着无线通信技术的迅猛发展,QPSK(Quadrature Phase Shift Keying)信号成为了目前广泛应用于通信领域的一种调制方式。

本文将详细介绍如何使用MATLAB进行QPSK信号的仿真程序设计,并从理论与应用两个方面进行解析,以帮助读者深入理解并灵活应用该仿真程序。

1. 什么是QPSK信号?QPSK信号是一种基于相位调制的数字调制技术,其特点是将数字信号分成4个不同的相位状态进行传输和接收。

其中,每个相位状态代表2个比特的信息,即每个相位状态可以传输2个比特的信息,因此QPSK又被称为4相位调制。

QPSK信号可以通过泰勒展开可以分解成I(In-phase)分量和Q(Quadrature)分量。

2. MATLAB中的QPSK信号仿真程序设计步骤:(1)生成随机比特流。

在MATLAB中,可以使用randi函数生成一串随机的比特流,作为模拟发送端的输入信号。

(2)将比特流转换成QPSK符号。

将生成的比特流进行分组,每两个比特为一组,将每组比特映射到对应的QPSK符号。

一般而言,00表示的是第一象限的点,01表示的是第二象限的点,11表示的是第三象限的点,10表示的是第四象限的点。

(3)通过QPSK符号产生QPSK信号。

通过对每个QPSK符号进行相位调制,可以得到QPSK信号。

(4)添加高斯噪声。

为了模拟仿真实际通信环境,我们需要向信号中添加高斯噪声。

可以使用randn函数生成指定均值和标准差的高斯噪声信号,并将其与QPSK信号相加。

(5)解调QPSK信号。

在接收端,需要进行相位解调操作,从而恢复原始的比特流。

通过解调操作,将接收到的QPSK信号恢复为I和Q两个分量。

(6)计算误码率。

通过比较原始比特流和解调后的比特流,可以统计出误码率,从而评估通信系统的性能。

3. QPSK信号仿真程序的理论分析:对于QPSK信号,可以利用复数域的理论进行分析。

认知无线电频谱感知之功率检测matlab代码

认知无线电频谱感知之功率检测matlab代码

能量检测仿真实验代码:clear all;clc;n = 5;ps = 1;SNR1 = -5;SNR2 = -8;SNR3 = -10;% Sim_Times=10000; %Monter-Carlo times% m=5;T=0.001;% 信号带宽WW=5*10^4;% 采样频率Fs = 2*W;m = T*W;n = 2*T*W;% F0=W;% Fs=2;% Sig=sqrt(2)*sin(2*pi*F0/Fs*t); %single tone samples, Fs=2F0 % 实际信噪比snr1 = 10.^(SNR1/10);snr2 = 10.^(SNR2/10);snr3 = 10.^(SNR3/10);pn = (1/snr1)*ps;mu0 = n*pn;sigma0 = sqrt(2*n)*pn;mu = n*(pn+ps);sigma = sqrt(2*n*(pn^2+2*pn*ps));% [noi,x0,mu0,sigma0,m0] = cnoi( n,pn );% sig = randn(n,1);sig = 1;% 重复次数count = 5000;% 能量检测判决门限lambda = [200:20:600];lambda1 = [500:20:900];lambda2 = [700:30:1300];% 置信度判决参数% tt = [-5:0.4:3];% cc = 10.^tt;% tt1 = [-1:0.1:1];% cc1 = 10.^tt;% cc2 = [-0.01:0.001:0.01];for kk = 1:1:length(lambda);ff = 0;dd = 0;ff1 = 0;dd1 = 0;ff2 = 0;dd2 = 0;for ii=1:1:count;t = (kk-1)*n+1:kk*n;init_phase = 1/6*pi;sig=2*sin(2*pi*W/Fs*t+init_phase); %sig=1;%dot(sig,sig)/nnoi1 = randn(1,n);noi1 = sqrt(1/snr1)*noi1;rec1 = noi1 + sig;noi2 = randn(1,n);noi2 = sqrt(1/snr2)*noi2;rec2 = noi2 + sig;noi3 = randn(1,n);noi3 = sqrt(1/snr3)*noi3;rec3 = noi3 + sig;sum0_1 = dot(noi1,noi1);sum0_2 = dot(noi2,noi2);sum0_3 = dot(noi3,noi3);sum1_1 = dot(rec1,rec1);sum1_2 = dot(rec2,rec2);sum1_3 = dot(rec3,rec3);%单用户能量检测判决if (sum0_1 > lambda(kk));ff = ff+1;endif (sum1_1 > lambda(kk));dd = dd+1;endif (sum0_2 > lambda1(kk));ff1 = ff1+1;endif (sum1_2 > lambda1(kk));dd1 = dd1+1;endif (sum0_3 > lambda2(kk));ff2 = ff2+1;endif (sum1_3 > lambda2(kk));dd2 = dd2+1;endendPd_1(kk) = dd/count;Pf_1(kk) = ff/count;Pd_2(kk) = dd1/count;Pf_2(kk) = ff1/count;Pd_3(kk) = dd2/count;Pf_3(kk) = ff2/count;endplot(Pf_1,Pd_1,'-o',Pf_2,Pd_2,'-s',Pf_3,Pd_3,'-*');hold on;grid on;xlabel('False alarm probability, P_{Fa}');ylabel('Detection probability, P_{d}');legend('能量检测SNR=-5dB,n=100','能量检测SNR=-8dB,n=100','能量检测SNR=-10dB,n=100');grid on;hold on;。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

clearclc%rand('twister',1);blockpu=[];blocksu=[];for N=3:2:7block=[];for lambdap =0.01:0.05:0.5%*****************************************%假设 1. CR网络和主网络(授权网络)共同存在于同一区域,并且使用同一频段。

假设该频段共有N个信道,每个主用户或CR用户每次接入只占用一个信道。

% 若所有信道均被主用户占用,此时CR用户到达就被阻塞。

若CR用户正在使用的信道有主用户出现,此时CR用户被迫中断,并进入缓存区排队等待% 空闲可用信道以继续刚被中断的通信,若等待超过一定时限,则判定CR用户强制中断退离缓存区。

% 故共有三个队列,分别表示如下:% X队列——主用户队列,抢占优先,优先级最高% Y队列——次用户队列,优先级最低% Z队列——次用户切换队列,优先级次高,若在时延Tao内,则较次用户队列优先接入可用信道% 2. 主用户和次用户的到达服从泊松分布,参数分别为lambdap和lambdas,平均服务时间服从参数为mup和mus的负指数分布% 3. 对次用户而言,主用户抢占优先。

总共有N个信道,也就是最多可以有N个主用户抢占所有信道,% 故Z队列的长度不会超过N,这里给定Z队列长度为N。

% 4. 假设初始状态所有N个信道均空闲,次用户理想感知,感知延时为0.005%*****************************************% 2009年10月12日10月25日%*****************************************%初始化%*****************************************a = 100; %主用户数量b = 100; %次用户数量%N =3 %Z队列最大长度/总的信道数%Tao=5%切换时延门限TaoA = [ ]; %某主用户到达时刻占用信道序号的集合B = [ ]; %某次用户到达时刻占用信道序号的集合C = [ ]; %切换用户占用的当前所有信道序号集合D = [ ]; %某次用户到达时刻主用户占用信道集合member = [ ];member_CR = [ ];j1=1;%主用户参数*****************************************%lambdap = 0.3; %主用户到达率mup =0.4; %主用户服务率arr_meanp = 1/lambdap; %主用户平均到达时间ser_meanp = 1/mup;%主用户平均服务时间arr_nump = a; %round(Total_time*lambdap*2);tp = zeros(6,arr_nump);tp(1,:) = exprnd(arr_meanp,1,arr_nump); %按负指数分布产生各主用户到达时间间隔tp(1,:) = cumsum(tp(1,:)); %各主用户的到达时刻等于时间间隔的累积和tp(2,:) = exprnd(ser_meanp,1,arr_nump); %按负指数分布产生各主用户服务时间%次用户参数*****************************************lambdas =0.4;mus =0.6; %次用户到达率与服务率arr_means = 1/lambdas;ser_means = 1/mus; %次用户平均到达时间与平均服务时间arr_nums = b;ts = zeros(6,arr_nums);ts(1,:) = exprnd(arr_means,1,arr_nums); %按负指数分布产生各次用户达到时间间隔ts(1,:) = cumsum(ts(1,:)); %各次用户的到达时刻等于时间间隔的累积和ts(2,:) = exprnd(ser_means,1,arr_nums); %按负指数分布产生各次用户服务时间%切换用户参数*****************************************待计算lambdah和muh arr_numh = 10; %切换用户排队长度设置th = zeros(6,arr_numh);tsh=[];%*****************************************%计算第1个主用户的信息%*****************************************if arr_nump>=1tp(3,1) = 0; %第1个主用户进入系统后直接接受服务,无需等待n = ceil(rand*N); %产生一个在N范围内的随机数作为接入的信道序号tp(4,1) = tp(1,1)+tp(2,1); %其离开时刻等于其到达时刻与服务时间之和tp(5,1) = 1; %其肯定被系统接纳,此时系统内共有1个主用户,故标志位置1tp(6,1) = n; %依次记录主用户占用信道的序号A=[A n];member = [1]; %其进入系统后,系统内已有成员序号为1else!echo No Primary Usersend%*****************************************if arr_nums>=1if arr_nump>=1k1 = sum(ts(1,:) < tp(1,1));if k1~=0for i =1:k1if i==1ts(3,i) = 0.005; %其等待时间为0ts(4,i) = ts(1,i)+ts(2,i)+ts(3,i); %其离开时刻等于到达时刻与服务时间之和ts(5,i) = 1; %其标志位置1 ,即次用户在用当前信道m = ceil(rand*N); %产生一个在N范围内的随机数作为接入的信道序号ts(6,i) = m; %依次记录次用户占用信道的序号B=[B m];member_CR =[1];handoff1=find(tp(1,:)>ts(1,i));handoff2=find(tp(1,:)<ts(4,i));if isempty(handoff1)==0&&isempty(handoff2)==0handoff3=setdiff(handoff1,handoff2);%当前次用户通信期间(时间段)到达的主用户handoff=setdiff(handoff1,handoff3);handoff4=[];for puid=1:length(handoff)if tp(6,handoff(puid))==ts(6,i)handoff4=[handoff4,handoff(puid)];break;endendif isempty(handoff4)==0if j1<=arr_numhth(1,j1)=tp(1,handoff4(1));th(2,j1)=ts(4,i)-tp(1,handoff4(1));ts(4,i)=tp(1,handoff4(1));tsh=ts(:,i);%切换到其他可用信道num_arrivep=find(tp(1,:)<=th(1,j1));num_leavep=find(tp(4,:)>=th(1,j1));num_present1=setdiff(num_arrivep,num_leavep);num_present2=setdiff(num_arrivep,num_present1);%当前在的主用户num_arrives=find(ts(1,:)<th(1,j1));num_leaves=find(ts(4,:)>th(1,j1));num_present3=setdiff(num_arrives,num_leaves);num_present4=setdiff(num_arrives,num_present3);%当前在的次用户num_present6=[];wait=0;if j1>1j2=1:j1-1;num_arriveh=find(th(1,j2)<th(1,j1));num_leaveh=find(th(4,j2)>th(1,j1));num_present5=setdiff(num_arriveh,num_leaveh);num_present6=setdiff(num_arriveh,num_present5);%当前在的切换用户for j3=1:length(num_present6)wait=wait+th(3,num_present6(j3));endth(3,j1)=wait;%切换用户排队等待时间endif length(num_present2)==Nwait1=tp(4,num_present2(1));for k=1:length(num_present2)wait1=min(tp(4,num_present2(k)),wait1);endfor k=1:length(num_present2)if wait1==tp(4,num_present2(k))wait2=num_present2(k);break;endendth(3,j1)=wait1-th(1,j1)+th(3,j1);th(4,j1)=th(1,j1)+th(2,j1)+th(3,j1);th(5,j1)=1;th(6,j1)=tp(6,wait2);tsh=[tsh,th(:,j1)];elseif isempty(num_present2)&&length(num_present4)==Nwait1=ts(4,num_present4(1));for k=1:length(num_present4)wait1=min(ts(4,num_present4(k)),wait1);endfor k=1:length(num_present4)if wait1==ts(4,num_present4(k))wait3=num_present4(k);break;endendth(3,j1)=wait1-th(1,j1)+th(3,j1);th(4,j1)=th(1,j1)+th(2,j1)+th(3,j1);th(5,j1)=1;th(6,j1)=ts(6,wait3);tsh=[tsh,th(:,j1)];elseiflength(num_present2)+length(num_present4)==N&&isempty(num_present2)==0&&isempty(nu m_present4)==0wait1=tp(4,num_present2(1));for k=1:length(num_present2)wait1=min(tp(4,num_present2(k)),wait1);endfor k=1:length(num_present4)wait1=min(ts(4,num_present4(k)),wait1);endtps=[tp(:,num_present2),ts(:,num_present4)];for k=1:length(tps)if wait1==tps(4,k)wait4=k;break;endendth(3,j1)=wait1-th(1,j1)+th(3,j1);th(4,j1)=th(1,j1)+th(2,j1)+th(3,j1);th(5,j1)=1;th(6,j1)=tps(6,wait4);tsh=[tsh,th(:,j1)];elseif length(num_present2)+length(num_present4)<Nchannel1=[tp(6,num_present2),ts(6,num_present4)];channel=setdiff([1:N],channel1);th(3,j1)=0.006+th(3,j1);th(4,j1)=th(1,j1)+th(2,j1)+th(3,j1);th(5,j1)=1;th(6,j1)=channel(1);tsh=[tsh,th(:,j1)];endj1=j1+1;endendendelseif i >= 2j=1:i-1;number_CR = find(ts(4,j) > ts(1,i)); %当前占用信道的次用户个数[th1,th2]=find(th==0);th(:,th2)=[];if isempty(number_CR)&&isempty(th)m = ceil(rand*N); %产生一个在N范围内的随机数作为接入的信道序号ts(3,i) = 0.005;ts(4,i) = ts(1,i)+ts(2,i)+ts(3,i); %其离开时刻等于到达时刻与服务时间之和ts(5,i) = 1; %其标志位置1 ,即次用户在用当前信道ts(6,i) = m; %依次记录次用户占用信道的序号B=[B m];member_CR = [member_CR,i];handoff1=find(tp(1,:)>ts(1,i));handoff2=find(tp(1,:)<ts(4,i));if isempty(handoff1)==0&&isempty(handoff2)==0handoff3=setdiff(handoff1,handoff2);%当前次用户通信期间(时间段)到达的主用户handoff=setdiff(handoff1,handoff3);handoff4=[];for puid=1:length(handoff)if tp(6,handoff(puid))==ts(6,i)handoff4=[handoff4,handoff(puid)];break;endendif isempty(handoff4)==0if j1<=arr_numhth(1,j1)=tp(1,handoff4(1));th(2,j1)=ts(4,i)-tp(1,handoff4(1));ts(4,i)=tp(1,handoff4(1));tsh=[tsh,ts(:,i)];%切换到其他可用信道num_arrivep=find(tp(1,:)<=th(1,j1));num_leavep=find(tp(4,:)>=th(1,j1));num_present1=setdiff(num_arrivep,num_leavep);num_present2=setdiff(num_arrivep,num_present1);%当前在的主用户num_arrives=find(ts(1,:)<th(1,j1));num_leaves=find(ts(4,:)>th(1,j1));num_present3=setdiff(num_arrives,num_leaves);num_present4=setdiff(num_arrives,num_present3);%当前在的次用户num_present6=[];wait=0;if j1>1j2=1:j1-1;num_arriveh=find(th(1,j2)<th(1,j1));num_leaveh=find(th(4,j2)>th(1,j1));num_present5=setdiff(num_arriveh,num_leaveh);num_present6=setdiff(num_arriveh,num_present5);%当前在的切换用户for j3=1:length(num_present6)wait=wait+th(3,num_present6(j3));endth(3,j1)=wait;%切换用户排队等待时间endif length(num_present2)==Nwait1=tp(4,num_present2(1));for k=1:length(num_present2)wait1=min(tp(4,num_present2(k)),wait1);endfor k=1:length(num_present2)if wait1==tp(4,num_present2(k))wait2=num_present2(k);break;endendth(3,j1)=wait1-th(1,j1)+th(3,j1);th(4,j1)=th(1,j1)+th(2,j1)+th(3,j1);th(5,j1)=1;th(6,j1)=tp(6,wait2);tsh=[tsh,th(:,j1)];elseif isempty(num_present2)&&length(num_present4)==Nwait1=ts(4,num_present4(1));for k=1:length(num_present4)wait1=min(ts(4,num_present4(k)),wait1);endfor k=1:length(num_present4)if wait1==ts(4,num_present4(k))wait3=num_present4(k);break;endendth(3,j1)=wait1-th(1,j1)+th(3,j1);th(4,j1)=th(1,j1)+th(2,j1)+th(3,j1);th(5,j1)=1;th(6,j1)=ts(6,wait3);tsh=[tsh,th(:,j1)];elseiflength(num_present2)+length(num_present4)==N&&isempty(num_present2)==0&&isempty(nu m_present4)==0wait1=tp(4,num_present2(1));for k=1:length(num_present2)wait1=min(tp(4,num_present2(k)),wait1);endfor k=1:length(num_present4)wait1=min(ts(4,num_present4(k)),wait1);endtps=[tp(:,num_present2),ts(:,num_present4)];for k=1:length(tps)if wait1==tps(4,k)wait4=k;break;endendth(3,j1)=wait1-th(1,j1)+th(3,j1);th(4,j1)=th(1,j1)+th(2,j1)+th(3,j1);th(5,j1)=1;th(6,j1)=tps(6,wait4);tsh=[tsh,th(:,j1)];elseif length(num_present2)+length(num_present4)<Nchannel1=[tp(6,num_present2),ts(6,num_present4)];channel=setdiff([1:N],channel1);th(3,j1)=0.006+th(3,j1);th(4,j1)=th(1,j1)+th(2,j1)+th(3,j1);th(5,j1)=1;th(6,j1)=channel(1);tsh=[tsh,th(:,j1)];endj1=j1+1;endendendelseif length(number_CR)+length(th(1,:))>0&&length(number_CR)+length(th(1,:))<N m = ceil(rand*N); %产生一个在N范围内的随机数作为接入的信道序号while any(m == ts(6,number_CR))&&any(m == th(6,:))m = ceil(rand*N);endts(3,i) = 0.005;ts(4,i) = ts(1,i)+ts(2,i)+ts(3,i); %其离开时刻等于到达时刻与服务时间之和ts(5,i) = 1; %其标志位置1 ,即次用户在用当前信道ts(6,i) = m; %依次记录次用户占用信道的序号B=[B m];member_CR = [member_CR,i]; %如果系统有次用户正在接受服务,且系统等待队列未满,则第i个次用户进入系统handoff1=find(tp(1,:)>ts(1,i));handoff2=find(tp(1,:)<ts(4,i));if isempty(handoff1)==0&&isempty(handoff2)==0handoff3=setdiff(handoff1,handoff2);%当前次用户通信期间(时间段)到达的主用户handoff=setdiff(handoff1,handoff3);handoff4=[];for puid=1:length(handoff)if tp(6,handoff(puid))==ts(6,i)handoff4=[handoff4,handoff(puid)];break;endendif isempty(handoff4)==0if j1<=arr_numhth(1,j1)=tp(1,handoff4(1));th(2,j1)=ts(4,i)-tp(1,handoff4(1));ts(4,i)=tp(1,handoff4(1));tsh=[tsh,ts(:,i)];%切换到其他可用信道num_arrivep=find(tp(1,:)<=th(1,j1));num_leavep=find(tp(4,:)>=th(1,j1));num_present1=setdiff(num_arrivep,num_leavep);num_present2=setdiff(num_arrivep,num_present1);%当前在的主用户num_arrives=find(ts(1,:)<th(1,j1));num_leaves=find(ts(4,:)>th(1,j1));num_present3=setdiff(num_arrives,num_leaves);num_present4=setdiff(num_arrives,num_present3);%当前在的次用户num_present6=[];wait=0;if j1>1j2=1:j1-1;num_arriveh=find(th(1,j2)<th(1,j1));num_leaveh=find(th(4,j2)>th(1,j1));num_present5=setdiff(num_arriveh,num_leaveh);num_present6=setdiff(num_arriveh,num_present5);%当前在的切换用户for j3=1:length(num_present6)wait=wait+th(3,num_present6(j3));endth(3,j1)=wait;%切换用户排队等待时间endif length(num_present2)==Nwait1=tp(4,num_present2(1));for k=1:length(num_present2)wait1=min(tp(4,num_present2(k)),wait1);endfor k=1:length(num_present2)if wait1==tp(4,num_present2(k))wait2=num_present2(k);break;endendth(3,j1)=wait1-th(1,j1)+th(3,j1);th(4,j1)=th(1,j1)+th(2,j1)+th(3,j1);th(5,j1)=1;th(6,j1)=tp(6,wait2);tsh=[tsh,th(:,j1)];elseif isempty(num_present2)&&length(num_present4)==Nwait1=ts(4,num_present4(1));for k=1:length(num_present4)wait1=min(ts(4,num_present4(k)),wait1);endfor k=1:length(num_present4)if wait1==ts(4,num_present4(k))wait3=num_present4(k);break;endendth(3,j1)=wait1-th(1,j1)+th(3,j1);th(4,j1)=th(1,j1)+th(2,j1)+th(3,j1);th(5,j1)=1;th(6,j1)=ts(6,wait3);tsh=[tsh,th(:,j1)];elseiflength(num_present2)+length(num_present4)==N&&isempty(num_present2)==0&&isempty(nu m_present4)==0wait1=tp(4,num_present2(1));for k=1:length(num_present2)wait1=min(tp(4,num_present2(k)),wait1);endfor k=1:length(num_present4)wait1=min(ts(4,num_present4(k)),wait1);endtps=[tp(:,num_present2),ts(:,num_present4)];for k=1:length(tps)if wait1==tps(4,k)wait4=k;break;endendth(3,j1)=wait1-th(1,j1)+th(3,j1);th(4,j1)=th(1,j1)+th(2,j1)+th(3,j1);th(5,j1)=1;th(6,j1)=tps(6,wait4);tsh=[tsh,th(:,j1)];elseif length(num_present2)+length(num_present4)<Nchannel1=[tp(6,num_present2),ts(6,num_present4)];channel=setdiff([1:N],channel1);th(3,j1)=0.006+th(3,j1);th(4,j1)=th(1,j1)+th(2,j1)+th(3,j1);th(5,j1)=1;th(6,j1)=channel(1);tsh=[tsh,th(:,j1)];endj1=j1+1;endendelseif number_CR+length(th(1,:)) >= N %如果系统已满,则系统拒绝第i个次用户,其标志位置0 //次用户阻塞ts(5,i) = 0; %其标志位置0 ,即次用户在用当前信道endendendendelse%***********************第一个次用户到达信息ts(3,1) = 0.005; %其等待时间为0ts(4,1) = ts(1,1)+ts(2,1)+ts(3,1); %其离开时刻等于到达时刻与服务时间之和ts(5,1) = 1; %其标志位置1 ,即次用户在用当前信道m = ceil(rand*N); %产生一个在N范围内的随机数作为接入的信道序号ts(6,1) = m; %依次记录次用户占用信道的序号B=[B m];member_CR =[1];%************************第一个之后的次用户到达信息for i = 2:arr_numsnumber = find(ts(4,:) > ts(1,i)); %当前占用信道的主用户个数if isempty(number) %如果系统为空,则第i个主用户直接接受服务m = ceil(rand*N); %产生一个在N范围内的随机数作为接入的信道序号ts(3,i)=0.005;ts(4,i)=ts(1,i)+ts(2,i)+ts(3,1); %其离开时刻等于到达时刻与服务时间之和ts(5,i) = 1; %其标志位置1ts(6,i) = m; %依次记录主用户占用信道的序号B=[B m];member_CR = [member_CR,i]; %如果系统有主用户正在接受服务,且系统等待队列未满,则第i个主用户进入系统elseif isempty(number)==0&&length(number)<Nm = ceil(rand*N); %产生一个在N范围内的随机数作为接入的信道序号while any(m==ts(6,number))m = ceil(rand*N);endts(3,i)=0.005;ts(4,i)=ts(1,i)+ts(2,i)+ts(3,1); %其离开时刻等于到达时刻与服务时间之和ts(5,i) = 1; %其标志位置1ts(6,i) = m; %依次记录主用户占用信道的序号B=[B m];member_CR = [member_CR,i]; %如果系统有主用户正在接受服务,且系统等待队列未满,则第i个主用户进入系统elseif length(number) >= N %如果系统已满,则系统拒绝第i个主用户,其标志位置0 //主用户阻塞ts(5,i) = 1; %其标志位置1 ,即主用户在用当前信道endendelse!echo No Cognitive Radio Usersend%*****************************************以上是第一个主用户到达时刻之前可能到达的次用户信息OK 10月26日%*****************************************以下是第一个主用户之后到达的主用户信息if arr_nump>=1for i = 2:arr_numpnumber = find(tp(4,:) > tp(1,i)); %当前占用信道的主用户个数if isempty(number)==1 %如果系统为空,则第i个主用户直接接受服务n = ceil(rand*N); %产生一个在N范围内的随机数作为接入的信道序号tp(3,i)=0;tp(4,i)=tp(1,i)+tp(2,i); %其离开时刻等于到达时刻与服务时间之和tp(5,i) = 1; %其标志位置1tp(6,i) = n; %依次记录主用户占用信道的序号A=[A n];member = [member,i]; %如果系统有主用户正在接受服务,且系统等待队列未满,则第i个主用户进入系统elseif isempty(number)==0&&length(number)<Nn = ceil(rand*N); %产生一个在N范围内的随机数作为接入的信道序号while any(n==tp(6,number))n = ceil(rand*N);endtp(3,i)=0;tp(4,i)=tp(1,i)+tp(2,i); %其离开时刻等于到达时刻与服务时间之和tp(5,i) = 1; %其标志位置1tp(6,i) = n; %依次记录主用户占用信道的序号A=[A n];member = [member,i]; %如果系统有主用户正在接受服务,且系统等待队列未满,则第i个主用户进入系统elseif length(number) >= N %如果系统已满,则系统拒绝第i个主用户,其标志位置0 //主用户阻塞tp(5,i) = 0; %其标志位置1 ,即主用户在用当前信道endendendif arr_nump>=1&&arr_nums>=1if tp(4,end)>=ts(1,end)arr_numss=arr_nums;elsexxx=find(ts(1,:)<=tp(1,end));arr_numss=xxx(end);endif k1<arr_numsj = k1+1;for i=2:arr_numpnum_arrive=find(tp(1,:)<ts(1,j));num_leave=find(tp(4,:)>ts(1,j));num_P=[];num_S=[];for num=1:length(num_arrive)if any(num_arrive(num)==num_leave)num_P=[num_P,num_arrive(num)];endendif k1~=0y=1:j-1;num_S=find(ts(4,y) > ts(1,j)); %当前ts(1,p)时刻占用信道的次用户个数end[th1,th2]=find(th==0);th(:,th2)=[];if isempty(num_S)&&isempty(num_P)&&isempty(th)m = ceil(rand*N); %产生一个在N范围内的随机数作为接入的信道序号ts(3,j) = 0.005;ts(4,j) = ts(1,j)+ts(2,j)+ts(3,j); %其离开时刻等于到达时刻与服务时间之和ts(5,j) = 1; %其标志位置1ts(6,j) = m; %依次记录次用户占用信道的序号B=[B m];member_CR = [member_CR,j]; %如果系统有次用户正在接受服务,且系统等待队列未满,则第c个次用户进入系统handoff1=find(tp(1,:)>ts(1,j));handoff2=find(tp(1,:)<ts(4,j));if isempty(handoff1)==0&&isempty(handoff2)==0handoff3=setdiff(handoff1,handoff2);%当前次用户通信期间(时间段)到达的主用户handoff=setdiff(handoff1,handoff3);handoff4=[];for puid=1:length(handoff)if tp(6,handoff(puid))==ts(6,j)handoff4=[handoff4,handoff(puid)];break;endendif isempty(handoff4)==0if j1<=arr_numhth(1,j1)=tp(1,handoff4(1));th(2,j1)=ts(4,j)-tp(1,handoff4(1));ts(4,j)=tp(1,handoff4(1));tsh=[tsh,ts(:,i)];%切换到其他可用信道num_arrivep=find(tp(1,:)<=th(1,j1));num_leavep=find(tp(4,:)>=th(1,j1));num_present1=setdiff(num_arrivep,num_leavep);num_present2=setdiff(num_arrivep,num_present1);%当前在的主用户num_arrives=find(ts(1,:)<th(1,j1));num_leaves=find(ts(4,:)>th(1,j1));num_present3=setdiff(num_arrives,num_leaves);num_present4=setdiff(num_arrives,num_present3);%当前在的次用户num_present6=[];wait=0;if j1>1j2=1:j1-1;num_arriveh=find(th(1,j2)<th(1,j1));num_leaveh=find(th(4,j2)>th(1,j1));num_present5=setdiff(num_arriveh,num_leaveh);num_present6=setdiff(num_arriveh,num_present5);%当前在的切换用户for j3=1:length(num_present6)wait=wait+th(3,num_present6(j3));endth(3,j1)=wait;%切换用户排队等待时间endif length(num_present2)==Nwait1=tp(4,num_present2(1));for k=1:length(num_present2)wait1=min(tp(4,num_present2(k)),wait1);endfor k=1:length(num_present2)if wait1==tp(4,num_present2(k))wait2=num_present2(k);break;endendth(3,j1)=wait1-th(1,j1)+th(3,j1);th(4,j1)=th(1,j1)+th(2,j1)+th(3,j1);th(5,j1)=1;th(6,j1)=tp(6,wait2);tsh=[tsh,th(:,j1)];elseif isempty(num_present2)&&length(num_present4)==Nwait1=ts(4,num_present4(1));for k=1:length(num_present4)wait1=min(ts(4,num_present4(k)),wait1);endfor k=1:length(num_present4)if wait1==ts(4,num_present4(k))wait3=num_present4(k);break;endendth(3,j1)=wait1-th(1,j1)+th(3,j1);th(4,j1)=th(1,j1)+th(2,j1)+th(3,j1);th(5,j1)=1;th(6,j1)=ts(6,wait3);tsh=[tsh,th(:,j1)];elseiflength(num_present2)+length(num_present4)==N&&isempty(num_present2)==0&&isempty(nu m_present4)==0wait1=tp(4,num_present2(1));for k=1:length(num_present2)wait1=min(tp(4,num_present2(k)),wait1);endfor k=1:length(num_present4)wait1=min(ts(4,num_present4(k)),wait1);endtps=[tp(:,num_present2),ts(:,num_present4)];for k=1:length(tps)if wait1==tps(4,k)wait4=k;break;endendth(3,j1)=wait1-th(1,j1)+th(3,j1);th(4,j1)=th(1,j1)+th(2,j1)+th(3,j1);th(5,j1)=1;th(6,j1)=tps(6,wait4);tsh=[tsh,th(:,j1)];elseif length(num_present2)+length(num_present4)<Nchannel1=[tp(6,num_present2),ts(6,num_present4)];channel=setdiff([1:N],channel1);th(3,j1)=0.006+th(3,j1);th(4,j1)=th(1,j1)+th(2,j1)+th(3,j1);th(5,j1)=1;th(6,j1)=channel(1);tsh=[tsh,th(:,j1)];endj1=j1+1;endendendelseiflength(num_S)+length(num_P)+length(th(1,:))>0&&length(num_S)+length(num_P)+length(th(1,: ))< Nm = ceil(rand*N);while any(m == tp(6,num_P))&&any(m == ts(6,num_S))&&any(m == th(6,:)) m = ceil(rand*N);endts(3,j) = 0.005;ts(4,j) = ts(1,j)+ts(2,j)+ts(3,j); %其离开时刻等于到达时刻与服务时间之和ts(5,j) = 1; %其标志位置1ts(6,j) = m; %依次记录次用户占用信道的序号B=[B m];member_CR = [member_CR,j];handoff1=find(tp(1,:)>ts(1,j));handoff2=find(tp(1,:)<ts(4,j));if isempty(handoff1)==0&&isempty(handoff2)==0handoff3=setdiff(handoff1,handoff2);%当前次用户通信期间(时间段)到达的主用户handoff=setdiff(handoff1,handoff3);handoff4=[];for puid=1:length(handoff)if tp(6,handoff(puid))==ts(6,j)handoff4=[handoff4,handoff(puid)];break;endendif isempty(handoff4)==0if j1<=arr_numhth(1,j1)=tp(1,handoff4(1));th(2,j1)=ts(4,j)-tp(1,handoff4(1));ts(4,j)=tp(1,handoff4(1));tsh=[tsh,ts(:,i)];%切换到其他可用信道num_arrivep=find(tp(1,:)<=th(1,j1));num_leavep=find(tp(4,:)>=th(1,j1));num_present1=setdiff(num_arrivep,num_leavep);num_present2=setdiff(num_arrivep,num_present1);%当前在的主用户num_arrives=find(ts(1,:)<th(1,j1));num_leaves=find(ts(4,:)>th(1,j1));num_present3=setdiff(num_arrives,num_leaves);num_present4=setdiff(num_arrives,num_present3);%当前在的次用户num_present6=[];wait=0;if j1>1j2=1:j1-1;num_arriveh=find(th(1,j2)<th(1,j1));num_leaveh=find(th(4,j2)>th(1,j1));num_present5=setdiff(num_arriveh,num_leaveh);num_present6=setdiff(num_arriveh,num_present5);%当前在的切换用户for j3=1:length(num_present6)wait=wait+th(3,num_present6(j3));endth(3,j1)=wait;%切换用户排队等待时间endif length(num_present2)==Nwait1=tp(4,num_present2(1));for k=1:length(num_present2)wait1=min(tp(4,num_present2(k)),wait1);endfor k=1:length(num_present2)if wait1==tp(4,num_present2(k))wait2=num_present2(k);break;endendth(3,j1)=wait1-th(1,j1)+th(3,j1);th(4,j1)=th(1,j1)+th(2,j1)+th(3,j1);th(5,j1)=1;th(6,j1)=tp(6,wait2);tsh=[tsh,th(:,j1)];elseif isempty(num_present2)&&length(num_present4)==Nwait1=ts(4,num_present4(1));for k=1:length(num_present4)wait1=min(ts(4,num_present4(k)),wait1);endfor k=1:length(num_present4)if wait1==ts(4,num_present4(k))wait3=num_present4(k);break;endendth(3,j1)=wait1-th(1,j1)+th(3,j1);th(4,j1)=th(1,j1)+th(2,j1)+th(3,j1);th(5,j1)=1;th(6,j1)=ts(6,wait3);tsh=[tsh,th(:,j1)];elseiflength(num_present2)+length(num_present4)==N&&isempty(num_present2)==0&&isempty(nu m_present4)==0wait1=tp(4,num_present2(1));for k=1:length(num_present2)wait1=min(tp(4,num_present2(k)),wait1);endfor k=1:length(num_present4)wait1=min(ts(4,num_present4(k)),wait1);endtps=[tp(:,num_present2),ts(:,num_present4)];for k=1:length(tps)if wait1==tps(4,k)wait4=k;break;endendth(3,j1)=wait1-th(1,j1)+th(3,j1);th(4,j1)=th(1,j1)+th(2,j1)+th(3,j1);th(5,j1)=1;th(6,j1)=tps(6,wait4);tsh=[tsh,th(:,j1)];elseif length(num_present2)+length(num_present4)<Nchannel1=[tp(6,num_present2),ts(6,num_present4)];channel=setdiff([1:N],channel1);th(3,j1)=0.006+th(3,j1);th(4,j1)=th(1,j1)+th(2,j1)+th(3,j1);th(5,j1)=1;th(6,j1)=channel(1);tsh=[tsh,th(:,j1)];endj1=j1+1;endendendelseif (length(num_P)+length(num_S))+length(th(1,:))>=N %如果系统已满,则系统拒绝第i个次用户接入,其标志位置0 //次用户阻塞ts(5,j)=0;endif j<arr_numssj=j+1;endendif arr_numss<arr_numsfor i = arr_numss+1:arr_numsnumber = find(ts(4,:) > ts(1,i)); %当前占用信道的主用户个数if isempty(number) %如果系统为空,则第i个主用户直接接受服务m = ceil(rand*N); %产生一个在N范围内的随机数作为接入的信道序号ts(3,i)=0.005;ts(4,i)=ts(1,i)+ts(2,i)+ts(3,1); %其离开时刻等于到达时刻与服务时间之和ts(5,i) = 1; %其标志位置1ts(6,i) = m; %依次记录主用户占用信道的序号B=[B m];member_CR = [member_CR,i]; %如果系统有主用户正在接受服务,且系统等待队列未满,则第i个主用户进入系统elseif isempty(number)==0&&length(number)<Nm = ceil(rand*N); %产生一个在N范围内的随机数作为接入的信道序号while any(m==ts(6,number))m = ceil(rand*N);endts(3,i)=0.005;ts(4,i)=ts(1,i)+ts(2,i)+ts(3,1); %其离开时刻等于到达时刻与服务时间之和ts(5,i) = 1; %其标志位置1ts(6,i) = m; %依次记录主用户占用信道的序号B=[B m];member_CR = [member_CR,i]; %如果系统有主用户正在接受服务,且系统等待队列未满,则第i个主用户进入系统elseif length(number) >= N %如果系统已满,则系统拒绝第i个主用户,其标志位置0 //主用户阻塞ts(5,i) = 1; %其标志位置1 ,即主用户在用当前信道endendendend%......................................................................%仿真结束时,进入系统的总主用户数和总次用户数len_X = length(member);len_CR = length(member_CR);%*****************************************%输出结果%*****************************************%绘制进入系统的所有主用户和次用户的到达时刻和离开时刻曲线图(plot:绘制二维线性图,stairs:绘制二维阶梯图)subplot(2,1,1);plot([0 tp(1,member)],0:len_X);%绘出各主用户的到达时间图;hold on;plot([0 tp(4,member)],0:len_X,'r');grid on;%绘出各主用户的离去时间图;xlabel('Time/ms');ylabel('Number of PU');legend('PU Arrive curve','PU leave curve')title 'Primary Users Arrive Time and Leave Time';hold off;subplot(2,1,2);%绘出各次用户的到达时间图;plot([0 ts(1,member_CR)],0:len_CR,'r-*');hold on;%绘出各次用户的离去时间图;plot([0 ts(4,member_CR)],0:len_CR,'g-');grid on;xlabel('Time/s');ylabel('Number of CU');legend('CU Arrive curve','CU leave curve ')title 'Cognitive Users Arrive Time and Leave Time';hold off;%*******************************************%*******************************************%绘出次用户的停留时间;figure(2);%figure;%subplot(3,1,3);plot(1: len_CR,ts(2,member_CR)+ts(3,member_CR),'g-');grid on;legend('CU Stay Time');xlabel('Number of CU');ylabel('Time/s');title 'Cognitive Users Stay Time';%grid on; %..........................................................................%*******************************************%计算次用户的阻塞概率和被迫中断概率ockpu,(arr_nump-length(member))/arr_nump];block=[block,(arr_nums-length(member_CR))/arr_nums];thh=setdiff(th(1,:),zeros(1,10));forcehandoff=length(thh(1,:))/length(member_CR);endif isempty(blocksu)blocksu=[blocksu,block];elseblocksu=[blocksu;block]endendfigure(3);lambdap =0.01:0.05:0.5;plot(lambdap,blocksu(1,:),'-+');hold on;plot(lambdap,blocksu(2,:),'r-*');hold on;plot(lambdap,blocksu(3,:),'o-');legend('N=3','N=5','N=7');xlabel('Lamdap');ylabel('SU block probability');title 'SU block probability with lamdap';%SU用户在lamdap下的阻塞概率grid on;hold off;。

相关文档
最新文档