qpsk瑞利matlab
qpsk调制 matlab代码

QPSK(Quadrature Phase Shift Keying)调制是一种常用的数字调制方式,它使用4个相互正交的相位来表示数字信号,从而实现信号的传输和识别。
在无线通信、数字通信和数字电视等领域都有着广泛的应用。
在本文中,我们将使用Matlab编写QPSK调制的代码,以帮助读者更好地理解QPSK调制的原理和实现。
1. QPSK调制简介QPSK调制是一种常用的相位调制方式,它将两路独立的数据流分别调制到正交的载波上,实现了频谱的高效利用和传输速率的提高。
QPSK调制共有4种状态,分别是0°、90°、180°、270°,对应的二进制数据为00、01、10、11。
通过改变相位来表示不同的数字信号,QPSK调制在噪声干扰下具有一定的抗干扰能力,因此在实际应用中得到了广泛的应用。
2. Matlab实现QPSK调制在Matlab中,我们可以利用其强大的信号处理工具箱实现QPSK调制的模拟,并通过仿真结果来验证QPSK调制的正确性。
以下是实现QPSK调制的Matlab代码:```matlab设置参数fc = 1000; 载波频率fs = 0; 采样频率T = 1; 信号持续时间t = 0:1/fs:T-1/fs; 时间序列data = randi([0 1],1,100); 随机生成100个二进制数据数据映射为QPSK调制信号data_I = 2*data(1:2:end)-1; I路数据data_Q = 2*data(2:2:end)-1; Q路数据s = (data_I + 1i*data_Q).*exp(1i*2*pi*fc*t); QPSK调制信号显示QPSK调制信号subplot(211)plot(t,real(s))title('QPSK调制信号-I路')xlabel('时间')ylabel('幅度')subplot(212)plot(t,imag(s))title('QPSK调制信号-Q路')xlabel('时间')ylabel('幅度')```在上述代码中,我们首先设置了载波频率fc、采样频率fs、信号持续时间T和时间序列t,然后随机生成了100个二进制数据,并分别将其映射到I路和Q路数据中。
qpsk调制 matlab代码

qpsk调制 matlab代码我们需要了解QPSK调制的基本原理。
QPSK调制是一种相位调制技术,它将数字信号分为两个部分,分别表示为I路和Q路。
I路和Q 路分别是正交的,即它们的相位差为90度。
通过调整I路和Q路信号的幅度和相位,可以实现不同的调制方式。
QPSK调制使用两个比特来表示一个符号,因此可以表示四个不同的相位状态。
这四个相位状态分别为0度、90度、180度和270度。
我们可以将这四个相位状态分别表示为00、01、10和11。
在QPSK 调制中,将这四个相位状态映射到一个星座图上,星座图的每个点表示一个相位状态。
接下来,我们使用Matlab来实现QPSK调制。
首先,我们需要生成一组二进制数据,这些数据将被映射到星座图上。
我们可以使用randi函数生成一组随机的二进制数据。
然后,我们将这组二进制数据分为两个部分,分别表示为I路和Q路。
```matlabdata = randi([0, 1], 1, N); % 生成随机二进制数据data_I = data(1:2:end); % 提取I路数据data_Q = data(2:2:end); % 提取Q路数据```接下来,我们需要将I路和Q路数据映射到星座图上。
我们可以使用qammod函数来实现这个过程。
qammod函数将I路和Q路数据作为输入,输出对应的星座图点的复数值。
```matlabM = 4; % 星座图中的点的数量symbols = qammod(data_I * 2 + data_Q, M); % 将I路和Q路数据映射到星座图上```然后,我们可以通过添加高斯白噪声来模拟无线信道的影响。
我们可以使用awgn函数来实现这个过程。
awgn函数将星座图点的复数值作为输入,输出经过信道影响后的复数值。
```matlabSNR = 10; % 信噪比symbols_noisy = awgn(symbols, SNR); % 添加高斯白噪声```我们可以使用qamdemod函数将经过信道影响后的复数值解调为二进制数据。
bpskqpsk的matlab仿真

实验一无线信道特性及其分析方法一、实验作业1.在程序运行的过程中,任取一段Display1的数据和Display4的数据,分析其是否满足QPSK的调制过程;图一程序运行中的一段数据截图Display1的数据为00 11 11 11对应双极性序列为11 -1-1 -1-1 -1-1Display2的数据为pi/4 5*pi/4 5*pi/4 5*pi/4故由四相调制QPSK相位关系知,以上满足QPSK调制过程。
2.调试嵌入的f_convert.m,看看临时变量L的取值为多少。
答:临时变量L的值为8。
3.运行过程中,分别截取Signal Trajectory of QPSK Signal,11,BeforeRayleigh Fading1 和12,After Rayleigh Fading模块输出的QSPK的相位转移图和瑞利信道前后的星座图,进行解释。
图二Signal Trajectory of QPSK Signal图三瑞利信道前的星座图图四瑞利信道后的星座图答:QPSK调制相位跳变最大为±pi,最小为±pi/2由图二知仿真满足要求。
图三和图四知,信号通过瑞利信道后星座图出现失真。
因信号受瑞丽信道的干扰在星座图上出现相位和幅度失真,且不同时刻,失真大小不一。
实验二典型通信系统的搭建和分析四、实验作业1.对比Probe1/ Probe2/ Probe3处的数据,说明采用BSPK和QPSK调制前后,比特周期和符号周期之间的关系。
调制前 Probe1: W:16,Tf:[1.6e-005 0]Probe2: W:16,Tf:[1.6e-005 0] QPSKProbe3: W:16,Tf:[1.6e-005 0] BPSKProbe1/2/3处的数据Probe1 W:16 Tf:[1/6e-005 0]Prope2 W:8 Tf[1.6e-005 0]Prope2 W:16 Tf[1.6e-005 0]BPSK调制前后比特周期和符号周期没有变化,且符号周期等于比特周期。
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信号,并得到比特错误率等性能指标。
qpsk、bpsk蒙特卡洛仿真matlab代码

qpsk、bpsk的蒙特卡洛仿真是一种用于测试和验证通信系统性能的重要工具。
通过模拟大量的随机输入数据,并对系统进行多次仿真运算,可以对系统的性能进行全面评估,包括误码率、信噪比要求等。
在matlab中,我们可以通过编写相应的仿真代码来实现qpsk、bpsk 的蒙特卡洛仿真。
下面将分别介绍qpsk和bpsk的蒙特卡洛仿真matlab代码。
一、qpsk的蒙特卡洛仿真matlab代码1. 生成随机的qpsk调制信号我们需要生成一组随机的qpsk调制信号,可以使用randi函数生成随机整数序列,然后将其映射到qpsk符号点上。
2. 添加高斯白噪声在信号传输过程中,会受到各种干扰,其中最主要的干扰之一就是高斯白噪声。
我们可以使用randn函数生成高斯白噪声序列,然后与调制信号相加,模拟信号在传输过程中受到的噪声干扰。
3. 解调和判决接收端需要进行解调和判决操作,将接收到的信号重新映射到qpsk符号点上,并判断接收到的符号与发送的符号是否一致,从而判断是否发生误码。
4. 统计误码率通过多次仿真运算,记录错误判决的次数,从而可以计算出系统的误码率。
二、bpsk的蒙特卡洛仿真matlab代码1. 生成随机的bpsk调制信号与qpsk相似,我们需要先生成一组随机的bpsk调制信号,然后模拟信号传输过程中的噪声干扰。
2. 添加高斯白噪声同样使用randn函数生成高斯白噪声序列,与bpsk调制信号相加。
3. 解调和判决接收端对接收到的信号进行解调和判决,判断接收到的符号是否与发送的符号一致。
4. 统计误码率通过多次仿真运算,记录错误判决的次数,计算系统的误码率。
需要注意的是,在编写matlab代码时,要考虑到信号的长度、仿真次数、信噪比的范围等参数的选择,以及仿真结果的统计分析和可视化呈现。
qpsk、bpsk的蒙特卡洛仿真matlab代码可以通过以上步骤实现。
通过对系统性能进行全面评估,可以帮助工程师优化通信系统设计,提高系统的可靠性和稳定性。
qpsk信号matlab仿真程序 -回复

qpsk信号matlab仿真程序-回复如何使用MATLAB编写并仿真QPSK信号。
第一步:QPSK信号概述QPSK(Quadrature Phase-Shift Keying)是一种常用的数字调制技术,用来传输数字数据。
QPSK信号通过在正交载波上调制不同相位的信号,将两个比特的编码映射到四个不同的相位状态上。
这种编码方式能有效提高信号传输效率,使得传输速率加倍。
第二步:设置QPSK信号参数在MATLAB中,可以通过设置一些参数来定义QPSK信号的性质。
首先,需要定义符号速率(Symbol Rate),即每秒传输的符号数量。
此外,还需要定义载波频率和采样频率。
根据信号的要求,可以选择不同的参数。
例如,我们可以设置符号速率为1KHz,载波频率为10KHz,采样频率为100KHz,即每个符号对应100个样本点。
这些参数可以根据实际需求进行调整。
第三步:生成QPSK调制信号使用MATLAB的通信系统工具箱,可以方便地生成QPSK调制信号。
我们可以使用qammod函数来实现这个功能。
qammod函数的语法如下:y = qammod(x, M, phase_offset)其中,x是待调制的数据序列,M表示调制级别(对于QPSK来说,M=4),phase_offset表示相位偏移(一般为0)。
例如,假设我们有一组数据序列x,长度为N。
我们可以使用以下代码生成QPSK调制信号:symbol_rate = 1000; 符号速率为1KHzcarrier_freq = 10000; 载波频率为10KHzsample_freq = 100000; 采样频率为100KHzt = 0:1/sample_freq:(N-1)/symbol_rate; 生成时间序列x = randi([0, 1], 1, N); 随机生成长度为N的数据序列qpsk_signal = qammod(x, 4, 0); 生成QPSK调制信号在生成调制信号后,我们可以使用plot函数将信号绘制出来,以便进行可视化分析。
利用MATLAB实现QPSK调制及解调
利用MATLAB实现QPSK调制及解调郑州轻工业学院题目:利用MATLAB实现QPSK调制及解调姓名:院系: 电气信息工程学院专业班级: 电子信息工程09-1学号: 540901030154指导教师: 赵红梅成绩:时间: 2012 年 6 月 18 日至 2012 年 6 月 22 日1郑州轻工业学院课程设计任务书题目利用MATLAB实现QPSK调制及解调专业班级电子信息工程09级 1班学号 54 姓名主要内容、基本要求、主要参考资料等:主要内容:已知数字信号1011000101101011,码元速率为2400波特,载波频率为1200Hz,利用MATLAB画出QPSK调制波形,并画出调制信号经过高斯信道传输后解调波形及接收误码率,将其与理论值进行比较。
基本要求:1、通过本课程设计,巩固通信原理QPSK调制的有关知识;2、熟悉QPSK产生原理;3、熟悉高斯信道的建模及QPSK解调原理;4、熟悉误码率的蒙特卡罗仿真;5、学会用MATLAB来进行通信系统仿真。
主要参考资料:主要参考资料:1、王秉钧等. 通信原理[M].北京:清华大学出版社,2006.112、陈怀琛.数字信号处理教程----MATLAB释义与实现[M].北京:电子工业出版社,2004.完成期限: 2012.6.18—2012.6.23指导教师签名:课程负责人签名:2012年 6月 16日2目录一前言 ............................................. 4 1.1QPSK系统的应用背景简介 (4)1.2 QPSK实验仿真的意义 (4)1.3 实验平台和实验内容 (5)1.3.1实验平台 (5)1.3.2实验内容 ........................................ 5 二、系统实现框图和分析 (5)2.1、QPSK调制部分, (5)2.2、QPSK解调部分 .................................... 7 三、实验结果及分析 . (7)3.1、理想信道下的仿真 (7)3.2、高斯信道下的仿真 (8)3.3、先通过瑞利衰落信道再通过高斯信道的仿真 (9)参考文献: ......................................... 11 附录 (12)3基于MATLAB的QPSK仿真设计与实现一前言1.1QPSK系统的应用背景简介QPSK是英文Quadrature Phase Shift Keying的缩略语简称,意为正交相移键控,是一种数字调制方式。
QPSK通过Rayleigh信道多径衰落的Matlab仿真
QPSK通过Rayleigh信道多径衰落的Matlab仿真参照《通信系统仿真原理与无线应用》351页例14-1在这个例子里,我们对有3条固定路径的AWGN多径信道中的QPSK系统进行BER性能仿真,并与在理想的AWGN信道(没有多径)中同样系统地BER性能进行比较……书上有比较详细的数学推导,不抄了。
这个例子似乎没有考虑多普勒频移。
待我继续学习下一个例子,这个也没太看懂。
下面是该例子的源程序,P0、P1、P2分别是LOS路径和两条延迟瑞利分量的相对功率级。
当p0=0且delay!=0时为瑞利频率选择性衰落,delay==0时为瑞利平坦衰落。
主程序scriptfile:% 两径瑞利衰落信道仿真% 设定默认参数NN=256; % 传输符号个数tb=0.5; % 一比特时间fs=10; % 每符号采样数ebn0db=[1:2:15]; % 设定Eb/N0% 建立QPSK信号x=random_binary(NN,fs)+i*random_binary(NN,fs); % x为QPSK信号% 输入功率和延迟p0=0; % 视距LOS分量p1=20; % 第一路径分量p2=1; % 第二路径分量delay=1; % 按照每符号采样数决定的延迟delay0=0;delay1=0;delay2=delay;% 设定复高斯(瑞利)衰减gain1=sqrt(p1)*abs(randn(1,NN)+i*randn(1,NN));gain2=sqrt(p2)*abs(randn(1,NN)+i*randn(1,NN));for k=1:NNfor kk=1:fsindex=(k-1)*fs+kk;ggain1(1,index)=gain1(1,k);ggain2(1,index)=gain2(1,k);endendy1=x;for k=1:delay2y2(1,k)=y1(1,k)*sqrt(p0);endfor k=(delay2+1):(NN*fs)y2(1,k)=y1(1,k)*sqrt(p0)+y1(1,k-delay1)*ggain1(1,k)+y1(1,k-delay2)*ggain2(1,k);end% 匹配滤波器b=-ones(1,fs);b=b/fs;a=1;y=filter(b,a,y2);% 仿真结束% Use the semianalytic BER estimator . The following sets up the semi% analytic estimator . Find the maximun magnitude of the cross correlation % and the corresponding lag .[cor lags]=vxcorr(x,y);cmax=max(max(abs(cor)));nmax=find(abs(cor)==cmax);timelag=lags(nmax);corrmag=cmax;theta=angle(cor(nmax));y=y*exp(-i*theta); % derotate% Noise BW calibrationhh=impz(b,a);ts=1/16;nbw=(fs/2)*sum(hh.^2);% Delay the input ,and do BER estimation on the last 128 bits . Use middle % sample .Make sure the index does not exceed number of input points .Eb % should be computed at the receiver input .index=(10*fs+8:fs:(NN-10)*fs+8);xx=x(index);yy=y(index-timelag+1);[n1 n2]=size(y2);ny2=n1*n2;eb=tb*sum(sum(abs(y2).^2))/ny2;eb=eb/2;[peideal,pesystem]=qpsk_berest(xx,yy,ebn0db,eb,tb,nbw);figuresemilogy(ebn0db,peideal,'b*-',ebn0db,pesystem,'r+-')xlabel('Eb/N0 (db)');ylabel('Probability of Error');grid onaxis([0 14 10^(-10) 1]);% End of script file.相关的一些调用程序(4个):[1] vxcorr.mfunction [c,lags]=vxcorr(a,b)% This function calculates the unscaled cross-correlation of 2 vectors of% the same length . The output length(c) is length(a)+length(b)-1. It is a% simplified function of xcorr function in matlabR12 using the definition: % c(m)=E[a(n+m)*conj(b(n))]=E[a(n)*conj(b(n-m))] a=a(:); % convert a to column vectorb=b(:); % convert b to column vectorM=length(a); % same as length(b)maxlag=M-1; % maximum value of laglags=[-maxlag:maxlag]';A=fft(a,2^nextpow2(2*M-1)); % fft of AB=fft(b,2^nextpow2(2*M-1)); % fft of Bc=ifft(A.*conj(B)); % corsscorrelation% Move negative lags before positive lags.c=[c(end-maxlag+1:end,1);c(1:maxlag+1,1)];% Return row vector if a,b are row vectors.[nr nc]=size(a);if(nr>nc)c=c.';lags=lags.';end% End of function file.[2] random_binary.mfunction [x,bits]=random_binary(nbits,nsamples)% This function generates a random binary waveform of length nbits% sampled at a rate of nsamples/bit.x=zeros(1,nbits*nsamples);bits=round(rand(1,nbits));for m=1:nbitsfor n=1:nsamplesindex=(m-1)*nsamples+n;x(1,index)=(-1)^bits(m);endend% End of function file.[3] qpsk_berest.m% File: psk_berest.mfunction[peideal,pesystem]=psk_berest(xx,yy,ebn0db,eb,tb,nbw) % ebn0db is an array of Eb/No values in db (specified at the receiver%input); tb is the bit duration and nbw is the noise BW% xx is the reference (ideal) input; yy is the filtered output;nx=length(xx);% For comparision purposes , set the noise BW of the ideal receiver% (integrate and dump) to be equal to rs/2.nbwideal=1/(2*tb); % noise bandwidthfor m=1:length(ebn0db)peideal(m)=0.0; pesystem(m)=0.0; %initialize% find n0 and the variance of the noise.ebn0(m)=10^(ebn0db(m)/10); % dB to linearn0=eb/ebn0(m); % noise powersigma=sqrt(n0*nbw*2); %variancesigma1=sqrt(n0*nbwideal*2);%% Multiply the input constellation/signal by a scale factor so that input% constellation and the constellations/signal at the input to receive % filter have the same ave power a=sqrt(2*eb/(2*tb)).b=sqrt(2*eb/tb)/sqrt(sum(abs(xx).^2)/nx);d1=b*abs(xx);d3=abs(yy);peideal(m)=sum(q(d1/sigma1));pesystem(m)=sum(q(d3/sigma));endpeideal=peideal/nx;pesystem=pesystem/nx; % End of function file.[4] q.m% File: q.mfunction out=q(x)out=0.5*erfc(x/sqrt(2)); % End of function file。
matlab 瑞利分布函数
matlab 瑞利分布函数摘要:1.瑞利分布函数的介绍2.瑞利分布函数在MATLAB 中的实现3.瑞利分布函数的应用场景及示例正文:瑞利分布函数是一种在空间中随机分布的函数,它假设各个方向上的散射强度相同,广泛应用于无线通信、雷达和遥感等领域。
在MATLAB 中,我们可以通过编写代码实现瑞利分布函数的计算和模拟。
首先,我们来看如何在MATLAB 中实现瑞利分布函数。
瑞利分布函数的数学表达式为:f(x, y, z) = (1 / (4 * pi * r^2)) * (1 + (x^2 + y^2) / r^2)^(-1)其中,x、y、z 为空间坐标,r 为到原点的距离。
在MATLAB 中,我们可以使用以下代码实现瑞利分布函数的计算:```matlabfunction F = raleigh_distribution(x, y, z)% 计算空间坐标到原点的距离r = sqrt(x.^2 + y.^2 + z.^2);% 计算瑞利分布函数F = (1 / (4 * pi * r.^2)) * (1 + (x.^2 + y.^2) / r.^2).^(-1);end```接下来,我们来看瑞利分布函数在哪些场景下可以应用。
在无线通信中,瑞利分布函数可以用于模拟信号在传播过程中的衰落。
例如,在室内环境中,信号会受到墙壁、天花板和地板等障碍物的多次反射,这些反射信号叠加在一起形成瑞利分布。
同样地,在雷达和遥感领域,瑞利分布函数可以用于描述目标物体的散射特性。
下面,我们通过一个简单的示例来展示如何在MATLAB 中使用瑞利分布函数。
假设我们需要在一个球形区域内生成100 个随机点,并计算这些点上的瑞利分布函数值。
我们可以使用以下代码实现:```matlab% 生成100 个随机点r = linspace(0, 10, 100);theta = linspace(-pi, pi, 100);phi = linspace(-pi/2, pi/2, 100);x = r * cos(theta) * cos(phi);y = r * sin(theta) * cos(phi);z = r * sin(phi);% 计算瑞利分布函数值F = raleigh_distribution(x, y, z);% 绘制随机点及其瑞利分布函数值scatter3(x, y, z, "r", "filled");contour3(x, y, z, F);```通过以上示例,我们可以看到生成的随机点在三维空间中呈现出瑞利分布,同时,颜色越接近黑色,表示瑞利分布函数值越大。
QPSK调制与解调在MATLAB平台上的实现
QPSK调制与解调在MATLAB平台上的实现QPSK(Quadrature Phase Shift Keying)是一种常用的调制解调技术,常用于数字通信中。
在QPSK调制中,每个符号代表两个比特,通过将这两个比特与正交信号载波进行调制,实现高效的数据传输。
在这篇文章中,我们将介绍如何在MATLAB平台上实现QPSK调制和解调。
1.QPSK调制首先,我们需要生成待发送的二进制比特序列。
我们可以使用randi 函数生成0和1之间的随机整数序列。
```matlabbits = randi([0,1],1,N);```N表示待发送的比特数。
接下来,我们需要将这个二进制序列转换为QPSK调制符号。
在QPSK 调制中,我们将每两个比特映射到一个复数符号。
将0映射为1+j,将1映射为1-j。
```matlabfor i = 1:2:Nif bits(i) == 0 && bits(i+1) == 0symbols((i+1)/2) = 1 + 1i;elseif bits(i) == 0 && bits(i+1) == 1symbols((i+1)/2) = 1 - 1i;elseif bits(i) == 1 && bits(i+1) == 0symbols((i+1)/2) = -1 + 1i;elseif bits(i) == 1 && bits(i+1) == 1symbols((i+1)/2) = -1 - 1i;endend```最终得到的symbols变量即为QPSK调制后的复数符号序列。
2.QPSK解调首先,我们需要接收到的QPSK信号进行解调,得到复数符号序列。
```matlabsymbols_received = received_signal./carrier; % 将接收到的信号除以载波得到复数符号序列```其中received_signal为接收到的QPSK信号,carrier为发送端使用的载波。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
%%%%qpsk simulation实现QPSK瑞丽信道的各部分图
%***********************初始设置********************************
sr=2560; %码符号率,单位symbol/s
ml=2; %调制等级,对于qpsk是2
br=sr.*ml; %比特率,单位bit/s
nd=20; %码符号数目
ebn0=20; %比特能量,单位db
IPIONT=8; %过采样数目
bit_time=1/sr/ml;%比特持续时间
%***********************升余弦滤波器及信道初始化设置*****************************
irfn=21;%抽点数目
alfas=0.5; %滚降因子
[xh]=hrollfcoef(irfn,IPIONT,sr,alfas,1);%发送端根升余弦系统
[xh2]=hrollfcoef(irfn,IPIONT,sr,alfas,0);%接受端根升余弦系统
tstp=1/sr/IPIONT; %最小时间间隔
itau = [0];
dlvl = [0];
no=6;%产生单条瑞利信道的需要的不可分辨多径数
th1=[0.0];
itnd0=nd*IPIONT*100;
itnd1=[1000];
now1=1;
fd=160;%最大多普勒频移,单位HZ
flat =1;%1表示仅考虑幅度,0表示幅度和相位都受到衰落
%***********************产生二进制比特流********************************* %% 产生二进制比特流
data=rand(1,nd*ml)>0.5;
%% qpsk调制
[ich,qch]=qpskmod(data,1,nd,ml);
figure(1);
subplot 311;stairs (data) ,title('码元');axis([0,nd*ml,-2,2]);
subplot 312;stairs (ich) ,title('同向支路I');axis([0,nd,-2,2]);
subplot 313;stairs (qch) ,title('正交支路Q');axis([0,nd,-2,2]);
%**********************脉冲成型滤波器*********************************
%% *脉冲成型滤波器
fs=sr*10; % 采样频率
[ich1,qch1]=comoversamp(ich,qch,length(ich),IPIONT);%过采样
data1=ich1+qch1;
%% 根升余弦滤波
[ich2,qch2]=comconv(ich1,qch1,xh);
data2=ich2+qch2;
figure(2);
subplot 311; plot(data2); title('发送端采用升余弦波形传输的原始数据');grid on;
subplot 312; plot(ich2); title('发送端采用升余弦波形传输的同相支路');grid on;
subplot 313; plot(qch2); title('发送端采用升余弦波形传输的正交支路');grid on;
h = spectrum.welch;
figure; psd(h,data2,'fs',fs);
title('基带升余弦波形传输信号功率谱密度'); xlabel('频率(MHz) ');
%***********************qpsk 载波调制**********************************
fc=40*sr; % 载波频率Hz 是符号速率的40倍
ich3=ich2.*cos(2*pi*fc*tstp*(1:length(ich2)));%乘以载波
qch3=qch2.*(-sin(2*pi*fc*tstp*(1:length(qch2))));
data3=ich3+qch3;
figure(3);
subplot 311;plot (data3) ,title('调制后波形');
subplot 312;plot (ich3) ,title('调制后I路波形');
subplot 313;plot (qch3) ,title('调制后Q路波形');
h = spectrum.welch;
figure(4);
psd(h,data3,'fs',fs);
title('经过载波调制后接收端信号功率谱密度'); xlabel('频率(MHz) ');
%***********************加性白噪声计算***************************
spow=sum(ich2.*ich2+qch2.*qch2)/nd;
attn=0.5*spow*sr/br*10^(-ebn0/10);
attn=sqrt(attn);
%*********************** 经过Rayleigh信道传输*********************************
counter=1000;%衰落计数器
[ich41,qch41,ramp,rcos,rsin]=fade(ich3,qch3,length(ich3),tstp,fd,no,counter,flat);%经过瑞利信道传输
[ich4,qch4]=comb(ich41,qch41,attn); %经过高斯信道传输
data4=ich4+qch4;
figure(5);
subplot 211; plot (data3) ,title('调制后波形');
subplot 212; plot (data4) ,title('经过Rayleigh信道后波形');
h = spectrum.welch;
figure(6);
psd(h,data4,'fs',fs);
title('经过Rayleigh信道后接收端信号功率谱密度'); xlabel('频率(MHz) ');
%% 解调
Idem=ich4.*cos(2*pi*fc*tstp*(1:length(ich4)));%相干解调
Qdem=qch4.*(-sin(2*pi*fc*tstp*(1:length(qch4))));
%*********************** 根升余弦滤波***************************** %% 根升余弦滤波,低通滤波器
[ich5,qch5]=comconv(Idem,Qdem,xh2);
ich5=ich5.*2;
qch5=qch5.*2;
data5=ich5+qch5;
figure(7);
subplot 311;plot (data5) ,title('低通滤波后波形');
subplot 312;plot (ich5) ,title('低通滤波后I路波形');
subplot 313;plot (qch5) ,title('低通滤波后Q路波形');
syncpoint=irfn*IPIONT+1;
ich6=ich5(syncpoint:IPIONT:length(ich5)-syncpoint);
qch6=qch5(syncpoint:IPIONT:length(qch5)-syncpoint);
figure(8);
title('Demod')
subplot 211;stairs(ich6) ,title('抽样后I码元'),axis([0,length(ich6),-3,3]);
subplot 212;stairs(qch6) ,title('抽样后Q码元'),axis([0,length(ich6),-3,3]);
%% 解码
demodata=zeros(1,nd*m1);
demodata(1,(1:m1:nd*m1-1))=ich6(1,(1:nd))>=0;
demodata(1,(2:m1:nd*m1))=qch6(1,(1:nd))>=0;
figure;
title('Demod')
subplot 211;stairs (demodata) ,title('解码后码元'),axis([0,nd*m1,-2,2]);
subplot 212;stairs (data) ,title('原始二进制码元'),axis([0,nd*m1,-2,2]);
%% 星座图
figure;
title('星座图')
plot(idata+j*qdata,'b*');grid on;axis([-3 ,3 ,-3 ,3]);
hold on;
plot(ich6+j*qch6,'r*');axis([-3 ,3 ,-3 ,3]);
legend('经过瑞利信道前星座图','经过瑞利信道后星座图');。