不使用函数,按照每四个bit映射一个psk相位的方法使用matlab编写代码实现16psk调制解调
时间: 2024-02-25 21:55:53 浏览: 146
16PSK调制解调过程MATLAB
5星 · 资源好评率100%
按照每四个bit映射一个PSK相位的方法实现16PSK调制和解调,可以按照以下步骤:
调制:
```matlab
M = 16; % 调制阶数
msg = randi([0 1],4000,1); % 随机生成4000个二进制信息位
msg_group = reshape(msg,4,length(msg)/4)'; % 将信息位按照每四个分组
msg_dec = bi2de(msg_group,'left-msb'); % 将每四个二进制信息位转换为一个十进制数
theta = pi/M:2*pi/M:2*pi-pi/M; % 计算相位角
const = exp(1j*theta); % 计算星座点
modSignal = const(msg_dec+1); % 进行16PSK调制
```
解调:
```matlab
demodMsg_dec = zeros(size(msg_dec)); % 初始化解调后的十进制信息位
for i = 1:length(const)
idx = abs(modSignal - const(i)) < 1e-3; % 找到接近星座点的调制信号
demodMsg_dec(idx) = i-1; % 将对应的十进制信息位解调出来
end
demodMsg_group = de2bi(demodMsg_dec,'left-msb',4); % 将解调后的十进制信息位转换为二进制信息位
demodMsg = reshape(demodMsg_group',[],1); % 将解调后的二进制信息位展开
```
其中,`M`为调制阶数,`msg`为输入的二进制信息位,`msg_group`为将信息位按照每四个分组后的矩阵,`msg_dec`为将每四个二进制信息位转换为一个十进制数后得到的数组,`theta`为相位角,`const`为星座点,`modSignal`为调制后的信号,`demodMsg_dec`为解调后的十进制信息位,`demodMsg_group`为将解调后的十进制信息位转换为二进制信息位后得到的矩阵,`demodMsg`为将解调后的二进制信息位展开后得到的向量。在解调过程中,我们通过找到接近星座点的调制信号来解调出对应的十进制信息位,然后将其转换为二进制信息位。
阅读全文