基于Matlab实现BPSK、QPSK 和 16QAM 调制的循环前缀和直接序列扩频(Matlab代码实现)

本文主要是介绍基于Matlab实现BPSK、QPSK 和 16QAM 调制的循环前缀和直接序列扩频(Matlab代码实现),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

     目录

💥1 概述

📚2 运行结果

🎉3 参考文献

👨‍💻4 Matlab代码

💥1 概述

该项目的目的是模拟不同调制方案(BPSK,QPSK,16QAM)的OFDM系统,无需编码,并使用(1/3)重复编码。

用于瑞利平坦衰落通道和频率选择性衰落通道。

📚2 运行结果

主函数部分代码:

clc, clear, close all
% Generate Random Bit stream bk
L = 1e6;
Eb_BPSK = 1;
bk = randi([0 1], 1, L);% Generate BPSK symbols based on the bit stream xk
xk = bk;
xk(xk == 1) = sqrt(Eb_BPSK);
xk(xk == 0) = -sqrt(Eb_BPSK);% Generate the complex channel vector and complex noise vector
N = 1:10;
N0 = Eb_BPSK ./ (10 .^ (N ./ 10)); % assumption
BER_v = zeros(1, 10);
SNR = zeros(1, 10);
for i = 1:10hr = normrnd(0, sqrt(0.5), 1, L);hi = normrnd(0, sqrt(0.5), 1, L);channel_BPSK = hr + 1j * hi;nc = normrnd(0, sqrt(N0(i) / 2), 1, L);ns = normrnd(0, sqrt(N0(i) / 2), 1, L);Noise_BPSK = nc + 1j * ns;% Compute the received symbol vector ykyk = channel_BPSK .* xk + Noise_BPSK;% Compensate for the channel gain at the receiverbk_telda = yk ./ channel_BPSK;                bk_telda(bk_telda > 0) = 1;bk_telda(bk_telda < 0) = 0;% Compute the bit-error rate (BER) for SNRBER = 0;for n = 1:Lif(bk_telda(n) ~= bk(n))BER = BER + 1;elsecontinue;endendBER_v(i) = BER / L;SNR(i) = 10 * log10(Eb_BPSK / N0(i));
end
semilogy(SNR, BER_v);
title('BER vs. SNR for BPSK before repetition');
xlabel('SNR (dB)');
ylabel('BER');
grid on;
hold on;% % Theoritacl Calculation
% BER_TH = zeros(length(N), 20);
% BER_TH(:, 1) = berfading(N, 'psk', 4, 1);
% semilogy(N, BER_TH)
% legend('Practical BER','Theoritical BER')%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Repeat the code
clc, clear
% Generate Random Bit stream bk
L = 1e6;
Eb_BPSK = 1;
bk = randi([0 1], 1, L);% Generate BPSK symbols based on the bit stream xk
xk = bk;
xk(xk == 1) = sqrt(Eb_BPSK);
xk(xk == 0) = -sqrt(Eb_BPSK);
xk_rep = repelem(xk, 3);
xk_ver = zeros(1, L);
BER_ver = zeros(1, 10);
% Generate the complex channel vector and complex noise vector
N = 1:10;
N0 = Eb_BPSK ./ (10 .^ (N ./ 10)); % assumption
SNR = zeros(1, 10);
for i = 1:10hr = normrnd(0, sqrt(0.5), 1, 3 * L);hi = normrnd(0, sqrt(0.5), 1, 3 * L);channel_BPSK = hr + 1j * hi;nc = normrnd(0, sqrt(N0(i) / 2), 1, 3 * L);ns = normrnd(0, sqrt(N0(i) / 2), 1, 3 * L);Noise_BPSK = nc + 1j * ns;% Compute the received symbol vector ykyk = channel_BPSK .* xk_rep + Noise_BPSK;% Compensate for the channel gain at the receiverbk_telda = yk ./ channel_BPSK;                bk_telda(bk_telda > 0) = 1;bk_telda(bk_telda < 0) = 0;% make the decsioncounter = 1;for j = 1:3:3*Lif((bk_telda(j) + bk_telda(j+1) + bk_telda(j+2)) > 1)xk_ver(counter) = 1;elsexk_ver(counter) = 0;endcounter = counter + 1;end

🎉3 参考文献

[1]于江,王春岭,沈刘平,张磊.扩频通信技术原理及其应用[J].中国无线电,2010(03):44-47.

部分理论引用网络文献,若有侵权联系博主删除。

这篇关于基于Matlab实现BPSK、QPSK 和 16QAM 调制的循环前缀和直接序列扩频(Matlab代码实现)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/m0_73907476/article/details/131071949
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/243131

相关文章

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

IIS 7.0 及更高版本中的 FTP 状态代码

《IIS7.0及更高版本中的FTP状态代码》本文介绍IIS7.0中的FTP状态代码,方便大家在使用iis中发现ftp的问题... 简介尝试使用 FTP 访问运行 Internet Information Services (IIS) 7.0 或更高版本的服务器上的内容时,IIS 将返回指示响应状态的数字代

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

c/c++的opencv实现图片膨胀

《c/c++的opencv实现图片膨胀》图像膨胀是形态学操作,通过结构元素扩张亮区填充孔洞、连接断开部分、加粗物体,OpenCV的cv::dilate函数实现该操作,本文就来介绍一下opencv图片... 目录什么是图像膨胀?结构元素 (KerChina编程nel)OpenCV 中的 cv::dilate() 函

Python使用FFmpeg实现高效音频格式转换工具

《Python使用FFmpeg实现高效音频格式转换工具》在数字音频处理领域,音频格式转换是一项基础但至关重要的功能,本文主要为大家介绍了Python如何使用FFmpeg实现强大功能的图形化音频转换工具... 目录概述功能详解软件效果展示主界面布局转换过程截图完成提示开发步骤详解1. 环境准备2. 项目功能结

SpringBoot使用ffmpeg实现视频压缩

《SpringBoot使用ffmpeg实现视频压缩》FFmpeg是一个开源的跨平台多媒体处理工具集,用于录制,转换,编辑和流式传输音频和视频,本文将使用ffmpeg实现视频压缩功能,有需要的可以参考... 目录核心功能1.格式转换2.编解码3.音视频处理4.流媒体支持5.滤镜(Filter)安装配置linu

在Spring Boot中实现HTTPS加密通信及常见问题排查

《在SpringBoot中实现HTTPS加密通信及常见问题排查》HTTPS是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护,下面通过本文给大家介绍在SpringB... 目录一、HTTPS核心原理1.加密流程概述2.加密技术组合二、证书体系详解1、证书类型对比2. 证书获

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3