maltab仿真OFDM 和 DFTS-OFDM 两种信号的生成在高斯白噪声信道及多径衰落信道两大信道下及峰均比概率统计,绘制ccdf曲线,
时间: 2024-03-18 22:42:41 浏览: 165
下面是一个示例代码,实现了OFDM和DFTS-OFDM信号的生成和峰均比概率统计,并绘制了ccdf曲线。同时,代码还考虑了高斯白噪声信道和多径衰落信道两种情况,以及添加了循环前缀和序列变换等过程。
```matlab
%% OFDM和DFTS-OFDM信号的生成及峰均比概率统计
clear; clc;
%% 设置参数
N = 64; % 子载波数
M = 4; % 调制阶数
L = 8; % 序列变换因子
CP = 16; % 循环前缀长度
Ncp = CP*N/64; % 每个OFDM符号的循环前缀长度
%% 生成原始数据
data = randi([0 M-1], N, 1);
%% OFDM信号的生成和传输
% 将数据进行QAM调制
qamData = qammod(data, M);
% 将数据进行分组,每组N个符号
symbols = reshape(qamData, N, []);
% 进行快速傅里叶变换,得到频域信号
freqSignal = fft(symbols, N);
% 添加循环前缀
cpSignal = [freqSignal(N-Ncp+1:N,:); freqSignal];
% 将时域信号转换为串行信号
txSignal = reshape(cpSignal, [], 1);
% 设置信道参数
SNR = 20; % 信噪比
channel = 'awgn'; % 高斯白噪声信道
% 传输信号并添加高斯白噪声
rxSignal = awgn(txSignal, SNR, 'measured');
% 将接收到的信号转化为时域信号
rxSignal = reshape(rxSignal, [], Ncp+64);
rxSignal = rxSignal(Ncp+1:end,:);
% 对接收到的信号进行快速傅里叶变换,并解调QAM符号
rxFreqSignal = fft(rxSignal, N);
rxData = qamdemod(reshape(rxFreqSignal, [], 1), M);
% 计算峰均比及其概率分布函数
PAPR = max(abs(txSignal).^2)./mean(abs(txSignal).^2);
[PAPR_ccdf, PAPR_axis] = ecdf(PAPR);
PAPR_pdf = diff([0; PAPR_ccdf]);
% 绘制ccdf曲线
figure;
semilogy(PAPR_axis, 1-PAPR_ccdf);
xlabel('PAPR(dB)');
ylabel('Probability');
title('OFDM in AWGN Channel');
grid on;
%% DFTS-OFDM信号的生成和传输
% 对原始数据进行序列变换
seqData = reshape(data, L, []);
seqData = ifft(seqData, L);
% 将数据进行QAM调制
seqData = qammod(seqData, M);
% 将数据进行分组,每组N/L个符号
symbols = reshape(seqData, N/L, []);
% 对每组符号进行DFT,得到频域信号
dftSignal = fft(symbols, N/L);
% 将DFT子信道序列进行串并转换
dftSignal = reshape(dftSignal, [], 1);
dftSignal = repmat(dftSignal, L, 1);
% 将DFTS-OFDM符号转化为时域信号
txSignal = ifft(dftSignal, N);
% 添加循环前缀
cpSignal = [txSignal(N-Ncp+1:N,:); txSignal];
% 将时域信号转换为串行信号
txSignal = reshape(cpSignal, [], 1);
% 传输信号并添加高斯白噪声
rxSignal = awgn(txSignal, SNR, 'measured');
% 将接收到的信号转化为时域信号
rxSignal = reshape(rxSignal, [], Ncp+64);
rxSignal = rxSignal(Ncp+1:end,:);
% 对接收到的信号进行快速傅里叶变换,并解调QAM符号
rxFreqSignal = fft(rxSignal, N);
rxData = qamdemod(reshape(rxFreqSignal, [], 1), M);
% 计算峰均比及其概率分布函数
PAPR = max(abs(txSignal).^2)./mean(abs(txSignal).^2);
[PAPR_ccdf, PAPR_axis] = ecdf(PAPR);
PAPR_pdf = diff([0; PAPR_ccdf]);
% 绘制ccdf曲线
figure;
semilogy(PAPR_axis, 1-PAPR_ccdf);
xlabel('PAPR(dB)');
ylabel('Probability');
title('DFTS-OFDM in AWGN Channel');
grid on;
%% 多径衰落信道下的传输
% 设置信道参数
fd = 100; % 最大多普勒频移
tau = [0 1 3] * 1e-6; % 多径时延
pdb = [0 -3 -6]; % 多径功率衰减值
path = rayleighchan(1/1000, fd, tau, pdb);
% 传输信号并添加多径衰落
rxSignal = filter(path, txSignal);
% 将接收到的信号转化为时域信号
rxSignal = reshape(rxSignal, [], Ncp+64);
rxSignal = rxSignal(Ncp+1:end,:);
% 对接收到的信号进行快速傅里叶变换,并解调QAM符号
rxFreqSignal = fft(rxSignal, N);
rxData = qamdemod(reshape(rxFreqSignal, [], 1), M);
% 计算峰均比及其概率分布函数
PAPR = max(abs(txSignal).^2)./mean(abs(txSignal).^2);
[PAPR_ccdf, PAPR_axis] = ecdf(PAPR);
PAPR_pdf = diff([0; PAPR_ccdf]);
% 绘制ccdf曲线
figure;
semilogy(PAPR_axis, 1-PAPR_ccdf);
xlabel('PAPR(dB)');
ylabel('Probability');
title('OFDM/DFTS-OFDM in Rayleigh Fading Channel');
grid on;
```
在上面的代码中,我们首先设置了OFDM和DFTS-OFDM的参数,包括子载波数、调制阶数、序列变换因子、循环前缀长度等。然后,我们生成了原始数据,并将其进行QAM调制。接着,我们分别对OFDM和DFTS-OFDM信号进行生成和传输,考虑高斯白噪声信道和多径衰落信道两种情况,并计算了峰均比及其概率分布函数,绘制了ccdf曲线。
需要注意的是,在进行峰均比概率统计时,我们使用了Matlab内置的ecdf函数来计算累积分布函数,然后通过计算差分来得到概率密度函数。同时,在绘制ccdf曲线时,我们使用了Matlab内置的semilogy函数来进行对数坐标的绘制,并对数据进行排序,计算每个峰均比对应的概率值。
阅读全文