4qam、16qam、64qam、256qam理论仿真曲线
生活随笔
收集整理的這篇文章主要介紹了
4qam、16qam、64qam、256qam理论仿真曲线
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本博文給出了4qam、16qam、64qam、256qam理論仿真曲線,畫出了EbN0 vs BER的曲線圖,可以作為大家學習的一個參考。
仿真結果:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Theoretical ber curves of different orders of QAM modulation % Author: 蘇大axing % Version: 1.2 % Date: 2022/4/3 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% close all; clear all; clc%% Parameters EbN0_dB = -5:20; bits_per_symbol_for_4qam = 2; bits_per_symbol_for_16qam = 4; bits_per_symbol_for_64qam = 6; bits_per_symbol_for_256qam = 8; Nsym = 2^18; SNR_for_4qam = EbN0_dB+10*log10(bits_per_symbol_for_4qam); SNR_for_16qam = EbN0_dB+10*log10(bits_per_symbol_for_16qam); SNR_for_64qam = EbN0_dB+10*log10(bits_per_symbol_for_64qam); SNR_for_256qam = EbN0_dB+10*log10(bits_per_symbol_for_256qam);disp(' ');disp(' '); disp('***********************************'); disp('generating binary bits'); disp('***********************************'); % Generating seeds randn('state',12013) rand('state',3693) binary_bits_forqpsk = randsrc(1,Nsym*bits_per_symbol_for_4qam,[0 1]); binary_bits_for16qam = randsrc(1,Nsym*bits_per_symbol_for_16qam,[0 1]); binary_bits_for64qam = randsrc(1,Nsym*bits_per_symbol_for_64qam,[0 1]); binary_bits_for256qam = randsrc(1,Nsym*bits_per_symbol_for_256qam,[0 1]);% generating MQAM signals disp(' ');disp(' '); disp('***********************************'); disp('generating MQAM signal'); disp('***********************************');%%%%%%%%%% 4QAM paraller_for_4qam = reshape(binary_bits_forqpsk,bits_per_symbol_for_4qam,Nsym); k_4qam = 2^bits_per_symbol_for_4qam; [Output] = BitsToInteger(paraller_for_4qam); qam4_signal = qammod(Output,k_4qam,'gray','UnitAveragePower', true);% figure(1) % subplot(2,2,1); % plot(qam4_signal,'.'); % title('4QAM signal');%%%%%%%%%% 16QAM paraller_for_16qam = reshape(binary_bits_for16qam,bits_per_symbol_for_16qam,Nsym); k_16qam = 2^bits_per_symbol_for_16qam; [Output] = BitsToInteger(paraller_for_16qam); qam16_signal = qammod(Output,k_16qam,'gray','UnitAveragePower', true);% figure(1) % subplot(2,2,2); % plot(qam16_signal,'.'); % title('16QAM signal');%%%%%%%%%% 64QAM paraller_for_64qam = reshape(binary_bits_for64qam,bits_per_symbol_for_64qam,Nsym); k_64qam = 2^bits_per_symbol_for_64qam; [Output] = BitsToInteger(paraller_for_64qam); qam64_signal = qammod(Output,k_64qam,'gray','UnitAveragePower', true);% figure(1) % subplot(2,2,3); % plot(qam64_signal,'.'); % title('64QAM signal');%%%%%%%%%% 256QAM paraller_for_256qam = reshape(binary_bits_for256qam,bits_per_symbol_for_256qam,Nsym); k_256qam = 2^bits_per_symbol_for_256qam; [Output] = BitsToInteger(paraller_for_256qam); qam256_signal = qammod(Output,k_256qam,'gray','UnitAveragePower', true);% figure(1) % subplot(2,2,4); % plot(qam256_signal,'.'); % title('256QAM signal');for i=1:length(EbN0_dB) received_qam4 = awgn(qam4_signal,SNR_for_4qam(i),'measured'); received_qam16 = awgn(qam16_signal,SNR_for_16qam(i),'measured'); received_qam64 = awgn(qam64_signal,SNR_for_64qam(i),'measured'); received_qam256 = awgn(qam256_signal,SNR_for_256qam(i),'measured');%% demodulation %%%%%%%%%% 4QAM demod_signal_for_4qam = qamdemod(received_qam4,k_4qam,'gray','UnitAveragePower', true); [Output] = IntegerToBits(demod_signal_for_4qam,bits_per_symbol_for_4qam); received_Bits_for_4qam = reshape(Output,1,Nsym*bits_per_symbol_for_4qam); ErrorNumber_for_4qam = size(find(received_Bits_for_4qam-binary_bits_forqpsk),2); BER_for_4qam(i) = ErrorNumber_for_4qam/(Nsym*bits_per_symbol_for_4qam)%%%%%%%%%% 16QAM demod_signal_for_16qam = qamdemod(received_qam16,k_16qam,'gray','UnitAveragePower', true); [Output] = IntegerToBits(demod_signal_for_16qam,bits_per_symbol_for_16qam); received_Bits_for_16qam = reshape(Output,1,Nsym*bits_per_symbol_for_16qam); ErrorNumber_for_16qam = size(find(received_Bits_for_16qam-binary_bits_for16qam),2); BER_for_16qam(i) = ErrorNumber_for_16qam/(Nsym*bits_per_symbol_for_16qam)%%%%%%%%%% 64QAM demod_signal_for_64qam = qamdemod(received_qam64,k_64qam,'gray','UnitAveragePower', true); [Output] = IntegerToBits(demod_signal_for_64qam,bits_per_symbol_for_64qam); received_Bits_for_64qam = reshape(Output,1,Nsym*bits_per_symbol_for_64qam); ErrorNumber_for_64qam = size(find(received_Bits_for_64qam-binary_bits_for64qam),2); BER_for_64qam(i) = ErrorNumber_for_64qam/(Nsym*bits_per_symbol_for_64qam)%%%%%%%%%% 256QAM demod_signal_for_256qam = qamdemod(received_qam256,k_256qam,'gray','UnitAveragePower', true); [Output] = IntegerToBits(demod_signal_for_256qam,bits_per_symbol_for_256qam); received_Bits_for_256qam = reshape(Output,1,Nsym*bits_per_symbol_for_256qam); ErrorNumber_for_256qam = size(find(received_Bits_for_256qam-binary_bits_for256qam),2); BER_for_256qam(i) = ErrorNumber_for_256qam/(Nsym*bits_per_symbol_for_256qam) endfigure(2) semilogy(EbN0_dB,BER_for_4qam,'g-<','MarkerFaceColor','g','LineWidth',1);hold on; semilogy(EbN0_dB,BER_for_16qam,'m->','MarkerFaceColor','m','LineWidth',1);hold on; semilogy(EbN0_dB,BER_for_64qam,'b-^','MarkerFaceColor','b','LineWidth',1);hold on; semilogy(EbN0_dB,BER_for_256qam,'r-<','MarkerFaceColor','r','LineWidth',1);hold on; axis([-5 20 1e-5 1]); plot([-5 20],[3.8e-3,3.8e-3],'r','LineWidth',1);hold on; grid on; xlabel('E_{b}N_{0}(dB)');ylabel('BER'); legend('4qam','16qam','64qam ','256qam',...'FEC(3.8x10^-^3)','Location','SouthWest');function [Output] = BitsToInteger(input) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Convert Bits to Integer % Author: Zhongxing Tian % Version: 1.1 % Date: 2022/2/18 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%[M,N] = size(input);Value = zeros(1,N);for i = 2:MValue = Value+input(i,:).*2^(i-1); % 階數從上到下(第一行最小 endValue = Value+input(1,:);Output = Value; endfunction [Output] = IntegerToBits(input,bits_per_symbol) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Convert Integer to Bits % Author: Zhongxing Tian % Version: 1.1 % Date: 2022/2/18 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%[~,N] = size(input);Value = zeros(bits_per_symbol,N);for i = 1:Nk = 2^bits_per_symbol;for j = 1:bits_per_symbolif input(1,i)<k/2Value(bits_per_symbol-j+1,i) = 0;% 階數從上到下(第一行最小)k = k-2^(bits_per_symbol-j); elseValue(bits_per_symbol-j+1,i) = 1;k = k+2^(bits_per_symbol-j);endend endOutput = Value; end總結
以上是生活随笔為你收集整理的4qam、16qam、64qam、256qam理论仿真曲线的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 和我信 安卓
- 下一篇: 建立时间、保持时间与亚稳态