星座图与IQ调制总结+BPSK、QPSK、8PSK、16QAM等的区别与总结

PSK
1.PSK是相移键控,分为BPSK、QPSK、8PSK。BPSK即2PSK,QPSK即4PSK。
2.对于MPSK可以认为是把单位圆分成了M个部分。
3.PSK是点都在同一个圆上,呈圆形排列,幅度相同,差别只在于相位。

1.1 BPSK

BPSK是二相相移键控,2=2^1,传输一个符号为传输一个bit的数据,输入信号只有0或1。
此时IQ平面被对称两个点的连线分为两半。
在这里插入图片描述

1.2 用IQ调制实现BPSK

从这个图是把Q轴和I轴都单独拿出来了。从星座图点分别向两个轴做垂线,得到两个轴对应的取值。
可以看出,BPSK中I有两种取值,而Q只有一种取值,就是0。
取值表如下:
在这里插入图片描述

注意,这里输入的原始信息只有0和1,是在映射后才有了+1和-1.

2.1QPSK
在这里插入图片描述

QPSK是四相相移键控,4=2^2,传输一个符号为传输2bit的数据。
此时四个点分别两两关于原点对称,将对称点连线,IQ平面被分为4半。

2.2 用IQ调制实现QPSK
在这里插入图片描述

QPSK在用IQ调制实现时,I和Q分别有两个取值,组合出4个点。
看到这里或许会有种错觉,是不是I的取值和Q的取值相乘就可以得到星座图点数。
但8PSK推翻了这种错觉。
取值表如下:
在这里插入图片描述

3.1 8PSK
在这里插入图片描述

8PSK是八相相移键控,8=2^3,传输一个符号为传输3bit的数据。
此时八个点分别关于原点有四对对称,将对称点连线,IQ平面被分为8半。

3.12 用IQ调制实现8PSK
在这里插入图片描述

在8PSK中,I和Q都有四种取值,但是组合出8种结果。因为I中不是每一个点都和Q中所有点做了组合。
取值表如下:
在这里插入图片描述

目前采用的排列方式是格雷码。
由于从概率角度来说,误判为相邻点的概率要大于误判为相对点的概率。
采用格雷码使每相邻的状态间一般只有一位不同,这样可以减少出错的概率。

QAM
1.QAM比较常见的有16QAM、64QAM。
2.QAM的点不在圆上,呈矩形排列,幅度不相同,相位也不相同。或者说但凡幅度相同的相位必然不同,凡相位相同的幅度必不同。这样就使QAM容纳了更多的点,所以QAM的优点也在于其具有更大的符号率,从而能传输效率就越高。但同时,星座点间距离越近也决定了误码率会增加。

2.1 16QAM
2^4 = 16,16QAM中每个符号代表4个bit。
在这里插入图片描述

QAM也可以将IQ轴单独拿出来看,用图上这种排列方式举例,最右边的一列I代表从左向右第1和3位分别为0和1,即0x1x,然后再与Q组合得到四个不同的状态。

2.2 64QAM
2^6 = 64,64QAM中每个符号代表6个bit。
在这里插入图片描述

当数据被输入,会被分成两路,一路作为I,一路作为Q。每个符号代表6个bit,则I路占三个bit,Q路有三个bit。将两路组合得出最后的点,也得出最后点代表的6bit序列。
当接收到点时,我们会根据欧氏距离最小来判定其究竟是哪个点,从而得到其代表的二进制序列段。

原文链接:https://blog.youkuaiyun.com/weixin_40293250/article/details/106246728

### 实现 BPSK QPSK 信号生成 #### BPSK 信号生成 BPSK(二进制相移键控)是一种简单的数字调制方法,在这种调制方式下,每个比特被映射到两个不同的相位之一。通常情况下,“0”对应于0度相位角,而“1”则对应于180度相位角。 为了生成 BPSK 调制信号,可以按照如下方式进行: ```matlab function bpsk_signal = generate_bpsk(bit_stream, carrier_freq, sample_rate) % 将输入的比特流转换成相应的相位角度 phase_angles = pi * bit_stream; % 创建时间向量 t num_bits = length(bit_stream); samples_per_bit = sample_rate / carrier_freq; t = linspace(0, num_bits/samples_per_bit, num_bits*samples_per_bit); % 构建载波信号并应用相位偏移 carrier_wave = cos(2*pi*carrier_freq*t + repmat(phase_angles', 1, samples_per_bit)); % 输出最终得到的 BPSK 波形 bpsk_signal = carrier_wave'; end ``` 此 MATLAB 函数接收三个参数:`bit_stream` 是待发送的数据序列;`carrier_freq` 表示载波频率;`sample_rate` 定义了采样率。该函数返回经过 BPSK 调制后的连续时间域内的模拟波形[^3]。 #### QPSK 信号生成 相比之下,QPSK(四元相移键控)能够在一个符号周期内携带两位信息。这意味着四个不同状态可以用作数据编码的基础——即四种可能的角度位置来表示两组二进制值:“00”, “01”, “10”, 或者 “11”。 下面是创建 QPSK 调制信号的方法: ```matlab function qpsk_signal = generate_qpsk(bit_stream, carrier_freq, sample_rate) % 把每一对相邻的比特组合起来形成新的数值范围 {0,1,2,3} symbol_values = reshape([reshape(bit_stream.', [], 2)*[2;1]].', 1, []); % 计算对应的 I/Q 分量 i_component = sqrt(2)/2 .* cos(symbol_values * pi/2); q_component = sqrt(2)/2 .* sin(symbol_values * pi/2); % 绘制星座图 scatter(i_component,q_component,'filled'); title('QPSK Constellation Diagram'); % 合并I路Q路上的结果作为完整的复数形式表达 complex_symbols = i_component + 1i*q_component; % 时间轴准备 symbols_count = numel(complex_symbols); samples_per_symbol = round(sample_rate/carrier_freq); time_vector = (0:(symbols_count-1)*samples_per_symbol)/sample_rate; % 使用矩形脉冲整形滤波器构建实际传输用的基带信号 baseband_signal = zeros(size(time_vector)); for idx=1:symbols_count, start_idx = (idx-1)*samples_per_symbol+1; end_idx = min(start_idx + samples_per_symbol - 1, numel(baseband_signal)); baseband_signal(start_idx:end_idx) = real(complex_symbols(idx)); end % 应用余弦载波完成上变频操作获得已调制RF信号 rf_carrier = exp(1i*(2*pi*carrier_freq*time_vector))'; % 得到最后的 RF 域 QPSK调制信号 qpsk_signal = conv(real(rf_carrier),baseband_signal,'same')'; figure(); plot(abs(qpsk_signal)); grid on; xlabel('Time Index'); ylabel('|Amplitude|'); title(['Magnitude of Generated QPSK Signal at ',num2str(carrier_freq),' Hz Carrier']); end ``` 这段代码同样接受 `bit_stream`, `carrier_freq`, 及 `sample_rate` 参数,并额外展示了如何绘制星座图以及生成的时间域波形图。值得注意的是,这里采用了更复杂的处理流程,包括但不限于将原始比特串分割成双比特单元、计算同相信号(I)正交分量(Q),并通过这些成分构造出完整的复数型符号,最后再利用矩形脉冲成型技术将其转变为适合物理层传输的形式[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

古月小静

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值