混沌通信中QCSK调制matlab代码
QPSK调制与解调系统的MATLAB实现
QPSK调制与解调系统的MATLAB实现与性能分析摘要:QPSK是英文QuadraturePhaseShiftKeying的缩略语简称,意为正交相移键控,是一种数字调制方式。
四相相移键控信号简称“QPSK〞。
在现代通信系统中,调制与解调是必不可少的重要手段。
所谓调制,就是把信号转换成适合在信道中传输的形式的一种过程。
解调如此是调制的相反过程,而从已调制信号中恢复出原信号。
本课程设计主要介绍通过进展QPSK调制解调的基带仿真,对实现中影响该系统性能的几个重要问题进展了研究。
针对QPSK的特点,调制前后发生的变化,加上噪声后波形出现的各种变化,通过星座图、眼图、波形图等来观察。
程序设计与仿真均采用MATLAB集成环境下的Simulink仿真平台,最后仿真详单与理论分析一致。
1 引言本课程设计主要是学会运用MATLAB中的Simulink来实现数字基带信号的模拟传输。
在知道其传输原理的情况下,将仿真电路到Simulink之中。
并且对正交振幅调制、解调过程的频谱和波形的分析,同时在无噪声和有噪声的进展分析,参加高斯白噪声,瑞利噪声,莱斯噪声分析调制解调后的频谱、波形,观察其误码率。
通过本课程的学习我们不仅能加深理解和巩固理论课上所学的有关QPSK调制与解调的根本概念、根本理论和根本方法,而且能锻炼我们分析问题和解决问题的能力;同时对我们独立工作的习惯和科学素质进展培养,为今后参加科学工作打下良好的根底。
利用MATLAB集成环境下的Simulink仿真平台,设计一个QPSK调制与解调系统.用示波器观察调制前后的信号波形;用频谱分析模块观察调制前后信号频谱的变化;加上各种噪声源,用误码测试模块测量误码率;最后根据运行结果和波形来分析该系统性能。
1〕熟悉MATLAB环境下的Simulink仿真平台,熟悉QPSK系统的调制解调原理,构建QPSK调制解调电路图.2〕用示波器观察调制前后的信号波形,用频谱分析模块观察调制前后信号的频谱的变化。
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路数据中。
matlab qpsk调制 差分编码
MATLAB中的QPSK调制和差分编码一、QPSK调制概述QPSK是一种数字调制技术,它是Quadrature Phase Shift Keying 的缩写,顾名思义,QPSK调制就是基于正交相位的移相键控技术。
在QPSK调制中,将输入的数字比特流分为两个独立的序列,分别对应正弦信号和余弦信号,然后分别将这两个序列经过平移操作,最终将它们相加得到调制后的信号。
二、QPSK调制的原理和公式1. QPSK调制的过程可以用以下数学公式表示:\[ s(t) = \sqrt{\frac{2}{T}} \cdot (I(t) \cdot \cos(2\pi f_c t) - Q(t) \cdot \sin(2\pi f_c t))\]其中,s(t)表示QPSK调制的信号,I(t)和Q(t)分别为输入的两个正交序列,T为每个符号的持续时间,fc为信号的载频。
2. 在Matlab中利用QPSK调制函数进行调制的示例代码如下:```matlabM = 4; 4种相位k = log2(M); 每个符号的位数numBits = xxx; 待调制的比特数dataIn = randi([0 1],numBits,1); 随机产生待调制的比特数据dataInMatrix = reshape(dataIn,length(dataIn)/k,k); 重新排列比特数据dataSymbolsIn = bi2de(dataInMatrix); 将比特数据转换为十进制数据modObj =modem.pskmod('M',M,'PhaseOffset',0,'SymbolOrder','Gray','Inp utType','Bit');dataMod = modulate(modObj,dataSymbolsIn); 进行QPSK调制```三、差分编码的概念差分编码是一种用于增强数字通信系统性能的编码技术,它的基本思想是根据相邻符号之间的变化来产生调制信号。
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 qpsk调制函数
matlab qpsk调制函数QPSK调制函数是一种常用的数字调制方法,广泛应用于无线通信系统中。
在Matlab中,我们可以使用qpskmod函数来实现QPSK调制。
本文将介绍QPSK调制的原理、实现方法以及在通信系统中的应用。
我们来了解一下QPSK调制的原理。
QPSK调制是一种基于正交载波的调制方式,它将每个符号映射为一个复数,复数的实部和虚部分别表示正交载波的两个相位。
QPSK调制共有4个不同的符号,每个符号代表两个比特,因此它可以传输更多的信息量。
具体来说,QPSK调制将两个比特映射为一个复数,共有4种可能的映射方式,分别是00、01、10和11。
这四种映射方式对应的复数分别为1+j、-1+j、-1-j和1-j。
在Matlab中,我们可以使用qpskmod函数来实现QPSK调制。
该函数的基本语法为:y = qpskmod(x,M),其中x是输入的比特序列,M 是调制的方式,对于QPSK调制来说,M的取值为4。
函数的输出y 是调制后的复数序列。
QPSK调制函数的实现非常简单,我们只需要将输入的比特序列按照两个比特一组进行分组,然后根据映射关系进行映射即可。
下面是一个简单的示例代码:```matlab% 生成随机比特序列bits = randi([0 1], 1, 1000);% QPSK调制qpsk = qpskmod(bits, 4);```上述代码首先生成了一个随机的比特序列,长度为1000。
然后使用qpskmod函数对比特序列进行QPSK调制,调制后的结果存储在变量qpsk中。
QPSK调制在无线通信系统中有着广泛的应用。
由于QPSK调制可以传输更多的信息量,因此在有限的带宽资源下能够达到更高的数据传输率。
此外,QPSK调制还具有抗噪声性能较好的特点,可以在较差的信道条件下实现可靠的通信。
在实际的通信系统中,QPSK调制往往与其他技术结合使用,以提高系统的性能。
例如,在OFDM系统中,QPSK调制常用于每个子载波上,以实现高速数据传输。
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函数将信号绘制出来,以便进行可视化分析。
混沌通信中QCSK调制matlab代码
混沌通信中QCSK调制matlab代码.;all clearx=randsrc(20,1,[0:1]); %产生二进制随机码stairs(x);axis([0,20,-0.1,1.1]);title('二进制随机序列');clcclearclose all% q=99;%k=[1:99];%x(k)=sin(k*pi/q);x(1)=0.212345;for k = 1:99;x(k+1) =4 * x(k) * (1 - x(k)); endplot(x);legend('混沌信号x'); grid on;%加网格clcclearclose all% q=99;%k=[1:99];%x(k)=sin(k*pi/q);x(1)=0.212345;for k=1:99;x(k+1)=4*x(k)*(1-x(k)); endy=hilbert(x);figure(1)plot(imag(y));legend('希尔伯特变换y'); grid onclcclearclose all% q=99;%k=[1:99];%x(k)=sin(k*pi/q);x(1)=0.212345;%x的初植for k=1:99;x(k+1)=4*x(k)*(1-x(k)); endy=hilbert(x);%x的希尔伯特变换figure(1)plot(imag(y));grid onlegend('加密后的信号ms');clcclearclose all% q=99;%k=[1:99];%x(k)=sin(k*pi/q);x(1)=0.212345;for k=1:99;x(k+1)=4*x(k)*(1-x(k)); endy=hilbert(x);%希尔伯特变换figure(1)plot(imag(y));grid onlegend('加密后的信号ms');y2=AWGN(imag(y),0.8,1);%imag(y)为已调信号,0.8为信噪比,1为信号功率figure(2)plot(y2);grid ony2');加噪声后的调制信号legend('bs=1;Eb=1;Zb=bs.*Eb;%解调出的信号stem(Zb,'r');title('解调出的信号Zb')clc;x=0:18;%信噪比的取植范围xSNR=10.^(x/20);%化成dB形式for i=1:length(x);k=2;y1(i)=1/2*erfc(1/(sqrt(4*1/xSNR (i)+k*((1/xSNR(i))^2))));%求k=2的系统理论的误码率endsemilogy(x,y1);%绘出x和y1的图for i=1:length(x)hold on;plot(x(i),y1(i),'g*')endgtext('QCSK,K=2');%在光标的位置放置给定的文字for i=1:length(x);k=16;y2(i)=1/2*erfc(1/(sqrt(4*1/xSNR (i)+k*((1/xSNR(i))^2))));%求k=16的系统理论的误码率endsemilogy(x,y2);%绘出x和y2的图for i=1:length(x)hold on;plot(x(i),y2(i),'r.')endgtext('QCSK,K=16');for i=1:length(x);k=64;y3(i)=1/2*erfc(1/(sqrt(4*1/xSNR (i)+k*((1/xSNR( 的系统理论的误码率k=64求i))^2))));%.endsemilogy(x,y3);%绘出x和y3的图for i=1:length(x)hold on;plot(x(i),y3(i),'b+') endgtext('QCSK,K=64');grid onxlabel('Eb/No[dB]'); ylabel('BER');title('QCSK的系统误码率');clc;x=0:18;%信噪比的取植范围xSNR=10.^(x/20);%化成dB形式for i=1:length(x);k=2;y1(i)=1/2*erfc(1/(sqrt(4*1/xSNR (i)+k*((1/xSNR(i))^2))));%求QCSK,k=2的系统理论的误码率endsemilogy(x,y1);for i=1:length(x)hold on;plot(x(i),y1(i),'g*')endfor i=1:length(x);k=2;y2(i)=1/2*erfc(1/(sqrt(4*1/xSNR (i)+2*k*((1/xSNR(i))^2))));%求DCSK,k=2的系统理论的误码率endsemilogy(x,y2);for i=1:length(x)hold on;plot(x(i),y2(i),'r.')endgtext('绿色的*表示QCSK K=2;红色的.表示DCSK K=2');grid onxlabel('Eb/No[dB]');ylabel('BER');');的系统误码率title('K=2.clc;x=0:18;%信噪比的取植范围xSNR=10.^(x/20);%化成dB形式for i=1:length(x);k=16;y1(i)=1/2*erfc(1/(sqrt(4*1/xSNR (i)+k*((1/xSNR(i))^2))));%求QCSK,k=16的系统理论的误码率 endsemilogy(x,y1);for i=1:length(x)hold on;plot(x(i),y1(i),'g*') endgtext('QCSK,K=16');for i=1:length(x);k=16;y2(i)=1/2*erfc(1/(sqrt(4*1/xSNR (i)+2*k*((1/xSNR(i))^2))));%求DCSK,k=16的系统理论的误码率endsemilogy(x,y2);for i=1:length(x)hold on;plot(x(i),y2(i),'r.')endgtext('DCSK,K=16');grid onxlabel('Eb/No[dB]');ylabel('BER');');时的系统误码率title('K=16.clc;x=0:18;%信噪比的取植范围xSNR=10.^(x/20);%化成dB形式for i=1:length(x);k=64;y1(i)=1/2*erfc(1/(sqrt(4*1/xSNR (i)+k*((1/xSNR(i))^2))));%求QCSK,k=64的系统理论的误码率endsemilogy(x,y1);for i=1:length(x)hold on;plot(x(i),y1(i),'g*')endgtext('QCSK K=64');for i=1:length(x);k=64;y2(i)=1/2*erfc(1/(sqrt(4*1/xSNR (i)+2*k*((1/xSNR(i))^2))));%求DCSK,k=64的系统理论的误码率endsemilogy(x,y2);for i=1:length(x)hold on;plot(x(i),y2(i),'r.') endgtext('DCSK K=64');grid onxlabel('Eb/No[dB]'); ylabel('BER');');的系统误码率title('K=64.。
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为发送端使用的载波。
基于matlab的oqpsk调制解调
基于matlab的oqpsk调制解调在MATLAB 中进行OQPSK(Offset Quadrature Phase Shift Keying)调制和解调可以使用Communications Toolbox 提供的功能。
下面分别给出 OQPSK 调制和解调的示例代码:OQPSK 调制:% 参数设置Fs = 1000; % 采样率Ts = 1/Fs; % 采样间隔fc = 100; % 载波频率data = randi([0, 1], 1, 100); % 随机生成二进制数据% OQPSK 调制modulatedSignal = oqpskmod(data, fc, Fs, 'InputType', 'bit', 'PhaseOffset', pi/4);% 显示调制后的信号t = (0:length(modulatedSignal)-1) * Ts;figure;plot(t, real(modulatedSignal), t, imag(modulatedSignal));title('OQPSK Modulated Signal');xlabel('Time (s)');legend('I Channel', 'Q Channel');OQPSK 解调:% OQPSK 解调demodulatedData = oqpskdemod(modulatedSignal, fc, Fs, 'OutputType', 'bit', 'PhaseOffset', pi/4);% 显示解调后的数据figure;stem(data, 'r', 'DisplayName', 'Original Data');hold on;stem(demodulatedData, 'b', 'DisplayName', 'Demodulated Data');title('OQPSK Demodulation Result');xlabel('Bit Index');ylabel('Bit Value');legend('Original Data', 'Demodulated Data');这里使用了Communications Toolbox 中的oqpskmod 和oqpskdemod 函数,其中oqpskmod 用于OQPSK 调制,oqpskdemod 用于OQPSK 解调。
QPSK调制与解调在MATLAB平台上的实现
QPSK调制与解调在MATLAB平台上的实现QPSK(Quadrature Phase Shift Keying)是一种常见的数字调制技术,主要用于数字通信领域中的高速数据传输。
QPSK调制与解调的实现可以利用MATLAB平台,并结合数字信号处理工具箱中的相关函数来完成。
在本文中,将详细介绍QPSK调制和解调的MATLAB实现步骤,并给出相关代码示例。
1. 生成一个二进制序列作为调制数据。
可以使用MATLAB中的randi函数生成0和1构成的随机序列。
```matlabdata = randi([0 1], 1, N); % N表示数据长度```2. 将二进制序列转换为QPSK调制符号。
由于QPSK调制中每个调制符号代表2个比特,所以需要将二进制序列分成两部分,并将每一部分映射到相应的星座点上。
可以使用MATLAB中的bi2de函数将二进制序列转换为十进制数,并按照星座点的排列顺序进行映射。
示例代码如下:```matlabI_data = bi2de(data(1:2:end), 'left-msb');Q_data = bi2de(data(2:2:end), 'left-msb');```3. 根据映射的结果,使用复数运算来生成QPSK调制信号。
可将实部和虚部分别设置为I_data和Q_data,形成一个复数信号。
示例代码如下:```matlabmodulated_signal = I_data + 1i*Q_data;```4. 将调制信号进行归一化并添加高斯白噪声(可选)。
调制信号一般需要归一化为特定的信号功率,可以使用MATLAB中的awgn函数向调制信号添加高斯白噪声。
示例代码如下:```matlabnormalized_signal = modulated_signal / sqrt(2); % 归一化信号功率noisy_signal = awgn(normalized_signal, SNR); % 向信号添加高斯白噪声,SNR表示信噪比```QPSK解调的实现步骤如下:1.接收到带有噪声的QPSK信号。
matlab qpsk调制解调代码
一、介绍Matlab是一种专门用于科学计算和数据可视化的强大工具,QPSK调制解调是数字通信领域中常用的调制解调技术。
本文将介绍如何使用Matlab编写QPSK调制解调的代码。
二、QPSK调制原理QPSK是Quadrature Phase Shift Keying的缩写,即正交相移键控。
在QPSK调制中,将输入的数字比特流分成两路,分别用正弦波和余弦波进行调制。
通过将正弦波和余弦波的相位进行调整,可以将数字比特流转换为模拟信号进行传输。
三、QPSK调制过程1.将输入的数字比特流分为两路,分别表示为I路和Q路。
2.将I路比特流进行调制,使用正弦波作为载波信号,调整相位进行调制。
3.将Q路比特流进行调制,使用余弦波作为载波信号,调整相位进行调制。
4.将调制后的信号进行合并,得到QPSK调制信号。
四、QPSK解调过程1.接收到QPSK调制信号后,将信号分为I路和Q路。
2.将I路信号与正弦波进行乘积运算并积分,得到解调后的I路比特流。
3.将Q路信号与余弦波进行乘积运算并积分,得到解调后的Q路比特流。
五、Matlab QPSK调制解调代码实现```matlab生成随机QPSK调制信号data = randi([0, 1], 1, 1000); 生成随机比特流I = data(1:2:end); 取偶数位作为I路数据Q = data(2:2:end); 取奇数位作为Q路数据symbols = 2*I-1 + 1i*(2*Q-1); 将I路和Q路数据映射为QPSK符号显示QPSK调制信号scatterplot(symbols); 显示QPSK调制信号的星座图QPSK解调data_est = zeros(1, length(data));data_est(1:2:end) = real(symbols) > 0; 解调I路数据data_est(2:2:end) = imag(symbols) > 0; 解调Q路数据```六、总结本文介绍了QPSK调制解调的原理和过程,并给出了使用Matlab实现QPSK调制解调的代码。
qpsk调制matlab编写
QPSK (Quadrature Phase Shift Keying) 是一种常见的数字调制技术。
以下是一个基本的QPSK 调制的MATLAB 实现示例。
这个例子可能不是最优的,但它应该提供一个开始的地方。
matlab复制代码
% QPSK Modulation in MATLAB
clc;
clear all;
% Input bit stream
bits = randi([01], 1000, 1);
% Bit to symbol conversion for QPSK
symbols = 2 * bits - 1;
% Create a QPSK modulation object
modulator =
comm.QPSKModulator('BitInput',true,'BitOutput',false);
% Modulate the symbols
modulatedSig = modulator(symbols);
% Plot the constellation
comm.QPSKConstellation(modulatedSig);
在这个示例中,我们首先生成一个随机比特流。
然后,我们使用简单的映射将这个比特流转换为QPSK 符号。
然后,我们创建一个QPSK 调制器对象,并使用它来调制符号。
最后,我们画出调制信号的constellation。
这只是一个非常基本的示例,并没有包含解调、误码率计算等更复杂的内容。
如果你需要这些功能,你可能需要查找更详细的教程或者使用更高级的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信号,可以利用复数域的理论进行分析。
QPSK信号Matlab生成代码
rolloff = 0。
25; % Rolloff factorcutoffFreq = 1/(2*Tsym);% Cutoff frequency (half Nyquist bandwidth)%cutoffFreq为信号带宽的一半,也就是符号速率的一半,符号速率决定信号带宽orderFilt = nSymFilt*nsamp; % Filter order (number of taps — 1)% Filter responses and structuressqrtrcCoeff = firrcos(orderFilt, cutoffFreq, rolloff, 1/Tsamp, 'rolloff', 'sqrt');%%up samplingtrans_I=upsample(real(modulate),nsamp); %先要对原始调制的IQ数据进行过采样倍数的内插trans_Q=upsample(imag(modulate),nsamp);%%filter datatrans_I = filter(sqrtrcCoeff,1,trans_I);trans_Q = filter(sqrtrcCoeff,1,trans_Q);trans=trans_I+j*trans_Q;% *************************************************************************%需要I和Q值以及采样速率,由用户自己提供% *************************************************************************status = 1;I nstrTargetPath = ’C:\';% MS Windows based, e.g. SMU, SMJ, SMATE, AFQStartARB = 0; % start in path AKeepLocalFile = 1; % waveform local savedLocalFileName = ’case。
(完整版)QPSK调制原理及matlab程序实现
QPSK已调信号生成一、QPSK介绍QPSK是英文Quadrature Phase Shift Keying 的缩写,意为正交相移键控,是一种数字调制方式。
其有抗干扰性强、误码性能好、频谱利用率高等优点,广泛应用于数字微波通信系统、数字卫星通信系统、宽带接入、移动通信及有线电视系统之中。
二、实验平台和实验内容1、实验平台本实验是MATLAB环境中生成基本QPSK已调信号,只需要MATLAB12.0。
2、实验内容1.基带信号为周期127bits伪随机序列,信息比特速率:20kbps,载波频率:20kHz(速率及频率参数现场可调整);2.在MATLAB环境中编写M代码搭建QPSK调制系统模型;3.观测基带时域波形、已调信号时域波形;4.观测基带发射星座图;5.观测已调信号的功率谱(优先)或频谱;三、实现框图及其原理分析1、原理分析及其结构QPSK与二进制PSK一样,传输信号包含的信息都存在于相位中。
载波相位取四个等间隔值之一,如л/4, 3л/4,5л/4,和7л/4。
相应的E为发射信号的每个符号的能量,T为符号持续时间,载波频率f等于nc/T,nc为固定整数。
每一个可能的相位值对应于一个特定的二位组。
例如,可用前述的一组相位值来表示格雷码的一组二位组:10,00,01,11。
Sin(t)=2E/tcos[2]4/+∏i]0<=t<=T)1-ft∏2(其中,i=1,2,3,4。
2、框图四、实验结果与分析图一基带信号为周期为127bits的伪随机序列。
图二:已调信号时域波形带宽为7104 HzB点信号的星座图映射,00、01、10、11组合分别映射成-1-j,-1+j,1-j,1+j。
五、实验源码clc;clear all;Num=127;data=randi([0 1],1,Num);figure(1)plot(data)title('基带时域波形');f=20000; %载波频率20kHzRb=20000; %码元速率20kHzTs=1/f;Ns=8000;sample=1*Ns; %每个码元采点数为8000,采样频率为8000*20kHz N=sample*length(data)/2; %总采样点数data1=2*data-1; %正/负极性变换,产生二进制不归零双极性码元%-------------------------将信息源分成两路,分别对信号进行抽样-------------data_1=zeros(1,N); %定义一个长度为N的空数据data_1for i1=1:Num/2data_1(sample*(i1-1)+1:sample*i1)=data1(2*i1-1); %对奇数码元进行采样enddata_2=zeros(1,N);for i2=1:Num/2data_2(sample*(i2-1)+1:sample*i2)=data1(2*i2); %对偶数码元进行采样enda=zeros(1,N);b=zeros(1,N);for j1=1:Na(j1)=cos(2*pi*f*(j1-1)*Ts/Ns); %对余弦载波抽样每个周期采N个点 b(j1)=-sin(2*pi*f*(j1-1)*Ts/Ns); %对正弦载波抽样每个周期采N个点end%---------------------------调制---------------------------data_a=data_1.*a; %a路用余弦调制data_b=data_2.*b; %b路用正弦调制data_c=data_a+data_b;figure(2)subplot(3,1,1)plot(data_a)title('QPSK已调实部时域信号');subplot(3,1,2)plot(data_b)title('QPSK已调虚部时域信号');subplot(3,1,3)plot(data_c);title('QPSK已调信号时域波形');%---------------------绘制调制后波形的频谱图-------------------data_modul1= data_1(1:502000)+1i*data_2(1:502000);data_modul=data_a+1i*data_b;%调制后总的信号figure(3)plot(data_modul1,'o');axis([-2 2 -2 2]);title('星座图');figure(4)QPSK=10*log10(abs(fftshift(fft(data_modul,2048))).^2); %信号的频率值SFreq=linspace(-Rb*sample/2,Rb*sample/2,length(QPSK)); %信号的频率谱范围plot(SFreq,QPSK);title('QPSK已调信号频谱图');xlabel('Frequency');ylabel('Amplitude');hold on;。
通信原理的MATLAB实验 QPSK的调制解调报告
通信原理实验项目名称:QPSK的调制解调一、实验任务任意输入长度为64比特的二进制信息,采用QPSK系统传输。
码元速率为1Bps,载波频率为10Hz,采样频率为40 Hz,利用Matlab画出:(1)调制后的信号波形;(2)经信道传输后的信号波形(假设加性高斯白噪声,其功率为信号功率1/10);(3)(3)任意解调方法解调后的信号波形。
二、流程图三、完整程序Fd=1; %码元速率Fc=10; %载波频率Fs=40; %采样频率N=Fs/Fd;df=10;x=[ 1 1 0 1 1 0];%任意输入64比特的二进制信息M=2; %进制数SNRpBit=10;%加性高斯白噪声,其功率为信号功率的1/10,即信噪比为10 SNR=SNRpBit/log2(M); %转换为码元速率seed=[12345 54321];numPlot=length(x);figure(1)%画出输入二进制序列subplot(211);stem([0:numPlot-1],x(1:numPlot),'bx');title('输入波形’)%调制y=dmod(x,Fc,Fd,Fs,'fsk',M,df);numModPlot=numPlot*Fs;t=[0:numModPlot-1]./Fs;subplot(212);%画出调制后的信号plot(t,y(1:length(t)),'b-');axis([min(t) max(t) -1.5 1.5]);title('调制后的信号')%在已调信号中加入高斯白噪声randn('state',seed(2));y=awgn(y,SNR-10*log10(0.5)-10*log10(N),'measured',[],'dB');%相干解调figure(2)subplot(211);plot(t,y(1:length(t)),'b-');%画出经过信道的实际信号axis([min(t) max(t) -1.5 1.5]);title('加入高斯白噪声后的已调信号')%带输出波形的相干M元频移键控解调subplot(212);stem([0:numPlot-1],x(1:numPlot),'bx');hold on;stem([0:numPlot-1],z1(1:numPlot),'ro');hold off;axis([0 numPlot -0.5 1.5]);title('相干解调后的信号')四、波形。
QPSK调制与解调在MATLAB平台上的实现(word文档良心出品)
QPSK调制与解调在MATLAB平台上的实现QPSK即四进制移向键控(Quaternary Phase Shift Keying),它利用载波的四种不同相位来表示数字信息,由于每一种载波相位代表两个比特信息,因此每个四进制码元可以用两个二进制码元的组合来表示。
两个二进制码元中的前一个码元用a表示,后一个码元用b表示。
QPSK信号可以看作两个载波正交2PSK信号的合成,下图表示QPSK正交调制器。
由QPSK信号的调制可知,对它的解调可以采用与2PSK信号类似的解调方法进行解调。
解调原理图如下所示,同相支路和正交支路分别采用相干解调方式解调,得到()Q t,经过抽样判决和并/串交换器,将上下支路得到的并行I t和()数据恢复成串行数据。
% 调相法clear allclose allt=[-1:0.01:7-0.01];tt=length(t);x1=ones(1,800);for i=1:ttif (t(i)>=-1 & t(i)<=1) | (t(i)>=5& t(i)<=7);x1(i)=1;else x1(i)=-1;endendt1=[0:0.01:8-0.01];t2=0:0.01:7-0.01;t3=-1:0.01:7.1-0.01;t4=0:0.01:8.1-0.01;tt1=length(t1);x2=ones(1,800);for i=1:tt1if (t1(i)>=0 & t1(i)<=2) | (t1(i)>=4& t1(i)<=8);x2(i)=1;else x2(i)=-1;endendf=0:0.1:1;xrc=0.5+0.5*cos(pi*f);y1=conv(x1,xrc)/5.5;y2=conv(x2,xrc)/5.5;n0=randn(size(t2));f1=1;i=x1.*cos(2*pi*f1*t);q=x2.*sin(2*pi*f1*t1);I=i(101:800);Q=q(1:700);QPSK=sqrt(1/2).*I+sqrt(1/2).*Q;QPSK_n=(sqrt(1/2).*I+sqrt(1/2).*Q)+n0;n1=randn(size(t2));i_rc=y1.*cos(2*pi*f1*t3);q_rc=y2.*sin(2*pi*f1*t4);I_rc=i_rc(101:800);Q_rc=q_rc(1:700);QPSK_rc=(sqrt(1/2).*I_rc+sqrt(1/2).*Q_rc);QPSK_rc_n1=QPSK_rc+n1;figure(1)subplot(4,1,1);plot(t3,i_rc);axis([-1 8 -1 1]);ylabel('a序列');subplot(4,1,2);plot(t4,q_rc);axis([-1 8 -1 1]);ylabel('b序列');subplot(4,1,3);plot(t2,QPSK_rc);axis([-1 8 -1 1]);ylabel('合成序列'); subplot(4,1,4);plot(t2,QPSK_rc_n1);axis([-1 8 -1 1]);ylabel('加入噪声');效果图:% 设定T=1,加入高斯噪声clear allclose all% 调制bit_in = randint(1e3, 1, [0 1]);bit_I = bit_in(1:2:1e3);bit_Q = bit_in(2:2:1e3);data_I = -2*bit_I+1;data_Q = -2*bit_Q+1;data_I1=repmat(data_I',20,1);data_Q1=repmat(data_Q',20,1);for i=1:1e4data_I2(i)=data_I1(i);data_Q2(i)=data_Q1(i);end;f=0:0.1:1;xrc=0.5+0.5*cos(pi*f);data_I2_rc=conv(data_I2,xrc)/5.5;data_Q2_rc=conv(data_Q2,xrc)/5.5;f1=1;t1=0:0.1:1e3+0.9;n0=rand(size(t1));I_rc=data_I2_rc.*cos(2*pi*f1*t1);Q_rc=data_Q2_rc.*sin(2*pi*f1*t1); QPSK_rc=(sqrt(1/2).*I_rc+sqrt(1/2).*Q_rc); QPSK_rc_n0=QPSK_rc+n0;% 解调I_demo=QPSK_rc_n0.*cos(2*pi*f1*t1);Q_demo=QPSK_rc_n0.*sin(2*pi*f1*t1);% 低通滤波I_recover=conv(I_demo,xrc);Q_recover=conv(Q_demo,xrc);I=I_recover(11:10010);Q=Q_recover(11:10010);t2=0:0.05:1e3-0.05;t3=0:0.1:1e3-0.1;% 抽样判决data_recover=[];for i=1:20:10000data_recover=[data_recover I(i:1:i+19) Q(i:1:i+19)];end;bit_recover=[];for i=1:20:20000if sum(data_recover(i:i+19))>0data_recover_a(i:i+19)=1;bit_recover=[bit_recover 1];elsedata_recover_a(i:i+19)=-1;bit_recover=[bit_recover -1];endenderror=0;dd = -2*bit_in+1;ddd=[dd'];ddd1=repmat(ddd,20,1);for i=1:2e4ddd2(i)=ddd1(i);endfor i=1:1e3if bit_recover(i)~=ddd(i)error=error+1;endendp=error/1000;figure(1)subplot(2,1,1);plot(t2,ddd2);axis([0 100 -2 2]);title('原序列');subplot(2,1,2);plot(t2,data_recover_a);axis([0 100 -2 2]);title('解调后序列'); 效果图:% 设定T=1, 不加噪声clear allclose all% 调制bit_in = randint(1e3, 1, [0 1]);bit_I = bit_in(1:2:1e3);bit_Q = bit_in(2:2:1e3);data_I = -2*bit_I+1;data_Q = -2*bit_Q+1;data_I1=repmat(data_I',20,1);data_Q1=repmat(data_Q',20,1);for i=1:1e4data_I2(i)=data_I1(i);data_Q2(i)=data_Q1(i);end;t=0:0.1:1e3-0.1;f=0:0.1:1;xrc=0.5+0.5*cos(pi*f);data_I2_rc=conv(data_I2,xrc)/5.5;data_Q2_rc=conv(data_Q2,xrc)/5.5;f1=1;t1=0:0.1:1e3+0.9;I_rc=data_I2_rc.*cos(2*pi*f1*t1);Q_rc=data_Q2_rc.*sin(2*pi*f1*t1); QPSK_rc=(sqrt(1/2).*I_rc+sqrt(1/2).*Q_rc);% 解调I_demo=QPSK_rc.*cos(2*pi*f1*t1);Q_demo=QPSK_rc.*sin(2*pi*f1*t1);I_recover=conv(I_demo,xrc);Q_recover=conv(Q_demo,xrc);I=I_recover(11:10010);Q=Q_recover(11:10010);t2=0:0.05:1e3-0.05;t3=0:0.1:1e3-0.1;data_recover=[];for i=1:20:10000data_recover=[data_recover I(i:1:i+19) Q(i:1:i+19)]; end;ddd = -2*bit_in+1;ddd1=repmat(ddd',10,1);for i=1:1e4ddd2(i)=ddd1(i);endfigure(1)subplot(4,1,1);plot(t3,I);axis([0 20 -6 6]);subplot(4,1,2);plot(t3,Q);axis([0 20 -6 6]);subplot(4,1,3);plot(t2,data_recover);axis([0 20 -6 6]); subplot(4,1,4);plot(t,ddd2);axis([0 20 -6 6]);效果图:% QPSK误码率分析SNRindB1=0:2:10;SNRindB2=0:0.1:10;for i=1:length(SNRindB1)[pb,ps]=cm_sm32(SNRindB1(i));smld_bit_err_prb(i)=pb;smld_symbol_err_prb(i)=ps;end;for i=1:length(SNRindB2)SNR=exp(SNRindB2(i)*log(10)/10);theo_err_prb(i)=Qfunct(sqrt(2*SNR)); end;title('QPSK误码率分析');semilogy(SNRindB1,smld_bit_err_prb,'*');axis([0 10 10e-8 1]);hold on;% semilogy(SNRindB1,smld_symbol_err_prb,'o'); semilogy(SNRindB2,theo_err_prb);legend('仿真比特误码率','理论比特误码率'); hold off;function[y]=Qfunct(x)y=(1/2)*erfc(x/sqrt(2));function[pb,ps]=cm_sm32(SNRindB)N=10000;E=1;SNR=10^(SNRindB/10);sgma=sqrt(E/SNR)/2;s00=[1 0];s01=[0 1];s11=[-1 0];s10=[0 -1];for i=1:Ntemp=rand;if (temp<0.25)dsource1(i)=0;dsource2(i)=0;elseif (temp<0.5)dsource1(i)=0;dsource2(i)=1;elseif (temp<0.75)dsource1(i)=1;dsource2(i)=0;elsedsource1(i)=1;dsource2(i)=1;end;end;numofsymbolerror=0;numofbiterror=0;for i=1:Nn=sgma*randn(size(s00));if((dsource1(i)==0)&(dsource2(i)==0))r=s00+n;elseif((dsource1(i)==0)&(dsource2(i)==1)) r=s01+n;elseif((dsource1(i)==1)&(dsource2(i)==0)) r=s10+n;elser=s11+n;end;c00=dot(r,s00);c01=dot(r,s01);c10=dot(r,s10);c11=dot(r,s11);c_max=max([c00 c01 c10 c11]);if (c00==c_max)decis1=0;decis2=0;elseif(c01==c_max)decis1=0;decis2=1;elseif(c10==c_max)decis1=1;decis2=0;elsedecis1=1;decis2=1;end;symbolerror=0;if(decis1~=dsource1(i))numofbiterror=numofbiterror+1;symbolerror=1;end;if(decis2~=dsource2(i))numofbiterror=numofbiterror+1;symbolerror=1;end;if(symbolerror==1)numofsymbolerror=numofsymbolerror+1;end;end;ps=numofsymbolerror/N;pb=numofbiterror/(2*N);效果图:11。
QPSK调制与解调在MATLAB平台上的实现
QPSK调制与解调在MATLAB平台上的实现李悦QPSK即四进制移向键控(Quaternary Phase Shift Keying),它利用载波的四种不同相位来表示数字信息,由于每一种载波相位代表两个比特信息,因此每个四进制码元可以用两个二进制码元的组合来表示。
两个二进制码元中的前一个码元用a表示,后一个码元用b表示。
QPSK信号可以看作两个载波正交2PSK信号的合成,下图表示QPSK正交调制器。
由QPSK信号的调制可知,对它的解调可以采用与2PSK信号类似的解调方法进行解调。
解调原理图如下所示,同相支路和正交支路分别采用相干解调方式解调,得到()I t和()Q t,经过抽样判决和并/串交换器,将上下支路得到的并行数据恢复成串行数据。
页脚内容1% 调相法clear allclose allt=[-1:0.01:7-0.01];tt=length(t);x1=ones(1,800);for i=1:ttif (t(i)>=-1 & t(i)<=1) | (t(i)>=5& t(i)<=7);x1(i)=1;页脚内容2else x1(i)=-1;endendt1=[0:0.01:8-0.01];t2=0:0.01:7-0.01;t3=-1:0.01:7.1-0.01;t4=0:0.01:8.1-0.01;tt1=length(t1);x2=ones(1,800);for i=1:tt1if (t1(i)>=0 & t1(i)<=2) | (t1(i)>=4& t1(i)<=8);x2(i)=1;else x2(i)=-1;endend页脚内容3f=0:0.1:1;xrc=0.5+0.5*cos(pi*f);y1=conv(x1,xrc)/5.5;y2=conv(x2,xrc)/5.5;n0=randn(size(t2));f1=1;i=x1.*cos(2*pi*f1*t);q=x2.*sin(2*pi*f1*t1);I=i(101:800);Q=q(1:700);QPSK=sqrt(1/2).*I+sqrt(1/2).*Q;QPSK_n=(sqrt(1/2).*I+sqrt(1/2).*Q)+n0;n1=randn(size(t2));页脚内容4i_rc=y1.*cos(2*pi*f1*t3);q_rc=y2.*sin(2*pi*f1*t4);I_rc=i_rc(101:800);Q_rc=q_rc(1:700);QPSK_rc=(sqrt(1/2).*I_rc+sqrt(1/2).*Q_rc);QPSK_rc_n1=QPSK_rc+n1;figure(1)subplot(4,1,1);plot(t3,i_rc);axis([-1 8 -1 1]);ylabel('a序列');subplot(4,1,2);plot(t4,q_rc);axis([-1 8 -1 1]);ylabel('b序列');subplot(4,1,3);plot(t2,QPSK_rc);axis([-1 8 -1 1]);ylabel('合成序列'); subplot(4,1,4);plot(t2,QPSK_rc_n1);axis([-1 8 -1 1]);ylabel('加入噪声');效果图:页脚内容5% 设定T=1,加入高斯噪声clear allclose all% 调制bit_in = randint(1e3, 1, [0 1]);页脚内容6bit_I = bit_in(1:2:1e3);bit_Q = bit_in(2:2:1e3);data_I = -2*bit_I+1;data_Q = -2*bit_Q+1;data_I1=repmat(data_I',20,1);data_Q1=repmat(data_Q',20,1);for i=1:1e4data_I2(i)=data_I1(i);data_Q2(i)=data_Q1(i);end;f=0:0.1:1;xrc=0.5+0.5*cos(pi*f);data_I2_rc=conv(data_I2,xrc)/5.5;页脚内容7data_Q2_rc=conv(data_Q2,xrc)/5.5;f1=1;t1=0:0.1:1e3+0.9;n0=rand(size(t1));I_rc=data_I2_rc.*cos(2*pi*f1*t1);Q_rc=data_Q2_rc.*sin(2*pi*f1*t1);QPSK_rc=(sqrt(1/2).*I_rc+sqrt(1/2).*Q_rc);QPSK_rc_n0=QPSK_rc+n0;% 解调I_demo=QPSK_rc_n0.*cos(2*pi*f1*t1);Q_demo=QPSK_rc_n0.*sin(2*pi*f1*t1);% 低通滤波I_recover=conv(I_demo,xrc);Q_recover=conv(Q_demo,xrc);页脚内容8I=I_recover(11:10010);Q=Q_recover(11:10010);t2=0:0.05:1e3-0.05;t3=0:0.1:1e3-0.1;% 抽样判决data_recover=[];for i=1:20:10000data_recover=[data_recover I(i:1:i+19) Q(i:1:i+19)]; end;bit_recover=[];for i=1:20:20000if sum(data_recover(i:i+19))>0data_recover_a(i:i+19)=1;bit_recover=[bit_recover 1];else页脚内容9data_recover_a(i:i+19)=-1;bit_recover=[bit_recover -1];endenderror=0;dd = -2*bit_in+1;ddd=[dd'];ddd1=repmat(ddd,20,1);for i=1:2e4ddd2(i)=ddd1(i);endfor i=1:1e3if bit_recover(i)~=ddd(i)error=error+1;endend页脚内容10p=error/1000;figure(1)subplot(2,1,1);plot(t2,ddd2);axis([0 100 -2 2]);title('原序列');subplot(2,1,2);plot(t2,data_recover_a);axis([0 100 -2 2]);title('解调后序列');效果图:页脚内容11% 设定T=1, 不加噪声clear allclose all% 调制bit_in = randint(1e3, 1, [0 1]);bit_I = bit_in(1:2:1e3);bit_Q = bit_in(2:2:1e3);页脚内容12data_I = -2*bit_I+1;data_Q = -2*bit_Q+1;data_I1=repmat(data_I',20,1);data_Q1=repmat(data_Q',20,1);for i=1:1e4data_I2(i)=data_I1(i);data_Q2(i)=data_Q1(i);end;t=0:0.1:1e3-0.1;f=0:0.1:1;xrc=0.5+0.5*cos(pi*f);data_I2_rc=conv(data_I2,xrc)/5.5;data_Q2_rc=conv(data_Q2,xrc)/5.5;页脚内容13f1=1;t1=0:0.1:1e3+0.9;I_rc=data_I2_rc.*cos(2*pi*f1*t1);Q_rc=data_Q2_rc.*sin(2*pi*f1*t1);QPSK_rc=(sqrt(1/2).*I_rc+sqrt(1/2).*Q_rc);% 解调I_demo=QPSK_rc.*cos(2*pi*f1*t1);Q_demo=QPSK_rc.*sin(2*pi*f1*t1);I_recover=conv(I_demo,xrc);Q_recover=conv(Q_demo,xrc);I=I_recover(11:10010);Q=Q_recover(11:10010);t2=0:0.05:1e3-0.05;t3=0:0.1:1e3-0.1;页脚内容14data_recover=[];for i=1:20:10000data_recover=[data_recover I(i:1:i+19) Q(i:1:i+19)]; end;ddd = -2*bit_in+1;ddd1=repmat(ddd',10,1);for i=1:1e4ddd2(i)=ddd1(i);endfigure(1)subplot(4,1,1);plot(t3,I);axis([0 20 -6 6]);subplot(4,1,2);plot(t3,Q);axis([0 20 -6 6]);subplot(4,1,3);plot(t2,data_recover);axis([0 20 -6 6]);subplot(4,1,4);plot(t,ddd2);axis([0 20 -6 6]);页脚内容15效果图:% QPSK误码率分析SNRindB1=0:2:10;SNRindB2=0:0.1:10;for i=1:length(SNRindB1)[pb,ps]=cm_sm32(SNRindB1(i));smld_bit_err_prb(i)=pb;smld_symbol_err_prb(i)=ps;页脚内容16end;for i=1:length(SNRindB2)SNR=exp(SNRindB2(i)*log(10)/10);theo_err_prb(i)=Qfunct(sqrt(2*SNR));end;title('QPSK误码率分析');semilogy(SNRindB1,smld_bit_err_prb,'*');axis([0 10 10e-8 1]);hold on;% semilogy(SNRindB1,smld_symbol_err_prb,'o');semilogy(SNRindB2,theo_err_prb);legend('仿真比特误码率','理论比特误码率');hold off;function[y]=Qfunct(x)y=(1/2)*erfc(x/sqrt(2));页脚内容17function[pb,ps]=cm_sm32(SNRindB)N=10000;E=1;SNR=10^(SNRindB/10);sgma=sqrt(E/SNR)/2;s00=[1 0];s01=[0 1];s11=[-1 0];s10=[0 -1];for i=1:Ntemp=rand;if (temp<0.25)dsource1(i)=0;dsource2(i)=0;elseif (temp<0.5)页脚内容18dsource1(i)=0;dsource2(i)=1;elseif (temp<0.75)dsource1(i)=1;dsource2(i)=0;elsedsource1(i)=1;dsource2(i)=1;end;end;numofsymbolerror=0;numofbiterror=0;for i=1:Nn=sgma*randn(size(s00));if((dsource1(i)==0)&(dsource2(i)==0))r=s00+n;elseif((dsource1(i)==0)&(dsource2(i)==1))页脚内容19r=s01+n;elseif((dsource1(i)==1)&(dsource2(i)==0))r=s10+n;elser=s11+n;end;c00=dot(r,s00);c01=dot(r,s01);c10=dot(r,s10);c11=dot(r,s11);c_max=max([c00 c01 c10 c11]);if (c00==c_max)decis1=0;decis2=0;elseif(c01==c_max)decis1=0;decis2=1;elseif(c10==c_max)decis1=1;decis2=0;页脚内容20elsedecis1=1;decis2=1;end;symbolerror=0;if(decis1~=dsource1(i))numofbiterror=numofbiterror+1;symbolerror=1;end;if(decis2~=dsource2(i))numofbiterror=numofbiterror+1;symbolerror=1;end;if(symbolerror==1)numofsymbolerror=numofsymbolerror+1;end;end;ps=numofsymbolerror/N;页脚内容21pb=numofbiterror/(2*N);效果图:页脚内容22。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
混沌通信中QCSK调制matlab代码.
;all clear
x=randsrc(20,1,[0:1]); %产生二进制随机码
stairs(x);
axis([0,20,-0.1,1.1]);
title('二进制随机序列');
clc
clear
close all
% q=99;
%k=[1:99];
%x(k)=sin(k*pi/q);
x(1)=0.212345;
for k = 1:99;
x(k+1) =4 * x(k) * (1 - x(k)); end
plot(x);
legend('混沌信号x'); grid on;%加网格
clc
clear
close all
% q=99;
%k=[1:99];
%x(k)=sin(k*pi/q);
x(1)=0.212345;
for k=1:99;
x(k+1)=4*x(k)*(1-x(k)); end
y=hilbert(x);
figure(1)
plot(imag(y));
legend('希尔伯特变换y'); grid on
clc
clear
close all
% q=99;
%k=[1:99];
%x(k)=sin(k*pi/q);
x(1)=0.212345;%x的初植
for k=1:99;
x(k+1)=4*x(k)*(1-x(k)); end
y=hilbert(x);%x的希尔伯特变换figure(1)
plot(imag(y));
grid on
legend('加密后的信号ms');
clc
clear
close all
% q=99;
%k=[1:99];
%x(k)=sin(k*pi/q);
x(1)=0.212345;
for k=1:99;
x(k+1)=4*x(k)*(1-x(k)); end
y=hilbert(x);%希尔伯特变换figure(1)
plot(imag(y));
grid on
legend('加密后的信号ms');
y2=AWGN(imag(y),0.8,1);%imag(y)为已调信号,0.8为信噪比,1为信号功率figure(2)
plot(y2);
grid on
y2');
加噪声后的调制信号legend('
bs=1;
Eb=1;
Zb=bs.*Eb;%解调出的信号stem(Zb,'r');
title('解调出的信号Zb')
clc;
x=0:18;%信噪比的取植范围
xSNR=10.^(x/20);%化成dB形式
for i=1:length(x);
k=2;
y1(i)=1/2*erfc(1/(sqrt(4*1/xSNR (i)+k*((1/xSNR(i))^2))));%求k=2的系统理论的误码率
end
semilogy(x,y1);%绘出x和y1的图for i=1:length(x)
hold on;
plot(x(i),y1(i),'g*')
end
gtext('QCSK,K=2');%在光标的位置放置给定的文字
for i=1:length(x);
k=16;
y2(i)=1/2*erfc(1/(sqrt(4*1/xSNR (i)+k*((1/xSNR(i))^2))));%求
k=16的系统理论的误码率
end
semilogy(x,y2);%绘出x和y2的图for i=1:length(x)
hold on;
plot(x(i),y2(i),'r.')
end
gtext('QCSK,K=16');
for i=1:length(x);
k=64;
y3(i)=1/2*erfc(1/(sqrt(4*1/xSNR (i)+k*((1/xSNR( 的系统理论的误码率k=64求i))^2))));%.
end
semilogy(x,y3);%绘出x和y3的图for i=1:length(x)
hold on;
plot(x(i),y3(i),'b+') end
gtext('QCSK,K=64');
grid on
xlabel('Eb/No[dB]'); ylabel('BER');
title('QCSK的系统误码率');
clc;
x=0:18;%信噪比的取植范围
xSNR=10.^(x/20);%化成dB形式
for i=1:length(x);
k=2;
y1(i)=1/2*erfc(1/(sqrt(4*1/xSNR (i)+k*((1/xSNR(i))^2))));%求QCSK,k=2的系统理论的误码率
end
semilogy(x,y1);
for i=1:length(x)
hold on;
plot(x(i),y1(i),'g*')
end
for i=1:length(x);
k=2;
y2(i)=1/2*erfc(1/(sqrt(4*1/xSNR (i)+2*k*((1/xSNR(i))^2))));%求DCSK,k=2的系统理论的误码率
end
semilogy(x,y2);
for i=1:length(x)
hold on;
plot(x(i),y2(i),'r.')
end
gtext('绿色的*表示QCSK K=2;红色的.表示DCSK K=2');
grid on
xlabel('Eb/No[dB]');
ylabel('BER');
');
的系统误码率title('K=2.
clc;
x=0:18;%信噪比的取植范围
xSNR=10.^(x/20);%化成dB形式
for i=1:length(x);
k=16;
y1(i)=1/2*erfc(1/(sqrt(4*1/xSNR (i)+k*((1/xSNR(i))^2))));%求
QCSK,k=16的系统理论的误码率 end
semilogy(x,y1);
for i=1:length(x)
hold on;
plot(x(i),y1(i),'g*') end
gtext('QCSK,K=16');
for i=1:length(x);
k=16;
y2(i)=1/2*erfc(1/(sqrt(4*1/xSNR (i)+2*k*((1/xSNR(i))^2))));%求DCSK,k=16的系统理论的误码率
end
semilogy(x,y2);
for i=1:length(x)
hold on;
plot(x(i),y2(i),'r.')
end
gtext('DCSK,K=16');
grid on
xlabel('Eb/No[dB]');
ylabel('BER');
');
时的系统误码率title('K=16.
clc;
x=0:18;%信噪比的取植范围
xSNR=10.^(x/20);%化成dB形式
for i=1:length(x);
k=64;
y1(i)=1/2*erfc(1/(sqrt(4*1/xSNR (i)+k*((1/xSNR(i))^2))));%求QCSK,k=64的系统理论的误码率
end
semilogy(x,y1);
for i=1:length(x)
hold on;
plot(x(i),y1(i),'g*')
end
gtext('QCSK K=64');
for i=1:length(x);
k=64;
y2(i)=1/2*erfc(1/(sqrt(4*1/xSNR (i)+2*k*((1/xSNR(i))^2))));%求DCSK,k=64的系统理论的误码率
end
semilogy(x,y2);
for i=1:length(x)
hold on;
plot(x(i),y2(i),'r.') end
gtext('DCSK K=64');
grid on
xlabel('Eb/No[dB]'); ylabel('BER');
');
的系统误码率title('K=64.。