使用matlab设计pi/4QPSK仿真程序,设定符号速率为2400Baud/s,采用滚降因子为0.25的升余弦脉冲成形滤波器,具体要求如下: 完成T/4QPSK的调制,解调;分别经历AWGN和瑞利平坦衰落解调采用基带差分解调和相干解调两种算法,并进行比较 仿真程序需要能够绘制不同信道条件下的解调性能。注意不要出现出现语法错误!注意不要出现超出数组范围的错误!
时间: 2024-03-10 15:50:14 浏览: 12
好的,以下是MATLAB代码实现:
```
% 参数设置
symbolRate = 2400; % 符号速率
rolloffFactor = 0.25; % 滚降因子
snr = 0:2:20; % 信噪比范围
numBits = 1e6; % 仿真比特数
% 创建调制器和解调器
modulator = comm.PSKModulator(4, 'BitInput', true, 'PhaseOffset', pi/4);
demodulator_coh = comm.PSKDemodulator(4, 'BitOutput', true, 'PhaseOffset', pi/4);
demodulator_diff = comm.QPSKDemodulator('BitOutput', true, 'PhaseOffset', pi/4);
% 创建升余弦滤波器
span = 10; % 滤波器时间跨度
sps = 4; % 每个符号的采样数
beta = rcosdesign(rolloffFactor, span, sps);
% 创建误码率和比特误差率计算器
errorRate_coh = comm.ErrorRate;
errorRate_diff = comm.ErrorRate('ReceiveDelay', 0.5);
% 循环信噪比范围
for i=1:length(snr)
% 创建信道
channel_awgn = comm.AWGNChannel('NoiseMethod', 'Signal to noise ratio (SNR)', 'SNR', snr(i));
channel_rayleigh = comm.RayleighChannel('SampleRate', symbolRate, 'PathDelays', [0 1.5e-5], 'AveragePathGains', [0 -3], 'MaximumDopplerShift', 30);
% 创建仿真数据
data = randi([0 1], numBits, 1);
% T/4QPSK调制
modSignal = step(modulator, data);
% 升余弦脉冲成形滤波
filteredSignal = conv(beta, upsample(modSignal, sps));
% 加入信道
receivedSignal_awgn = step(channel_awgn, filteredSignal);
receivedSignal_rayleigh = step(channel_rayleigh, filteredSignal);
% 相干解调
demodSignal_coh = step(demodulator_coh, receivedSignal_awgn);
[~, ber_coh(i)] = step(errorRate_coh, data, demodSignal_coh);
% 基带差分解调
demodSignal_diff = step(demodulator_diff, receivedSignal_rayleigh);
[~, ber_diff(i)] = step(errorRate_diff, data, demodSignal_diff);
end
% 绘制误码率性能曲线
semilogy(snr, ber_coh, 'bo-');
hold on;
semilogy(snr, ber_diff, 'r*-');
grid on;
xlabel('SNR (dB)');
ylabel('BER');
legend('Coherent demodulation', 'Differential demodulation');
```
注:由于瑞利平坦衰落信道是随机的,每次仿真结果可能会略有不同。可以增加仿真次数或设置随机种子来减小误差。
希望这份代码能够对您有所帮助!