【MATLAB源码-第91期】基于matlab的4QAM和4FSK在瑞利(rayleigh)信道下误码率对比仿真。

操作环境:

MATLAB 2022a

1、算法描述

正交幅度调制(QAM,Quadrature Amplitude Modulation)是一种在两个正交载波上进行幅度调制的调制方式。这两个载波通常是相位差为90度(π/2)的正弦波,因此被称作正交载波。这种调制方式因此而得名。

同其它调制方式类似,QAM通过载波某些参数的变化传输信息。在QAM中,数据信号由相互正交的两个载波的幅度变化表示。

模拟信号的相位调制和数字信号的PSK可以被认为是幅度不变、仅有相位变化的特殊的正交幅度调制。由此,模拟信号频率调制和数字信号FSK也可以被认为是相位调制(PSK)的特例,因为它们本质上就是相位调制。这里主要讨论数字信号的QAM,虽然模拟信号QAM也有很多应用,例如NTSC和PAL制式的电视系统就利用正交的载波传输不同的颜色分量。

类似于其他数字调制方式,QAM发射信号集可以用星座图方便地表示。星座图上每一个星座点对应发射信号集中的一个信号。设正交幅度调制的发射信号集大小为 N,称之为N-QAM。星座点经常采用水平和垂直方向等间距的正方网格配置,当然也有其他的配置方式。数字通信中数据常采用二进制表示,这种情况下星座点的个数一般是2的幂。常见的QAM形式有16-QAM、64-QAM、256-QAM,以及未来5G采用之512-QAM及1024-QAM。星座点数越多,每个符号能传输的信息量就越大。但是,如果在星座图的平均能量保持不变的情况下增加星座点,会使星座点之间的距离变小,进而导致误码率上升。因此高阶星座图的可靠性比低阶要差。

当对数据传输速率的要求高过8-PSK能提供的上限时,一般采用QAM的调制方式。因为QAM的星座点比PSK的星座点更分散,星座点之间的距离因之更大,所以能提供更好的传输性能。但是QAM星座点的幅度不是完全相同的,所以它的解调器需要能同时正确检测相位和幅度,不像PSK解调只需要检测相位,这增加了QAM解调器的复杂性。在本文中,我们主要对16-QAM这种调制解调方式进行仿真。

4FSK在频移键控(FSK)编码的基础上有所扩展。FSK是一种调制技术,它通过在不同频率上切换来表示不同的数字或符号。而4FSK则是FSK的一种变种,表示使用了4个不同的频率来传输信息。

在4FSK中,每个数字或符号被映射到一组连续的四个频率中的一个。这些频率通常以二进制编码的形式进行表示,例如00、01、10和11。每个频率组合对应于不同的数字或符号。因此,通过在这四个频率之间进行切换,我们可以传输数字数据。

4FSK在一些通信系统中用于数据传输,因为它可以在有一定噪声干扰的情况下提供较好的抗干扰性能。然而,需要注意的是,频率越多,理论上可以传输的信息速率也越高,但同时也需要更宽的频谱带宽。

当使用4FSK进行数据传输时,发送端将要传输的数字数据映射到相应的频率组合,并以这些频率的序列形式发送。接收端则需要解码接收到的频率序列,将其转换回原始的数字数据。

4FSK的优点之一是其相对较高的抗干扰性能。因为它使用多个频率来表示不同的数字或符号,即使在信号中存在一些噪声或干扰,接收端仍然可以正确地解码出数据。这使得4FSK在无线通信、调制解调器、无线传感器网络等领域得到了广泛的应用。

2、仿真结果演示

3、关键代码展示

4、MATLAB 源码获取

点击下方原文链接获取

【MATLAB源码-第91期】基于matlab的4QAM和4FSK在瑞利(rayleigh)信道下误码率对比仿真。_仿真比较4qam和4fsk调制信号在瑞利衰落信道下的误码率和误比特性能-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/Koukesuki/article/details/134652032?spm=1001.2014.3001.5502

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的QAM调制在Nakagami信道误码率和吞吐量的MATLAB仿真代码: ```matlab clear all; close all; clc; M = 16; % QAM调制阶数 k = log2(M); % 每个符号的比特数 Eb_No_dB = 0:2:12; % 信噪比范围 Eb_No = 10.^(Eb_No_dB/10); % 将信噪比转换为线性尺度 m = 1; % Nakagami-m 分布的形状参数 for i = 1:length(Eb_No) % 计算每个符号的能量 Es = (M-1)/3; Eb = Es/k; s = sqrt(Es); % 生成随机比特流 nBits = 1e5; % 比特流长度 bits = randi([0 1],1,nBits); % 将比特流分组成符号 nSymbols = nBits/k; idx = 1:k:nBits; symbols = zeros(1,nSymbols); for j = 1:nSymbols symbolBits = bits(idx(j):idx(j)+k-1); symbols(j) = bi2de(symbolBits,'left-msb'); end % QAM调制 modulated = qammod(symbols,M,'gray'); % 计算噪声方差 N0 = Eb/Eb_No(i); sigma = sqrt(N0/2); % 生成Nakagami信道系数 h = sqrt(gamrnd(m,1/m,1,nSymbols)); % 添加噪声和信道衰落 received = h.*modulated + sigma*(randn(1,nSymbols)+1i*randn(1,nSymbols)); % 解调并计算误码率 demodulated = qamdemod(received./h,M,'gray'); errors = sum(demodulated ~= symbols); ber(i) = errors/nBits; % 计算吞吐量 throughput(i) = (nSymbols-errors)/nSymbols; end % 绘制误码率和吞吐量曲线 figure; semilogy(Eb_No_dB,ber,'-o'); xlabel('Eb/No (dB)'); ylabel('BER'); title('QAM in Nakagami-m Channel'); figure; plot(Eb_No_dB,throughput,'-o'); xlabel('Eb/No (dB)'); ylabel('Throughput'); title('QAM in Nakagami-m Channel'); ``` 该代码将QAM调制器用于生成符号序列,然后将每个符号乘以随机Nakagami-m信道系数,并加入高斯噪声。接收到的信号被解调,并与原始符号进行比较,以计算误码率。此外,代码还计算吞吐量,即成功传输的符号数与总符号数之比。最后,误码率和吞吐量结果被绘制成曲线。 请注意,该代码中的Nakagami-m信道系数是随机生成的。如果需要更准确的仿真结果,可以使用实际信道测量数据来替代随机生成的信道系数。此外,该代码只考虑了单天线发送和接收情况。如果需要考虑多天线情况,请参考MIMO信道仿真的相关MATLAB代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值