MATLAB實戰:實現數字調制解調仿真

以下是使用MATLAB實現BPSK和QPSK數字調制解調仿真的完整代碼。該代碼包括調制、AWGN信道、匹配濾波/相關解調、星座圖繪制以及誤碼率計算與理論值比較。

%% 清理環境
clear all; close all; clc;

%% 參數設置
numBits = 100000; ? ? ? ? ? % 傳輸比特數
EbN0_dB = 0:2:10; ? ? ? ? ?% Eb/N0范圍 (dB)
modTypes = {'bpsk', 'qpsk'}; % 調制類型

%% 主循環:BPSK和QPSK仿真
for modIdx = 1:length(modTypes)
? ? modType = modTypes{modIdx};
? ? berSim = zeros(size(EbN0_dB)); % 存儲仿真BER
? ??
? ? % 根據調制方式確定參數
? ? if strcmpi(modType, 'bpsk')
? ? ? ? M = 2; ?% 調制階數
? ? ? ? k = 1; ?% 每符號比特數
? ? ? ? % 理論BER計算
? ? ? ? berTheory = berawgn(EbN0_dB, 'psk', M, 'nondiff');
? ? else % QPSK
? ? ? ? M = 4;
? ? ? ? k = 2;
? ? ? ? % Gray編碼的QPSK理論BER
? ? ? ? berTheory = berawgn(EbN0_dB, 'psk', M, 'nondiff');
? ? end
? ??
? ? % 生成隨機比特流
? ? dataBits = randi([0 1], numBits, 1);
? ??
? ? % 調制過程
? ? if strcmpi(modType, 'bpsk')
? ? ? ? % BPSK調制: 0 -> -1; 1 -> 1
? ? ? ? txSym = 2*dataBits - 1;
? ? else % QPSK調制
? ? ? ? % 重組比特: 每兩比特構成一個符號
? ? ? ? reshapedBits = reshape(dataBits, k, [])';
? ? ? ? % Gray映射: [00->1+1j, 01->1-1j, 11->-1-1j, 10->-1+1j]
? ? ? ? txSym = (1 - 2*reshapedBits(:,1)) + 1j*(1 - 2*reshapedBits(:,2));
? ? end
? ??
? ? % 能量歸一化 (確保Eb=1)
? ? if strcmpi(modType, 'qpsk')
? ? ? ? txSym = txSym / sqrt(2); % QPSK符號能量歸一化為1
? ? end
? ??
? ? % 循環不同Eb/N0值
? ? for idx = 1:length(EbN0_dB)
? ? ? ? % 計算當前SNR對應的噪聲方差
? ? ? ? EbN0_lin = 10^(EbN0_dB(idx)/10);
? ? ? ? noiseVar = 1/(2*k*EbN0_lin); % 復噪聲方差
? ? ? ??
? ? ? ? % 生成復高斯噪聲
? ? ? ? noise = sqrt(noiseVar)*randn(size(txSym)) + 1j*sqrt(noiseVar)*randn(size(txSym));
? ? ? ??
? ? ? ? % 通過AWGN信道
? ? ? ? rxSig = txSym + noise;
? ? ? ??
? ? ? ? % 解調過程
? ? ? ? if strcmpi(modType, 'bpsk')
? ? ? ? ? ? % BPSK解調: 實部判決
? ? ? ? ? ? rxBits = real(rxSig) > 0;
? ? ? ? else % QPSK解調
? ? ? ? ? ? % 提取I/Q路并判決
? ? ? ? ? ? I = real(rxSig) < 0; ?% I路判決
? ? ? ? ? ? Q = imag(rxSig) < 0; ?% Q路判決
? ? ? ? ? ? % 重組比特流
? ? ? ? ? ? rxBits = [I Q]';
? ? ? ? ? ? rxBits = rxBits(:);
? ? ? ? end
? ? ? ??
? ? ? ? % 計算誤比特率(BER)
? ? ? ? bitErr = sum(dataBits ~= rxBits);
? ? ? ? berSim(idx) = bitErr / numBits;
? ? end
? ??
? ? %% 結果可視化
? ? % 星座圖繪制
? ? figure(modIdx);
? ? scatterplot(rxSig);
? ? title([upper(modType) ' Constellation at Eb/N0 = ' num2str(EbN0_dB(end)) ' dB']);
? ? grid on;
? ??
? ? % BER曲線比較
? ? figure(length(modTypes)+1);
? ? semilogy(EbN0_dB, berSim, 'o-', 'LineWidth', 2, 'DisplayName', [upper(modType) ' Sim']);
? ? hold on;
? ? semilogy(EbN0_dB, berTheory, 's--', 'LineWidth', 2, 'DisplayName', [upper(modType) ' Theory']);
end

%% 圖形美化
figure(length(modTypes)+1);
grid on;?
xlabel('Eb/N0 (dB)');?
ylabel('Bit Error Rate (BER)');
title('BER Performance Comparison');
legend('Location', 'southwest');
set(gca, 'YScale', 'log');
ylim([1e-5 1]);

代碼功能說明:

  1. 調制方式

    • BPSK:二進制相移鍵控(0→-1, 1→+1)

    • QPSK:正交相移鍵控(Gray編碼:00→(1+1j)/√2, 01→(1-1j)/√2, 11→(-1-1j)/√2, 10→(-1+1j)/√2)

  2. 關鍵處理步驟

    • 比特生成:生成隨機二進制數據

    • 調制映射:根據調制類型將比特映射為復符號

    • 能量歸一化:確保單位比特能量(Eb=1)

    • AWGN信道:添加復高斯白噪聲

    • 解調判決:相關解調(實部/虛部分別判決)

    • BER計算:比較發送與接收比特

  3. 可視化功能

    • 星座圖(scatterplot函數)

    • BER曲線:仿真結果與理論值(berawgn函數)對比

  4. 理論BER參考

    • BPSK理論BER:0.5*erfc(sqrt(Eb/N0))

    • QPSK理論BER:與BPSK相同(Gray編碼時)

運行結果示例:

  1. 星座圖

    • BPSK:兩點分布在實軸±1位置

    • QPSK:四點分布在復平面四個象限

  2. BER曲線

    • 仿真曲線(帶標記)與理論曲線(虛線)緊密重合

    • 隨Eb/N0增加,BER指數下降

關鍵函數說明:

  1. berawgn:計算AWGN信道理論BER

  2. scatterplot:繪制信號星座圖

  3. randi:生成隨機比特序列

  4. semilogy:繪制對數坐標BER曲線

此代碼完整實現了數字調制解調系統仿真流程,通過調整參數(如numBitsEbN0_dB)可進行不同規模的仿真實驗。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83093.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83093.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83093.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據可視化的定義和類型

數據可視化是一種將數據轉換為圖形或視覺表示的方法。想象一下&#xff0c;你面前有一堆數字和表格&#xff0c;看著這些&#xff0c;可能會讓人頭大。數據可視化就像是給這些枯燥的數字畫上一幅畫。它用圖表、地圖和各種有趣的圖形&#xff0c;幫我們把難懂的數字變得容易看懂…

*JavaScript中的Symbol類型:唯一標識符的藝術

JavaScript中的Symbol類型&#xff1a;唯一標識符的藝術 在JavaScript的世界中&#xff0c;數據類型一直是開發者關注的焦點。從基本的Number、String到后來的Symbol&#xff0c;每一種類型的引入都為語言本身注入了新的活力。而今天我們要聊的主角——Symbol&#xff0c;是ES…

粽葉飄香時 山水有相逢

粽葉飄香時 山水有相逢 尊敬的廣大客戶們&#xff1a; 五月初五&#xff0c;艾葉幽香。值此端午佳節&#xff0c;衡益科技全體同仁向您致以最誠摯的祝福&#xff01; 這一年我們如同協同競渡的龍舟&#xff0c;在數字化轉型的浪潮中默契配合。每一次技術對接、每輪方案優化&a…

一文認識并學會c++模板初階

文章目錄 泛型編程&#xff1a;概念 函數模板概念&#xff1a;&#x1f6a9;函數模板格式原理&#xff1a;&#x1f6a9;函數模板實例化與非模板函數共存 類模板類模板實例化 泛型編程&#xff1a; 概念 &#x1f6a9;編寫與類型無關的通用代碼&#xff0c;是代碼復寫一種手段…

Python實現VTK-自學筆記(5):在三維世界里自由舞蹈——高級交互與動態可視化

深夜的臺燈在屏幕上投下溫暖的弧光,指尖敲擊鍵盤的節奏逐漸與窗外雨滴聲融為一體。這是我在VTK世界的第五次探險,此刻顯示器里旋轉的彩色分子模型仿佛在對我眨眼——它渴望被觸摸、被塑造、被賦予生命。今天,就讓我們用Python為這些沉默的數據注入靈魂,見證靜態可視化如何蛻…

智慧充電樁數字化管理平臺:環境監測與動態數據可視化技術有哪些作用?

隨著新能源汽車的普及&#xff0c;智慧充電樁作為基礎設施的重要組成部分&#xff0c;正逐步向數字化、智能化方向發展。環境監測與動態數據可視化技術的應用&#xff0c;為充電樁的高效管理和運維提供了全新解決方案。通過實時采集環境參數與運行數據&#xff0c;并結合可視化…

LVS +Keepalived高可用群集

目錄 一&#xff1a;Keepalived雙機熱備基礎知識 1.Keepalived 概述及安裝 1.1.Keepalived的熱備方式 1.2.Keepalived 的安裝與服務控制 &#xff08;1&#xff09;安裝Keepalived &#xff08;2&#xff09;控制Keepalived服務 2.使用Keepalived實現雙機熱備 2.1.主服務…

深入剖析Java類加載機制:雙親委派模型的突破與實戰應用

引言&#xff1a;一個詭異的NoClassDefFoundError 某金融系統在遷移到微服務架構后&#xff0c;突然出現了一個詭異問題&#xff1a;在調用核心交易模塊時&#xff0c;頻繁拋出NoClassDefFoundError&#xff0c;但類明明存在于classpath中。經過排查&#xff0c;發現是由于不同…

Go語言的context

Golang context 實現原理 本篇文章是基于小徐先生的文章的修改和個人注解&#xff0c;要查看原文可以點擊上述的鏈接查看 目前我這篇文章的go語言版本是1.24.1 context上下文 context被當作第一個參數&#xff08;官方建議&#xff09;&#xff0c;并且不斷的傳遞下去&…

BERT、GPT-3與超越:NLP模型演進全解析

自然語言處理&#xff08;NLP&#xff09;領域近年來經歷了前所未有的變革&#xff0c;從早期的統計方法到如今的深度學習大模型&#xff0c;技術的進步推動了機器理解、生成和交互能力的飛躍。其中&#xff0c;BERT和GPT-3作為兩個里程碑式的模型&#xff0c;分別代表了不同的…

Kanass入門教程- 事項管理

kanass是一款國產開源免費、簡潔易用的項目管理工具&#xff0c;包含項目管理、項目集管理、事項管理、版本管理、迭代管理、計劃管理等相關模塊。工具功能完善&#xff0c;用戶界面友好&#xff0c;操作流暢。本文主要介紹事項管理使用指南。 1、添加事項 事項有多種類型 分…

2025年5月個人工作生活總結

本文為 2025年5月工作生活總結。 研發編碼 一個項目的臨時記錄 月初和另一項目同事向業主匯報方案&#xff0c;兩個項目都不滿意&#xff0c;后來領導做了調整&#xff0c;將項目合并&#xff0c;拆分了好幾大塊。原來我做的一些工作&#xff0c;如數據庫、中間件等&#xff…

? Unity AVProVideo插件自帶播放器 腳本重構 實現視頻激活重置功能

一、功能概述 本筆記記錄直接修改插件自帶的場景播放其中 原始的 MediaPlayerUI 腳本,實現激活時自動重置播放器的功能。 我用的插件版本是 AVPro Video - Ultra Edition 2.7.3 修改后的腳本將具備以下特性: 激活 GameObject 時自動重置播放位置到開頭 可配置是否在重置后自…

5.31 數學復習筆記 22

前面的筆記&#xff0c;全部寫成一段&#xff0c;有點難以閱讀。現在改進一下排版。另外&#xff0c;寫筆記實際上就是圖一個放松呢&#xff0c;關鍵還是在于練習。 目前的計劃是&#xff0c;把講義上面的高數例題搞清楚之后&#xff0c;大量刷練習冊上面的題。感覺不做幾本練…

什么是 WPF 技術?什么是 WPF 樣式?下載、安裝、配置、基本語法簡介教程

什么是 WPF 技術&#xff1f;什么是 WPF 樣式&#xff1f;下載、安裝、配置、基本語法簡介教程 摘要 WPF教程、WPF開發、.NET 8 WPF、Visual Studio 2022 WPF、WPF下載、WPF安裝、WPF配置、WPF樣式、WPF樣式詳解、XAML語法、XAML基礎、MVVM架構、數據綁定、依賴屬性、資源字典…

ROS2與Unitree機器人集成指南

Tested systems and ROS2 distro systemsROS2 distroUbuntu 20.04foxyUbuntu 22.04humblesrc目錄上級才可以colcon build git clone https://github.com/unitreerobotics/unitree_ros2 Install Unitree ROS2 package 1. Dependencies sudo apt install ros-humble-rmw-cyclon…

深入探討集合與數組轉換方法

目錄 1、Arrays.asList() 1.1、方法作用 1.2、內部實現 1.3、修改元素的影響 1.4、注意事項 2、list.toArray() 2.1、方法作用 2.2、內部實現 2.3、修改元素的影響 2.4、特殊情況 1、對象引用 2、數組copy 3、對比總結 4、常見誤區與解決方案 5、實際應用建議…

深入理解交叉熵損失函數——全面推演各種形式

帶你從不一樣的視角綜合認識交叉熵損失&#xff0c;閱讀這篇文章&#xff0c;幫你建立其分類問題&#xff0c;對比學習&#xff0c;行人重識別&#xff0c;人臉識別等問題的聯系&#xff0c;閱讀這篇文章相信對你閱讀各種底層深度學習論文有幫助。 引言 1. 重新理解全連接層&…

STM32之FreeRTOS移植(重點)

RTOS的基本概念 實時操作系統&#xff08;Real Time Operating System&#xff09;的簡稱就叫做RTOS&#xff0c;是指具有實時性、能支持實時控制系統工作的操作系統&#xff0c;RTOS的首要任務就是調度所有可以利用的資源來完成實時控制任務的工作&#xff0c;其次才是提高工…

MySQL connection close 后, mysql server上的行為是什么

本文著重講述的是通過 msql client 連接到 mysql server &#xff0c;發起 update 、 select 操作(由于數據量非常大&#xff0c;所以 update、select 操作都很耗時&#xff0c;即在結果返回前我們有足夠的時間執行一些操作) 。 在客戶端分別嘗試執行 ctrl C 結束關閉 mysql c…