基于LTE帧结构参数的F-OFDM仿真
基于LTE帧结构参数的F-OFDM仿真代码,包含详细的参数配置和频谱分析:
import numpy as np
import matplotlib.pyplot as plt
from scipy import signal# 参数配置(LTE标准兼容)
subcarrier_spacing = 15e3 # 15 kHz子载波间隔
N_FFT = 2048 # FFT点数
num_active_subcarriers = 1200 # 激活子载波数(对应18MHz带宽)
cp_length = 144 # 循环前缀长度(采样点数)
symbols_per_frame = 14 # 每帧OFDM符号数(正常CP)
modulation_order = 4 # QPSK调制
filter_length = 101 # 滤波器抽头数(奇数保证对称)
fs = subcarrier_spacing * N_FFT # 采样率30.72 MHz# 生成QPSK调制信号
bits_per_symbol = int(np.log2(modulation_order))
num_bits = symbols_per_frame * num_active_subcarriers * bits_per_symbol
bits = np.random.randint(0, 2, num_bits)# QPSK调制
symbols = (1/np.sqrt(2)) * ((2*bits[::2]-1) + 1j*(2*bits[1::2]-1))
symbols = symbols.reshape(symbols_per_frame, num_active_subcarriers)# 子载波映射(避开直流分量)
ofdm_symbols = np.zeros((symbols_per_frame, N_FFT), dtype=complex)
start_idx = (N_FFT - num_active_subcarriers) // 2
end_idx = start_idx + num_active_subcarriers
ofdm_symbols[:, start_idx:end_idx] = symbols# OFDM调制(IFFT)
time_symbols = np.fft.ifft(ofdm_symbols, axis=1) * N_FFT # 保持功率一致# 添加循环前缀
cp = time_symbols[:, -cp_length:] # LTE使用后缀作为CP
time_symbols_with_cp = np.hstack([cp, time_symbols])# 生成时域信号
tx_signal = time_symbols_with_cp.flatten()# 设计FIR滤波器(Hamming窗)
signal_bandwidth = num_active_subcarriers * subcarrier_spacing
cutoff_freq = signal_bandwidth / 2
nyquist = fs / 2
normalized_cutoff = cutoff_freq / nyquist
taps = signal.firwin(filter_length, normalized_cutoff, window='hamming')# 应用滤波器(保持功率归一化)
tx_signal_filtered = signal.lfilter(taps, 1.0, tx_signal)
tx_signal_filtered *= np.sqrt(N_FFT)/np.linalg.norm(taps) # 功率补偿# 频谱分析
f, Pxx = signal.welch(tx_signal, fs=fs, nperseg=1024, return_onesided=False)
f_filt, Pxx_filt = signal.welch(tx_signal_filtered, fs=fs, nperseg=1024, return_onesided=False)# 绘图设置
plt.figure(figsize=(12, 6))
plt.plot(np.fft.fftshift(f)/1e6, 10*np.log10(np.fft.fftshift(Pxx)),label='OFDM', linewidth=2)
plt.plot(np.fft.fftshift(f_filt)/1e6, 10*np.log10(np.fft.fftshift(Pxx_filt)),label='F-OFDM', linewidth=2, linestyle='--')plt.xlim(-fs/2e6, fs/2e6)
plt.ylim(-100, -30)
plt.xlabel('Frequency (MHz)')
plt.ylabel('Power Spectral Density (dB/Hz)')
plt.title('OFDM vs F-OFDM Power Spectral Density (LTE Parameters)')
plt.grid(True)
plt.legend()
plt.tight_layout()
plt.show()
关键特性说明:
-
LTE参数兼容:
- 子载波间隔:15 kHz
- 采样率:30.72 MHz(2048点FFT)
- 循环前缀:144个采样点(对应4.69μs)
- 激活子载波:1200个(中心对称分布,避开直流分量)
-
F-OFDM实现:
- 使用Hamming窗FIR滤波器
- 截止频率9 MHz(对应18MHz信号带宽)
- 滤波器长度101抽头
- 功率归一化补偿
F-OFDM仿真代码,参数配置同lte帧结构
-
信号处理流程:
-
性能比较:
- 频谱效率:F-OFDM相比OFDM具有更陡峭的带外衰减
- 带外辐射:典型情况下可改善20-30dB
- 计算复杂度:增加滤波器卷积运算(O(N)复杂度)
参数调整建议:
-
滤波器特性:
- 增加抽头数(filter_length)可提升阻带衰减
- 使用Kaiser窗可获得更灵活的阻带控制
- 尝试根升余弦滤波器改善符号间干扰
-
系统性能分析:
# 误码率分析扩展建议 def add_channel(signal, snr_db):noise_pwr = 10**((10*np.log10(np.var(signal)) - snr_db)/10)noise = np.sqrt(noise_pwr/2)*(np.random.randn(*signal.shape)+1j*np.random.randn(*signal.shape))return signal + noise# 接收端处理流程 def receiver_processing(rx_signal, filter_taps):# 实现匹配滤波、同步、FFT等处理pass
建议后续扩展方向:添加信道模型、同步算法和均衡模块以进行完整链路仿真。