QPSK调制系统matlab仿真函数

function [y,signal] = qpsk_function(data_length,fs,fc,EbN0,interpolation_rate,Sample_position)
%qpsk 调制系统
%y误码率
%signal 发送信号

%data_length 数据长度
%fs  数据频率
%fc  载波频率
%interpolation_rate 内插系数
%Sample_position 采样点
w_carrier = fc/fs;
SNR = EbN0 +10*log10(4/interpolation_rate); 

%% 发送端
data_send = randi([0,1],data_length,1);  %0/1序列
data_bio = 1-2*data_send;                %对极序列0->1  1->-1
data_i = data_bio(1:2:end);%奇数位
data_q = data_bio(2:2:end);%偶数位
data_upsample_i = upsample(data_i,interpolation_rate);  %内插(每个数据间插入interpolation_rate个0)
data_upsample_q = upsample(data_q,interpolation_rate);  %内插

alpha = 0.35;
span = 6;
hrc1 = rcosdesign(0.35,span,interpolation_rate,'sqrt'); 
hrc = ones(1,interpolation_rate);                    %方形滤波器

%脉冲成型
baseband_i = conv(data_upsample_i,hrc)';                   %成型
baseband_q = conv(data_upsample_q,hrc)';                   %成型

%% 调制
carrier_i = cos(2*pi*w_carrier*[0:length(baseband_i)-1]);   %载波
carrier_q = -sin(2*pi*w_carrier*[0:length(baseband_q)-1]);   %载波
send_qpsk_i = baseband_i.*carrier_i;
send_qpsk_q = baseband_q.*carrier_q;
send_qpsk = send_qpsk_i +send_qpsk_q;  %BPSK调制
 carrier = carrier_i + j*carrier_q;                      %合成复载波


 %% 信道
 recv = awgn(send_qpsk,SNR,'measured');                %加性高斯白
    
 %% 接收

 recv_carrier_i =  carrier_i.*recv;
 recv_carrier_q =  carrier_q.*recv;

 recv_bio_i = conv(recv_carrier_i,hrc);              %匹配滤波
 recv_bio_q = conv(recv_carrier_q,hrc);              %匹配滤波器
 recv_bio_i = recv_bio_i(length(hrc):end-length(hrc)+1);
 recv_bio_q = recv_bio_q(length(hrc):end-length(hrc)+1);

  recv_data_i = downsample(recv_bio_i,interpolation_rate,Sample_position);%下采样——恢复(数据,内插插入点,最佳采样点)
  recv_data_q = downsample(recv_bio_q,interpolation_rate,Sample_position);


 %画星座图 
   scatterplot(recv_data_i+1j*recv_data_q);

  
%判决 计算误码
demod_data = demodulatorQPSK (recv_data_i, recv_data_q,data_length);%demodulatorQPSK(I,Q,符号数) qpsk判决函数
errors = sum(data_send ~= demod_data);%~=统计不相等元素个数
BER =errors /data_length;


 y=BER;
 signal = send_qpsk;
function [ demodulatedBitArrayQPSK ] = demodulatorQPSK (x, y, BIT_NUMBER)
% x 奇数位  y 偶数位     BIT_NUMBER——符号数
demodulatedBitArrayQPSK = zeros(BIT_NUMBER, 1);
%-1->1 1->0
for i = 1:BIT_NUMBER/2

    if x(i) < 0
        
        if y(i) < 0
            
            demodulatedBitArrayQPSK((2*i) - 1) = 1;
            demodulatedBitArrayQPSK(2*i) = 1;
            
        else
            
            demodulatedBitArrayQPSK((2*i) - 1) = 1;
            demodulatedBitArrayQPSK(2*i) = 0;
            
        end
       
    else
        
        if y(i) < 0
            
            demodulatedBitArrayQPSK((2*i) - 1) = 0;
            demodulatedBitArrayQPSK(2*i) = 1;
            
        else
            
            demodulatedBitArrayQPSK((2*i) - 1) = 0;
            demodulatedBitArrayQPSK(2*i) = 0;
            
        end
        
    end
    
end

end
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您想了解关于 qpsk 调制解调 Matlab 仿真的信息。QPSK 是一种常见的数字调制方式,它常被用于数字通信领域中。在 Matlab 中,可以使用 Communications Toolbox 中的 qpskmod 和 qpskdemod 函数进行 QPSK 调制和解调。这两个函数可以用于 MATLAB 中二进制数据流的调制和解调操作,其中 qpskmod 将二进制数据转换成 QPSK 符号,而 qpskdemod 将收到的 QPSK 符号转换为相应的二进制数据流。 下面是一个简单的 Matlab 代码示例,演示如何使用 qpskmod 和 qpskdemod 函数来实现 QPSK 调制和解调: % 载波频率值 fc = 1000; % 采样频率值 fs = 8000; % 采样时间 t = 0:1/fs:1; % 生成随机的二进制数据 data = randi([0 1], 1, 100); % QPSK调制 mod_data = qpskmod(data); % 将调制后的数据沿载波进行调制 carrier = cos(2*pi*fc*t); qpsk_signal = real(mod_data.'.*carrier); % 加入高斯白噪声 SNRdB = 10; qpsk_signal_noisy = awgn(qpsk_signal, SNRdB, 'measured'); % QPSK解调 demod_data = qpskdemod(qpsk_signal_noisy); % 计算比特误码率 ber = sum(xor(demod_data, data))/length(data); 上述代码中,我们首先使用 randi 函数生成一组随机的二进制数据,然后将其输入到 qpskmod 函数中进行 QPSK 调制得到 mod_data。接下来,我们使用余弦函数生成一个载波信号,将 mod_data 沿载波进行调制得到 qpsk_signal。然后,我们使用 awgn 函数qpsk_signal 添加高斯白噪声,得到 qpsk_signal_noisy。最后,我们将 qpsk_signal_noisy 输入到 qpskdemod 函数中进行 QPSK 解调,得到 demod_data。计算比特误码率的代码 ber = sum(xor(demod_data, data))/length(data)则可以用于确定解调的准确性。 希望以上信息能对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值