matlab做ufmc与ofdm对比仿真代码
时间: 2023-08-05 21:09:44 浏览: 52
以下是一个简单的 MATLAB 代码示例,用于比较UFMC和OFDM系统的性能:
```
clear all;
close all;
clc;
%% 参数设置
N = 64; % 子载波数量
M = 4; % 星座大小
numSym = 1000; % 发送符号数量
SNRdB = 20; % 信噪比(dB)
Ts = 1; % 符号时间长度
Tc = 1/4; % 循环前缀长度
p = [1 1 1 1 1]; % UFMC滤波器系数
L = length(p); % UFMC滤波器长度
mu = 1; % UFMC扩频因子
%% 生成随机数据
data = randi([0 M-1], N, numSym);
%% OFDM 发送端
% 把数据映射到星座点上
modData = qammod(data, M);
% 对每个子载波进行IFFT
ifftData = ifft(modData);
% 添加循环前缀
cpData = [ifftData(N-Tc+1:N,:); ifftData];
% 把所有子载波叠加起来
txSigOFDM = reshape(cpData, [], 1);
%% UFMC 发送端
% 把数据映射到星座点上
modData = qammod(data, M);
% 把星座点展开成串
x = reshape(modData, [], 1);
% 把x变成一个矩阵,每一行代表一个OFDM符号
x = reshape(x, N, []);
% 对每一行进行DFT
X = fft(x);
% 在频域进行过滤
H = fft(p, N);
H = repmat(H, 1, size(X, 2));
Y = X .* H;
% 在时域进行扩频
Y = ifft(Y .* repmat(exp(-1i*2*pi*mu*[0:N-1].'/N), 1, size(Y, 2)));
% 把所有OFDM符号叠加起来
txSigUFMC = reshape(Y, [], 1);
%% 加入高斯白噪声
% 计算噪声功率
SNR = 10^(SNRdB/10);
noisePower = norm(txSigOFDM)^2/(N*numSym*SNR);
noise = sqrt(noisePower/2)*(randn(size(txSigOFDM))+1i*randn(size(txSigOFDM)));
% 加入噪声
rxSigOFDM = txSigOFDM + noise;
rxSigUFMC = txSigUFMC + noise;
%% OFDM 接收端
% 把接收信号分成每个OFDM符号
rxSigOFDM = reshape(rxSigOFDM, N+Tc, []);
% 去掉循环前缀
rxSigOFDM = rxSigOFDM(Tc+1:end,:);
% 对每个子载波进行FFT
fftData = fft(rxSigOFDM);
% 把数据映射回星座点上
demodData = qamdemod(fftData(:), M);
%% UFMC 接收端
% 把接收信号分成每个UFMC符号
rxSigUFMC = reshape(rxSigUFMC, N+L-1, []);
% 对每个UFMC符号进行FFT
Y = fft(rxSigUFMC);
% 在时域进行压缩
Y = Y .* repmat(exp(1i*2*pi*mu*[0:N-1].'/N), 1, size(Y, 2));
% 在频域进行反滤波
H = fft(p, N);
H = repmat(H, 1, size(Y, 2));
X = Y ./ H;
% 把数据映射回星座点上
demodDataUFMC = qamdemod(X(:), M);
%% 计算误码率
% OFDM
numErrOFDM = sum(demodData ~= data(:));
BEROFDM = numErrOFDM/(N*numSym);
% UFMC
numErrUFMC = sum(demodDataUFMC ~= data(:));
BERUFMC = numErrUFMC/(N*numSym);
fprintf('OFDM BER: %f\n', BEROFDM);
fprintf('UFMC BER: %f\n', BERUFMC);
```
这个代码示例中,我们首先生成随机的QAM数据,并对其进行OFDM和UFMC的发送端处理。接着,我们添加高斯白噪声,对接收到的信号进行OFDM和UFMC的接收端处理,并计算误码率。最后,我们将OFDM和UFMC的误码率进行比较。请注意,这只是一个简单的示例代码。实际上,OFDM和UFMC的性能比较还需要考虑到许多因素,例如信道估计和等化等。