OFDM中的帧(frame)、符号(symbol)、子载波(subcarriers)、导频(Pilot)、保护间隔(guard)的关系图解以及代码详解--MATLAB

该博客详细解析了OFDM(正交频分复用)技术中的帧(frame)、符号(symbol)、子载波(subcarriers)、导频(pilot)和保护间隔(guard interval)的概念及其相互关系。通过图解和MATLAB代码,作者深入浅出地介绍了OFDM的基本工作原理和关键参数设置,是理解无线通信中OFDM系统的宝贵资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

clear close all % clc channel = nrTDLChannel; channel.Seed = 0; channel.DelayProfile = "TDL-A"; channel.DelaySpread = 30e-9; channel.MaximumDopplerShift = 50; channel.NumTransmitAntennas = 1; channel.NumReceiveAntennas = 1; % 采样率与OFDM参数对齐 channel.SampleRate = 30.76e6; channel.RandomStream = 'mt19937ar with seed'; % 固定随机种 %% 参数设置 N = 612; % 载波数量 cp_len = 40; num_symbols = 14; mod_order = 16; % 配置 pilot_symbol_indices = [3, 12]; % 符号位置(TypeA位置+附加位置) pilot_interval = 6; % 每组间隔6载波 pilot_group = [1,2]; % 每组前2载波 % 生成载波索引(满足:连续2 + 间隔4载波pilot_subcarriers = []; for k = 0:pilot_interval:(N-max(pilot_group)) current_group = k + pilot_group; pilot_subcarriers = [pilot_subcarriers current_group]; end pilot_subcarriers = unique(pilot_subcarriers(pilot_subcarriers <= N)); num_pilot_subcarriers = length(pilot_subcarriers); %% 1. 生成随机数据(排除位置) % 创建数据掩码矩阵 data_mask = true(N, num_symbols); for i = 1:length(pilot_symbol_indices) data_mask(pilot_subcarriers, pilot_symbol_indices(i)) = false; end total_data_symbols = sum(data_mask(:)); num_bits = total_data_symbols * log2(mod_order); tx_bits = randi([0 1], num_bits, 1); %% 2. QAM调制数据 tx_data_symbols = qammod(tx_bits, mod_order, 'InputType', 'bit', 'UnitAveragePower', true); %% 3. 构建OFDM矩阵并插入 tx_symbols_matrix = zeros(N, num_symbols); tx_symbols_matrix(data_mask) = tx_data_symbols; % 生成QPSK符号 pilot_bits = randi([0 1], 2*num_pilot_subcarriers*length(pilot_symbol_indices), 1); pilot_symbols = qammod(pilot_bits, 4, 'InputType', 'bit', 'UnitAveragePower', true); pilot_symbols = reshape(pilot_symbols, num_pilot_subcarriers, []); % 插入到指定位置 for i = 1:length(pilot_symbol_indices) sym_idx = pilot_symbol_indices(i); tx_symbols_matrix(pilot_subcarriers, sym_idx) = pilot_symbols(:,i); end tx_pilot = pilot_symbols; % 新增:存储发送的符号 %% 4. IFFT变换 tx_time = ifft(tx_symbols_matrix, N); %% 5. 添加循环前缀 tx_with_cp = [tx_time(end-cp_len+1:end, :); tx_time]; %% 6. 并串转换 ofdm_signal = tx_with_cp(:); % 转换为列向量 y=ofdm_signal;%输入信号 y1=channel(y); % SNR = 20; % 示例SNR值(单位dB) % y1 = awgn(y1, SNR, 'measured'); % 在卷积后添加噪声 N1 = length(y1); % 信号长度,假设 x 是输入信号 SNR = 10; % 使用训练时的最大SNR signal_power = mean(abs(y1).^2); % 测量信号实际功率 N0 = sqrt(signal_power/(2*SNR)); % 适用于复高斯噪声 noise = N0*(randn(size(y1)) + 1i*randn(size(y1)))/sqrt(2); y1 = y1 + noise; % 在信道输出后添加精确控制的高斯噪声 theoretical_ber = berawgn(SNR, 'qam', mod_order); fprintf('理论误码率: %.4f\n', theoretical_ber);这是第一段代码,两端代码是一个程序
03-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值