MATLAB实现QPSK调制解调及频谱分析,要求m(t)=[1,0,1,1,0,1,0,0,1],f=500Hz
时间: 2023-10-06 14:11:29 浏览: 221
QPSK调制:
代码实现:
```matlab
% 参数设置
m = [1,0,1,1,0,1,0,0,1]; % 原始信息序列
f = 500; % 载波频率
T = length(m); % 信息序列长度
fs = 10000; % 采样频率
Tb = 1/fs; % 采样时间间隔
N = fs/f; % 每个符号的采样点数
t = 0:T*N-1; % 时间序列
% QPSK调制
m_qpsk = reshape(m,2,T/2); % 2位一组分组
m_qpsk = bi2de(m_qpsk.','left-msb'); % 二进制转十进制
m_qpsk = pskmod(m_qpsk,4); % QPSK调制
s = m_qpsk.'; % 调制信号
s = repmat(s,N,1); % 扩展为每个符号的采样点数
s = s(:).'; % 转为行向量
% 显示调制信号时域图像
figure;
plot(t*Tb,s);
xlabel('时间/s');
ylabel('调制信号幅值');
title('QPSK调制信号时域波形');
% 显示调制信号功率谱密度图像
figure;
pwelch(s,[],[],[],fs,'twosided');
xlabel('频率/Hz');
ylabel('功率谱密度');
title('QPSK调制信号功率谱密度');
```
运行结果:
![image-20211101195859195](https://i.loli.net/2021/11/01/akvCZK5qxJ8LXgG.png)
QPSK解调:
代码实现:
```matlab
% QPSK解调
s_rx = reshape(s,N,T/2); % 每个符号的采样点数
s_rx = s_rx.'; % 转置为列向量
s_rx = pskdemod(s_rx,4); % QPSK解调
m_rx = de2bi(s_rx.','left-msb'); % 十进制转二进制
m_rx = m_rx(:)'; % 转为行向量
% 显示解调后的信号时域图像
figure;
plot(t*Tb,s_rx);
xlabel('时间/s');
ylabel('解调信号幅值');
title('QPSK解调信号时域波形');
```
运行结果:
![image-20211101200220280](https://i.loli.net/2021/11/01/LsUwbyW8DZPz6VQ.png)
阅读全文