Matlab仿真2ASK/OOK、2FSK、2PSK、QPSK、4QAM在加性高斯白噪聲信道中的誤碼率與歸一化信噪比的關系

本文為學習所用,嚴禁轉載。

本文參考鏈接
https://zhuanlan.zhihu.com/p/667382398 QPSK代碼及高斯白噪聲如何產生
https://ww2.mathworks.cn/help/signal/ref/butter.html 濾波器
https://www.python100.com/html/4LEF79KQK398.html 低通濾波器

本實驗使用matlab仿真了五種數字調制方式(OOK、2FSK、2PSK、QPSK、4QAM)在加性高斯白噪聲信道中的誤碼率,與歸一化信噪比的關系。其中碼元速率為100bps,碼元個數為6666,OOK、BPSK載波頻率為1KHz,2FSK兩個載波頻率分別為1KHz,500Hz。OOK、2FSK、2PSK均采用相干解調的方式。下面是各種調制解調方式下的誤碼率曲線。


clear all; 
close all; 
clc;
M = 6666; % 產生碼元數
L = 100; % 每碼元復制L次,方便觀察
Ts = 0.01; % 每個碼元的寬度,即碼元的持續時間
Rb = 1/Ts; % 碼元速率
dt = Ts/L; % 采樣間隔
Fs = 1/dt; % 采樣率
TotalT = M*Ts; % 總時間
t = 0:dt:TotalT-dt; % 時間
fc1 = 10*Rb; % 載波頻率是碼元速率的10倍,即載波的周期是碼元周期的1/10
fc2 =  4*Rb; % 2fsk另一個載波的頻率
SNR = -10:0.5:10; % 信噪比范圍BER_ask2 = zeros(1,length(SNR)); % 2ASK誤碼率
BER_psk2 = zeros(1,length(SNR)); % BPSK誤碼率
BER_fsk2 = zeros(1,length(SNR)); % 2FSK誤碼率
BER_qpsk = zeros(1,length(SNR)); % QPSK誤碼率
BER_qam4 = zeros(1,length(SNR)); % 4QAM誤碼率% 產生二進制隨機數據data_ask2 = randi([0,1],1,M);%產生0和1的二進制隨機數data_fsk2 = randi([0,1],1,M);%產生0和1的二進制隨機數data_psk2 = data_ask2*2 -1  ;%借助2ASK的隨機數產生-1和1的二進制隨機數data_qpsk = randi([0 3],M,1);%qpsk的碼元范圍是0~3data_qam4 = randi([0 3],M,1);%qam的碼元范圍是0~3% 產生單極性不歸零矩形脈沖波形data_sample_ask2 = repmat(data_ask2,L,1); % 每個碼元復制L次data_sample_ask2 = reshape(data_sample_ask2,1,M*L); % 產生單極性不歸零矩形脈沖波形data_sample_psk2 = repmat(data_psk2,L,1); % 每個碼元復制L次data_sample_psk2 = reshape(data_sample_psk2,1,M*L); % 產生雙極性不歸零矩形脈沖波形data_sample_fsk2 = repmat(data_fsk2,L,1); % 每個碼元復制L次data_sample_fsk2 = reshape(data_sample_fsk2,1,M*L); % 產生單極性不歸零矩形脈沖波形% 產生2ASK已調信號
carrier1 = cos(2*pi*fc1*t); % 載波1的正弦波
carrier2 = cos(2*pi*fc2*t); % 載波2的正弦波mod_ask2 = data_sample_ask2.*carrier1; % 2ASK的調制mod_psk2 = data_sample_psk2.*carrier1; % 2PSK的調制mod_fsk2 = data_sample_fsk2.*carrier1 + (1-data_sample_fsk2).*carrier2;% 2FSK的調制mod_qpsk = pskmod(data_qpsk,4,pi/4);% QPSK的調制mod_qam4 = qammod(data_qam4,4);% 4QAM的調制for i = 1:length(SNR)% 通過實時測量已調信號的功率,對已調信號加入高斯白噪聲noise_ask2 = awgn (mod_ask2,SNR(i),'measured');noise_psk2 = awgn (mod_psk2,SNR(i),'measured');noise_fsk2 = awgn (mod_fsk2,SNR(i),'measured');noise_qpsk = awgn (mod_qpsk,SNR(i),'measured');noise_qam4 = awgn (mod_qam4,SNR(i),'measured');% 對接受信號進行帶通濾波,濾除通頻帶外的噪聲[b1,a1] = butter(4,[0.8*fc1 1.2*fc1]/(Fs/2),'bandpass'); % 設計帶通濾波器[b2,a2] = butter(4,[0.8*fc2 1.2*fc2]/(Fs/2),'bandpass'); % 設計帶通濾波器r_ask2 = filter(b1,a1,noise_ask2); % 對接收的已調信號進行帶通濾波,,濾除帶外噪聲r_psk2 = filter(b1,a1,noise_psk2); % 對接收的已調信號進行帶通濾波,,濾除帶外噪聲r_fsk2_fc1 =  filter(b1,a1,noise_fsk2); % 對接收的已調信號進行帶通濾波,,濾除帶外噪聲r_fsk2_fc2 =  filter(b2,a2,noise_fsk2); % 對接收的已調信號進行帶通濾波,,濾除帶外噪聲% 對接收信號進行相干解調dem_ask2 = r_ask2.*carrier1;dem_psk2 = r_psk2.*carrier1;dem_fsk2_fc1 = 2*r_fsk2_fc1.*carrier1;dem_fsk2_fc2 = 2*r_fsk2_fc2.*carrier2;% 對解調信號進行低通濾波,濾除載波倍頻分量,以獲得碼元coe_lowpass = fir1(6,2*fc1/Fs); % 低通濾波,將兩倍的載波頻率分量濾除lowpass_ask2 = filter(coe_lowpass,1,dem_ask2); lowpass_psk2 = filter(coe_lowpass,1,dem_psk2);lowpass_fsk2_fc1 = filter(coe_lowpass,1,dem_fsk2_fc1);lowpass_fsk2_fc2 = filter(coe_lowpass,1,dem_fsk2_fc2); % 對解調信號進行抽樣判決sample_ask2 = lowpass_ask2(L/2:L:end); % 碼元中點時間抽樣sample_psk2 = lowpass_psk2(L/2:L:end); % 碼元中點時間抽樣sample_fsk2_fc1 = lowpass_fsk2_fc1(L/2:L:end); % 碼元中點時間抽樣sample_fsk2_fc2 = lowpass_fsk2_fc2(L/2:L:end); % 碼元中點時間抽樣decision_ask2 = (sample_ask2>0.5);decision_psk2 = (sample_psk2>0);decision_fsk2 = (sample_fsk2_fc1>sample_fsk2_fc2); decision_qpsk = pskdemod(noise_qpsk,4,pi/4);decision_qam4 = qamdemod(noise_qam4,4);% 計算誤碼個數和誤碼率error_ask2 = sum(xor(data_ask2,decision_ask2));error_psk2 = sum(xor(data_ask2,decision_psk2)); %這里因為PSK是ASK的隨機序列產生的,所以和ASK比較error_fsk2 = sum(xor(data_fsk2,decision_fsk2)); error_qpsk = sum(xor(data_qpsk,decision_qpsk)); error_qam4 = sum(xor(data_qam4,decision_qam4)); BER_ask2(i) = error_ask2/M; % 2ASK誤碼率BER_psk2(i) = error_psk2/M; % 2PSK誤碼率BER_fsk2(i) = error_fsk2/M; % 2FSK誤碼率BER_qpsk(i) = error_qpsk/M; % QPSK誤碼率BER_qam4(i) = error_qam4/M; % 4QAM誤碼率
end
% 計算理論誤碼率
% Pe = zeros(1,length(SNR));
% for i = 1:length(SNR)
% r = 10^(SNR(i)/10);
% Pe(i) = qfunc(sqrt(r)); % 2ASK理論誤碼率公式
% end
% 繪制誤碼率曲線% semilogy橫軸是線性,縱軸10倍一格
semilogy(SNR,BER_ask2,'b-d','LineWidth',2); % 2ASK仿真曲線
hold on;
semilogy(SNR,BER_psk2,'y-h','LineWidth',2); % BPSK仿真曲線
hold on;
semilogy(SNR,BER_fsk2,'g-o','LineWidth',2); % 2FSK仿真曲線
hold on;
semilogy(SNR,BER_qpsk,'k-*','LineWidth',2); % QPSK仿真曲線
hold on;
semilogy(SNR,BER_qam4,'r-s','LineWidth',2); % 4QAM仿真曲線
hold on;
% semilogy(SNR,Pe,'m-+'); % 理論曲線
% grid on;xlabel('歸一化信噪比Eb/N0 (dB)');
ylabel('誤碼率BER');
legend('OOK','BPSK','2FSK','QPSK','4QAM');
title('誤碼率曲線');

經過上述仿真得到誤碼率曲線如下。

在這里插入圖片描述

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

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

相關文章

靜態HTTP的優勢:速度、安全性和可擴展性,一個都不能少!

大家好,今天我們來聊聊靜態HTTP的優勢。有人可能會說:“靜態HTTP,不就是那些不會動的網頁嗎?”錯!靜態HTTP可不僅僅是靜止不動的,它可是讓網站速度飛快、安全穩定、擴展性強的神器!不信&#xf…

鴻蒙插槽?全局插槽和局部插槽?數據不更新?

Builder的基本語法數據是不會響應式的 第一種: 全局插槽:傳入的變量是state數據(數據是對象也一樣),但是button點擊更改,并沒有任何反應。規則就是不更新 Entry Component struct Demo02 {State message:…

TomcatHttp協議

1 javaWEB 1.1 Web概述 Web在英文中的含義是網狀物,網絡。在計算機領域,它通常指的是后者,即網絡。像我們前面接觸的WWW,它是由3個單詞組成的,即:World Wide Web,中文含義是萬維網。而我們前…

如何深入理解Java的多態?

在Java中,多態(polymorphism)是面向對象編程的一個重要概念,它允許你使用一個通用的接口來表示不同的對象和操作這些對象,而不必關心具體的對象類型。多態性有兩種主要形式:編譯時多態(靜態多態…

C語言使用qsort和bsearch實現二分查找

引言 在計算機科學領域&#xff0c;查找是一項基本操作&#xff0c;而二分查找是一種高效的查找算法。本博客將詳細解釋一個簡單的C語言程序&#xff0c;演示如何使用標準庫函數qsort和bsearch來對一個整數數組進行排序和二分查找。 代碼解析 包含頭文件 #include <stdi…

數據分析思維

Why&What 數據分析是為了驅動決策賦能業務。在數據分析過程中需要對目標進行拆解量化&#xff0c;如何拆解量化目標便是數據分析思維。 在任務拆解過程中使用的軟件、統計模型、分析方法等為分析工具和手段&#xff0c;如何在恰當的場景合理的使用這些工具、模型、方法、手…

中介者和訪問者模式(行為型設計模式)的 C++ 代碼示例模板

文章目錄 前言代碼倉庫中介者模式&#xff08;Mediator&#xff09;訪問者模式&#xff08;Visitor&#xff09;總結參考資料作者的話 前言 中介者和訪問者模式&#xff08;行為型設計模式&#xff09;的 C 代碼示例模板。 代碼倉庫 yezhening/Programming-examples: 編程實例…

HarmonyOS應用程序包-(下)

HarmonyOS應用程序包-(下) 1.多HAP的開發調試與發布部署流程 多HAP的開發調試與發布部署流程如下圖所示。 圖1 多HAP的開發調試與發布部署流程 開發 開發者通過DevEco Studio工具按照業務的需要創建多個Module&#xff0c;在相應的Module中完成自身業務的開發。 調試 通過…

C++歸并排序詳解以及代碼實現

1. 介紹 歸并排序&#xff08;Merge Sort&#xff09;是一種采用分治法&#xff08;Divide and Conquer&#xff09;策略的排序算法。該算法首先將已有序的子序列合并&#xff0c;得到完全有序的序列。在歸并排序中&#xff0c;合并操作是將兩個有序表合并成一個有序表的過程。…

echarts實現七天天氣預報

效果圖 實現代碼 const imglist {"晴": data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADMAAAAzCAYAAAA6oTAqAAAAAXNSR0IArs4c6QAAByJJREFUaEO9Wl1rFGcUfs67u/nYbOIXJlGopBTx27aQWGOwSMS75sao2BtBQVD/gWCJouA/sIWCBW8M1nqjd1IplW5DYqLWEUoSi9iEjHaJmaz2d05ZWd2Nj…

KingbaseV8R6單實例定時全量備份步驟

此場景為單機數據庫節點內部備份&#xff0c;方便部署和操作&#xff0c;但備份REPO與數據庫實例處于同一個物理主機&#xff0c;冗余度較低。 前期準備 配置ksql免密登錄(必須) 在Kingbase數據庫運行維護中&#xff0c;經常用到ksql工具登錄數據庫&#xff0c;本地免密登錄…

基于OpenCV的圖像顏色與形狀識別的原理

基于 OpenCV 的圖像顏色與形狀識別是通過以下原理實現的&#xff1a; 圖像預處理&#xff1a;首先&#xff0c;將彩色圖像轉換為灰度圖像。這樣做是因為在灰度圖像中&#xff0c;每個像素只有一個顏色通道&#xff0c;可以更方便地進行后續處理。 閾值分割&#xff1a;對灰度圖…

Linux系統編程(六):進程(下)

參考引用 UNIX 環境高級編程 (第3版)嵌入式Linux C應用編程-正點原子 1. 進程與程序 1.1 main() 函數由誰調用&#xff1f; C 語言程序總是從 main 函數開始執行int main(void) int main(int argc, char *argv[]) // 如果需要向應用程序傳參&#xff0c;則選擇該種寫法操作系…

C++ 比 C語言增加的新特性 2

1.C新增了帶默認值參數的函數 1.1 格式 格式&#xff1a;返回值 函數名&#xff08;參數1初始值1&#xff0c;..........&#xff09;{} 例如&#xff1a;void function&#xff08;int a10&#xff09;{} 調用&#xff1a;不需要更改參數的值&#xff1a;function&#x…

基于SSM和微信小程序的高校體育場管理系統

文章目錄 項目介紹主要功能截圖:部分代碼展示設計總結項目獲取方式?? 作者主頁:超級無敵暴龍戰士塔塔開 ?? 簡介:Java領域優質創作者??、 簡歷模板、學習資料、面試題庫【關注我,都給你】 ??文末獲取源碼聯系?? 項目介紹 基于SSM和微信小程序的高校體育場管理系…

文本編輯器:Sublime Text (安裝+漢化)

下載 Sublime Text - Text Editing, Done Righthttps://www.sublimetext.com/Sublime Text官網 支持mac&#xff0c;Linux&#xff0c;Windows 安裝 選擇安裝路徑 next install 選擇安裝位置安裝就行了 漢化 進入了主界面按 CTRLshiftp 輸入install 選擇第一個 彈窗就按確…

服務器擴容未生效、不成功:解決方法

記一次解決服務器擴容未生效的解決辦法 老板&#xff1a;失憶啊&#xff0c;我花錢給服務器擴容了10000000G&#xff0c;但是數據庫和mq都還是用不了&#xff0c;到底是不是服務器磁盤滿了&#xff0c;你到底有沒有查一下什么原因導致服務用不了啊。 失憶&#xff1a;老板您確…

概率論1:下象棋問題(3.5)

每日小語 時刻望著他人的眼色行事&#xff0c;是騰飛不了的。自己怎么想就積極地去做&#xff0c;這是需要膽量的。——廣中平佑 題目 甲、乙二人下象棋&#xff0c; 每局甲勝的概率為a,乙勝的概率為b. 為簡化問題&#xff0c;設沒有和局的情況&#xff0c;這意味著a b1. 設想…

VR全景對普通人的生活有哪些好處?

許多普通人對VR全景還全然沒有概念&#xff0c;這是因為VR全景雖然一直在快速發展&#xff0c;但目前為止也不過幾年而已&#xff0c;但這發展的幾年同樣為我們普通人的生活帶來了切實的改變和便利。VR全景技術為人們帶來了沉浸感和真實感的體驗&#xff0c;讓我們感受到迥異于…

第十四章 集合(Set)

一、Set 接口&#xff08;P518&#xff09; 1. Set 接口基本介紹 &#xff08;1&#xff09;無序&#xff08;添加和取出的順序不一致&#xff09;&#xff0c;沒有索引。 &#xff08;2&#xff09;不允許重復元素&#xff0c;所以最多包含一個 null。 2. Set 接口的常用方法…