yesman
2007-05-16, 21:47
实用的第三代移动通信系统(3G)已经走入我们的生活。多用户检测技术作为TD-SCDMA、cdma2000、WCDMA的增强性技术之一,愈来愈受到学术界、产业界的重视。本课题要求在深入剖析CDMA多用户检测理论的基础上,基于Simulink平台,实现基本的多用户检测算法的仿真研究。
我已做完,共享出来,欢迎大家多提提意见!
Matlab程序包括3个文件:mseries.m编写了一个产生m序列的函数;mud.m用来比较传统单用户检测、线性解相关多用户检测、最小均方误差多用户检测的误码率;mud_plot比较后并画出误码率-信噪比曲线。
Simulink模型包括2个文件:mud.mdl为模型文件;sfun_userinfo.m为一个s-function,用来产生用户信息。仿真时两个要放到同一目录下,注意Matlab中的Current Directory中也要选到这个目录。
其实自己这个毕设做的很粗糙,都不好意思贴出来,刚开始做的时候不知道从何下手,特别是如何用simulink仿真,憋了一两个月都没做出来,后来眼看着时间就要到了,有一天急得在电脑前坐了整整一个下午,记得那一天是星期六,直到晚上2点才睡,功夫不负有心人,终于调出结果了!思路其实很简单,看到大家还有些疑问,因此这次把我毕业论文中的部分内容贴出来,就算个说明吧,做的很简单,见笑了。若哪位高人有更好的想法,可以进一步交流。
以下是论文的部分内容:
4.2 仿真模型的建立
本文利用Simulink平台,模拟了一个小区内十个用户的码元发送,扩频,接收,解扩,判决的CDMA通信基本过程,仿真基本流程如图4-1所示:
图4-1 Simulink仿真基本流程
在每一个仿真步长(1秒)内,每个用户发送一个信息码元,10个用户则对应发送10个用户信息码元,然后用10个P=31的m序列分别对这10个用户的信息码元进行扩频(相乘)处理,然后合路相加并加入高斯白噪声。在接收端用和发送端相同的10个m序列分别对信息码元进行解扩(相乘)处理,最后进行积分,判决,完成了对这10个用户的信息码元的恢复,即对于这10个用户中的每一个用户,一个仿真步长(1秒)内完成了一个信息码元的恢复,若要发送5000个码元,仿真时间设置为5000秒即可,这是传统单用户检测的情况。对于线性解相关多用户检测和最小均方误差多用户检测,只需在传统单用户检测输出的基础上乘以相应算法的线性算子即可,如线性解相关多用户检测的线性算子 ,最小均方误差多用户检测的线性算子 。最后,分别计算这三种检测方法的误码率,比较它们的性能。
下面详细介绍一下仿真模型中各个主要的模块:
(1)用户信号生成模块
用户信号生成模块是利用S-函数编写了一个自定义模块,它的功能是生成随机±1序列,在S-函数的主程序中调用mdlInitializeSizes例程进行初始化,设sizes.NumContStates=0;sizes.NumDiscStates=0;sizes.NumOutputs=1;sizes.NumInputs=0;sizes.DirFeedthrough=0;sizes.NumSampleTimes=1;x0=[];ts=[1 0];调用mdlOutputs例程进行输出,sys=2*randint-1即可生成随机±1序列。紧跟在用户信号生成模块之后,是一个gain模块,设置相应的增益参数即可对各个用户的功率进行控制。
(2) m序列发生器模块
运用Embedded MATLAB Function block编写了一个m序列发生器模块,模块有一个输入,一个输出,输入为对应的5级左移移位寄存器的反馈系数,输出为一个P=31的m序列。
(3)信号合路用了一个Add模块,加入一个Random Number模块,生成均值是0,方差为1的高斯正态分布随机信号做为噪声。
(4)积分判决
由于解扩后的输出后的信号是一个离散量,因此用一个求均值功能的模块,相当于在连续域的时间上求积分平均,判决输出用sign模块完成。
(5)解相关多用户检测和最小均方误差多用户检测的线性算子用自定义模块或和其它一些模块组合完成,如图4-2所示。
(a)解相关检测器线性算子
(b)最小均方误差检测器线性算子
图4-2 线性算子模块
(6)误码率求解模块直接运用Error Rate Calculation模块。
第五章 仿真测试报告
本章中给出了仿真测试报告,5.1节中用编写好的MATLAB程序给出仿真结果,分析比较了传统单用户检测、线性解相关多用户检测和最小均方误差多用检测之间的误码率性能;5.2节中根据编写好的Simulink仿真模型,设置好相应的仿真参数,对比了这几种不同检测方法的误码率,以达到分析它们之间性能差异的目的。
5.1 MATLAB仿真
5.1.1测试传码5000个情况下10个用户的误码率
mud.m是一个比较传统单用户检测,线性解相关多用户检测,最小均方误差多用户检测之间的误码率性能的程序,运行本程序首先出现一个对话框,等待输入相应的仿真参数,如图5-1所示:
图5-1 仿真界面
其中第一行为用户数,第二行为用户信息码元个数,第三行为各个用户对应的信号功率,第四行为噪声功率,第五行为要观察的用户,默认值如图中所示。
设置用户信号功率依次为1,2,3,4,5,6,7,8,9,10是由于用户距离基站的远近不同,故信号功率有差别,用此来模拟远近效应。信噪比的计算拿第一个用户作为基准,当噪声功率设置为10时,信噪比s/n=20lg(1/10)=-20dB。第五行设置为1表示要观察第一个用户。
按照默认值点OK后,程序将计算第一个用户的误码率。分别设置要检测的用户为1到10,将得到的数据整理成表格如下:
表5-1三种检测方法的误码率比较(SNR=-20dB)
用户 1 2 3 4 5 6 7 8 9 10
用户功率 1 2 3 4 5 6 7 8 9 10
传统单用户检测BER(%) 29.90 15.16 5.74 2.04 0.08 0.00 0.00 0 0 0
DEC-MUD BER (%) 28.04 14.18 4.96 1.84 0.02 0.02 0.00 0 0 0
MMSE-MUD BER(%) 29.14 14.16 4.94 1.78 0.02 0.02 0.00 0 0 0
5.1.2测试传码100000个情况下各用户误码率
为了更精确的测试这三种检测方法的优劣,以及由于远近效应引起的各用户误码率的变化,我们把用户信息码元长度设为100000,其他参数不变,得到的误码率情况如表5-2所示:
表5-2三种检测方法的误码率比较(信噪比SNR=-20dB)
用户 1 2 3 4 5 6 7 8 9 10
用户功率 1 2 3 4 5 6 7 8 9 10
传统单用户检测BER(%) 30.03 14.64 5.73 1.75 0.42 0.076 0.011 0.001 0 0
DEC-MUD BER(%) 29.24 13.76 5.12 1.42 0.29 0.053 0.006 0 0 0
MMSE-MUD BER(%) 29.17 13.66 5.04 1.42 0.29 0.052 0.006 0 0 0
通过表5-1和表5-2的统计数据,可以发现:
(1)在信噪比一定的条件下,总体上,线性解相关多用户检测要优于传统单用户检测,最小均方误差多用户检测要优于线性解相关多用户检测。
(2)信号功率较大的用户的误码率明显低于信号功率较小的用户。
5.1.3 测试误码率随信噪比变化情况(考虑远近效应)
mud_plot.m是一个比较传统单用户检测,线性解相关多用户检测,最小均方误差多用户检测之间的误码率性能的程序,并做出了误码率-信噪比曲线。程序设置为:传码5000个,保持噪声功率30不变,10个用户初始功率为[1 2 3 4 5 6 7 8 9 10],改变用户的功率值,每次增加用户功率的10%,计算1000次,这样误码率从-30dB到10dB变化,做出三种检测方法误码率随信噪比变换的曲线,如图5-2所示:
图5-2 误码率-信噪比曲线
从图5-2可以看出:
(1)不论是传统单用户检测,线性解相关多用户检测,还是最小均方误差多用户检测,其误码率都随着信噪比的增大而减少。
(2)在相同的信噪比水平下,解相关多用户检测器和最小均方误差多用户检测的性能明显要好于传统多用户检测,由于程序有一定的误差存在,解相关多用户检测和最小均方误差多用户检测两者的误码率性能相仿(实际上后者的性能要稍好于前者)。
5.1.4 测试误码率随信噪比变化情况(去掉远近效应的影响)
若设置mud_plot.m中10个用户初始功率为[1 1 1 1 1 1 1 1 1 1](设置10个用户的功率相同是为了消除远近效应的影响),其他参数不变,做出这三种检测方法误码率随信噪比变换的曲线,如下图所示:
图5-3 误码率-信噪比曲线(无远近效应)
从图5-3可以看出:三条曲线几乎重合,这说明若去掉远近效应的影响,解相关多用户检测和最小均方误差多用户检测的性能接近于传统单用户检测。
5.1.5 测试单用户情况
最后我们再来测试一下单用户的情况,运行mud.m文件,设置用户数为1,传码5000个,用户功率为1,噪声功率为10,需要检测的用户为1。多运行几次程序,从仿真结果可以看出三种检测方法的误码率完全相同,例如其中一次的结果都为29.32%,这说明单用户条件下三种检测方法的性能相同。
5.2 Simulink仿真
根据在4.2节中介绍的仿真模型,设置相应的参数,观察三种检测方法的误码率,分析比较它们的性能。
5.2.1改变噪声功率测试误码率随信噪比变化的情况
设置用户信息功率依次为1 1 1 1 1 1 1 1 1 3,噪声功率从10开始逐渐增大,仿真时间设置为5000秒,观察三种检测方法误码率的变化情况。
图5-4给出了三种检测方法的误码率比较结果, 图(a),(b),(c)表示Pn分别为10,15,20时的三种情况,从上到下依次为传统单用户检测,线性解相关多用户检测,最小均方误差多用户检测。
图5-4 三种检测方法的误码性能比较
通过结果可以看出,三种检测方法的误码率都随着信噪比的逐渐降低而增大,并且可以明显的看出同一个信噪比时,线性解相关多用户检测和最小均方误差多用检测性能要好于传统单用户检测。
对应的word文件(有图):
我已做完,共享出来,欢迎大家多提提意见!
Matlab程序包括3个文件:mseries.m编写了一个产生m序列的函数;mud.m用来比较传统单用户检测、线性解相关多用户检测、最小均方误差多用户检测的误码率;mud_plot比较后并画出误码率-信噪比曲线。
Simulink模型包括2个文件:mud.mdl为模型文件;sfun_userinfo.m为一个s-function,用来产生用户信息。仿真时两个要放到同一目录下,注意Matlab中的Current Directory中也要选到这个目录。
其实自己这个毕设做的很粗糙,都不好意思贴出来,刚开始做的时候不知道从何下手,特别是如何用simulink仿真,憋了一两个月都没做出来,后来眼看着时间就要到了,有一天急得在电脑前坐了整整一个下午,记得那一天是星期六,直到晚上2点才睡,功夫不负有心人,终于调出结果了!思路其实很简单,看到大家还有些疑问,因此这次把我毕业论文中的部分内容贴出来,就算个说明吧,做的很简单,见笑了。若哪位高人有更好的想法,可以进一步交流。
以下是论文的部分内容:
4.2 仿真模型的建立
本文利用Simulink平台,模拟了一个小区内十个用户的码元发送,扩频,接收,解扩,判决的CDMA通信基本过程,仿真基本流程如图4-1所示:
图4-1 Simulink仿真基本流程
在每一个仿真步长(1秒)内,每个用户发送一个信息码元,10个用户则对应发送10个用户信息码元,然后用10个P=31的m序列分别对这10个用户的信息码元进行扩频(相乘)处理,然后合路相加并加入高斯白噪声。在接收端用和发送端相同的10个m序列分别对信息码元进行解扩(相乘)处理,最后进行积分,判决,完成了对这10个用户的信息码元的恢复,即对于这10个用户中的每一个用户,一个仿真步长(1秒)内完成了一个信息码元的恢复,若要发送5000个码元,仿真时间设置为5000秒即可,这是传统单用户检测的情况。对于线性解相关多用户检测和最小均方误差多用户检测,只需在传统单用户检测输出的基础上乘以相应算法的线性算子即可,如线性解相关多用户检测的线性算子 ,最小均方误差多用户检测的线性算子 。最后,分别计算这三种检测方法的误码率,比较它们的性能。
下面详细介绍一下仿真模型中各个主要的模块:
(1)用户信号生成模块
用户信号生成模块是利用S-函数编写了一个自定义模块,它的功能是生成随机±1序列,在S-函数的主程序中调用mdlInitializeSizes例程进行初始化,设sizes.NumContStates=0;sizes.NumDiscStates=0;sizes.NumOutputs=1;sizes.NumInputs=0;sizes.DirFeedthrough=0;sizes.NumSampleTimes=1;x0=[];ts=[1 0];调用mdlOutputs例程进行输出,sys=2*randint-1即可生成随机±1序列。紧跟在用户信号生成模块之后,是一个gain模块,设置相应的增益参数即可对各个用户的功率进行控制。
(2) m序列发生器模块
运用Embedded MATLAB Function block编写了一个m序列发生器模块,模块有一个输入,一个输出,输入为对应的5级左移移位寄存器的反馈系数,输出为一个P=31的m序列。
(3)信号合路用了一个Add模块,加入一个Random Number模块,生成均值是0,方差为1的高斯正态分布随机信号做为噪声。
(4)积分判决
由于解扩后的输出后的信号是一个离散量,因此用一个求均值功能的模块,相当于在连续域的时间上求积分平均,判决输出用sign模块完成。
(5)解相关多用户检测和最小均方误差多用户检测的线性算子用自定义模块或和其它一些模块组合完成,如图4-2所示。
(a)解相关检测器线性算子
(b)最小均方误差检测器线性算子
图4-2 线性算子模块
(6)误码率求解模块直接运用Error Rate Calculation模块。
第五章 仿真测试报告
本章中给出了仿真测试报告,5.1节中用编写好的MATLAB程序给出仿真结果,分析比较了传统单用户检测、线性解相关多用户检测和最小均方误差多用检测之间的误码率性能;5.2节中根据编写好的Simulink仿真模型,设置好相应的仿真参数,对比了这几种不同检测方法的误码率,以达到分析它们之间性能差异的目的。
5.1 MATLAB仿真
5.1.1测试传码5000个情况下10个用户的误码率
mud.m是一个比较传统单用户检测,线性解相关多用户检测,最小均方误差多用户检测之间的误码率性能的程序,运行本程序首先出现一个对话框,等待输入相应的仿真参数,如图5-1所示:
图5-1 仿真界面
其中第一行为用户数,第二行为用户信息码元个数,第三行为各个用户对应的信号功率,第四行为噪声功率,第五行为要观察的用户,默认值如图中所示。
设置用户信号功率依次为1,2,3,4,5,6,7,8,9,10是由于用户距离基站的远近不同,故信号功率有差别,用此来模拟远近效应。信噪比的计算拿第一个用户作为基准,当噪声功率设置为10时,信噪比s/n=20lg(1/10)=-20dB。第五行设置为1表示要观察第一个用户。
按照默认值点OK后,程序将计算第一个用户的误码率。分别设置要检测的用户为1到10,将得到的数据整理成表格如下:
表5-1三种检测方法的误码率比较(SNR=-20dB)
用户 1 2 3 4 5 6 7 8 9 10
用户功率 1 2 3 4 5 6 7 8 9 10
传统单用户检测BER(%) 29.90 15.16 5.74 2.04 0.08 0.00 0.00 0 0 0
DEC-MUD BER (%) 28.04 14.18 4.96 1.84 0.02 0.02 0.00 0 0 0
MMSE-MUD BER(%) 29.14 14.16 4.94 1.78 0.02 0.02 0.00 0 0 0
5.1.2测试传码100000个情况下各用户误码率
为了更精确的测试这三种检测方法的优劣,以及由于远近效应引起的各用户误码率的变化,我们把用户信息码元长度设为100000,其他参数不变,得到的误码率情况如表5-2所示:
表5-2三种检测方法的误码率比较(信噪比SNR=-20dB)
用户 1 2 3 4 5 6 7 8 9 10
用户功率 1 2 3 4 5 6 7 8 9 10
传统单用户检测BER(%) 30.03 14.64 5.73 1.75 0.42 0.076 0.011 0.001 0 0
DEC-MUD BER(%) 29.24 13.76 5.12 1.42 0.29 0.053 0.006 0 0 0
MMSE-MUD BER(%) 29.17 13.66 5.04 1.42 0.29 0.052 0.006 0 0 0
通过表5-1和表5-2的统计数据,可以发现:
(1)在信噪比一定的条件下,总体上,线性解相关多用户检测要优于传统单用户检测,最小均方误差多用户检测要优于线性解相关多用户检测。
(2)信号功率较大的用户的误码率明显低于信号功率较小的用户。
5.1.3 测试误码率随信噪比变化情况(考虑远近效应)
mud_plot.m是一个比较传统单用户检测,线性解相关多用户检测,最小均方误差多用户检测之间的误码率性能的程序,并做出了误码率-信噪比曲线。程序设置为:传码5000个,保持噪声功率30不变,10个用户初始功率为[1 2 3 4 5 6 7 8 9 10],改变用户的功率值,每次增加用户功率的10%,计算1000次,这样误码率从-30dB到10dB变化,做出三种检测方法误码率随信噪比变换的曲线,如图5-2所示:
图5-2 误码率-信噪比曲线
从图5-2可以看出:
(1)不论是传统单用户检测,线性解相关多用户检测,还是最小均方误差多用户检测,其误码率都随着信噪比的增大而减少。
(2)在相同的信噪比水平下,解相关多用户检测器和最小均方误差多用户检测的性能明显要好于传统多用户检测,由于程序有一定的误差存在,解相关多用户检测和最小均方误差多用户检测两者的误码率性能相仿(实际上后者的性能要稍好于前者)。
5.1.4 测试误码率随信噪比变化情况(去掉远近效应的影响)
若设置mud_plot.m中10个用户初始功率为[1 1 1 1 1 1 1 1 1 1](设置10个用户的功率相同是为了消除远近效应的影响),其他参数不变,做出这三种检测方法误码率随信噪比变换的曲线,如下图所示:
图5-3 误码率-信噪比曲线(无远近效应)
从图5-3可以看出:三条曲线几乎重合,这说明若去掉远近效应的影响,解相关多用户检测和最小均方误差多用户检测的性能接近于传统单用户检测。
5.1.5 测试单用户情况
最后我们再来测试一下单用户的情况,运行mud.m文件,设置用户数为1,传码5000个,用户功率为1,噪声功率为10,需要检测的用户为1。多运行几次程序,从仿真结果可以看出三种检测方法的误码率完全相同,例如其中一次的结果都为29.32%,这说明单用户条件下三种检测方法的性能相同。
5.2 Simulink仿真
根据在4.2节中介绍的仿真模型,设置相应的参数,观察三种检测方法的误码率,分析比较它们的性能。
5.2.1改变噪声功率测试误码率随信噪比变化的情况
设置用户信息功率依次为1 1 1 1 1 1 1 1 1 3,噪声功率从10开始逐渐增大,仿真时间设置为5000秒,观察三种检测方法误码率的变化情况。
图5-4给出了三种检测方法的误码率比较结果, 图(a),(b),(c)表示Pn分别为10,15,20时的三种情况,从上到下依次为传统单用户检测,线性解相关多用户检测,最小均方误差多用户检测。
图5-4 三种检测方法的误码性能比较
通过结果可以看出,三种检测方法的误码率都随着信噪比的逐渐降低而增大,并且可以明显的看出同一个信噪比时,线性解相关多用户检测和最小均方误差多用检测性能要好于传统单用户检测。
对应的word文件(有图):