当前位置:首页>学习笔记>MIMO-OFDM 学习笔记

MIMO-OFDM 学习笔记

  • 2026-05-16 05:42:16
MIMO-OFDM 学习笔记

MIMO-OFDM 学习笔记(代码在最后)

1. 总体流程

比特 -> 信道编码 -> QAM调制 -> MIMO映射 -> OFDM子载波映射 -> IFFT -> CP -> FIR/DA -> 无线信道 -> AD/FIR -> 去CP -> FFT -> 子载波解映射 -> MIMO检测 -> QAM解调 -> 信道解码

MIMO:空间复用,提高吞吐量。

OFDM:把宽带信道分成多个窄带子载波,降低均衡难度。

当前代码使用:2x2 MIMO + 64QAM + N_FFT=64 + CP=16 + LDPC(24,12)

2. 发送端步骤与作用

[发送1] 原始比特 + LDPC 编码

输入:K=12 原始比特。

输出:N=24 编码比特(码率 R=K/N=0.5)。

作用:加入冗余,提高抗误码能力。

[发送2] 64QAM 调制

每 6 bit 映射成 1 个复符号。

输出复符号(星座点),用幅度+相位携带信息。

[发送3] MIMO 编码(空间复用)

将符号分到两根发射天线并行发送。

作用:提升频谱效率(同一时频资源并行传多路数据)。

[发送4] 子载波映射

把每根天线的QAM符号放入长度 N_FFT 的频域向量中,其余子载波补零。

作用:确定哪些子载波承载数据,准备 IFFT。

[发送5] IFFT

频域子载波向量 -> 时域 OFDM 复采样点。

结果长度:每根天线 N_FFT=64 个复采样点(不是bit)。

[发送6] 加 CP(循环前缀)

把时域末尾 N_CP=16 点复制到前面。

作用:对抗多径ISI,并让线性卷积近似循环卷积,便于频域均衡。

[发送7] FIR 低通滤波(LPF)

抑制高频分量/噪声,限制带宽。

[发送8] D/A

从数字采样到模拟链路(工程上包括采样保持/重构等)。

3. 信道

使用随机 2x2 复信道矩阵 H(衰落)+ AWGN 噪声。

作用:模拟真实无线传播造成的失真与干扰。

4. 接收端步骤与作用

[接收1] A/D

模拟信号转回数字序列。

[接收2] FIR

接收端滤波,抑制带外噪声。

[接收3] 去 CP

去掉前缀,恢复 OFDM 有效符号区间。

[接收4] FFT

时域 -> 频域,恢复各子载波符号。

[接收5] 子载波解映射

取出承载数据的子载波。

[接收6] MIMO 检测(ZF)

用 H 的伪逆分离两路空间流:x_hat = H^+ y

[接收7] 64QAM 解调

复符号 -> 比特。

[接收8] LDPC 解码

当前实现是硬判决 bit-flipping 迭代解码。

输出估计信息比特,并用 syndrome 检查是否满足校验。

5. 重点概念速记(对应之前问题)

5.1 码率是什么?

信道编码码率:R = 有效信息bit / 编码后总bit = K/N

例如 LDPC(24,12):R=0.5

5.2 为什么以前会把 bit x3?

x3 是重复码(1->111, 0->000),便于多数判决纠错。

优点:简单。缺点:冗余大、码率低(1/3)。

5.3 LDPC 校验位怎么来?

当前系统码形式:c=[u,p]p=A*u mod 2

由 H=[A I] 保证 H*c^T=0

5.4 子载波频域向量长度为什么是 N,不是 N/2+1?

复基带 OFDM 通常用完整长度 N 频域向量(复杂信号)。

N/2+1 是实信号半谱(rfft)的特例。

5.5 “后面索引是更高频吗?”

FFT 索引中:前半是正频率,后半对应负频率(未 fftshift 时)。

5.6 复信号实部/虚部含义

实部=I(同相),虚部=Q(正交)。

它们是两维坐标,不是“虚部无物理意义”。

实际发射到天线的通带波形是实信号。

5.7 LPF 是什么?作用?

LPF=低通滤波器,让低频通过、抑制高频。

作用:降噪、限带、ADC前抗混叠、DAC后抗成像。

5.8 奈奎斯特采样定理

带限到 f_max 的信号,要无失真重建需 f_s >= 2f_max

否则发生混叠。

5.9 采样和 A/D 的关系

A/D 不只采样,完整包含:采样 -> 量化 -> 编码。

采样只是第一步。

5.10 为什么 D/A 后虚部“消失”,信息会丢吗?

不会丢,前提是按 IQ 调制正确上变频。

复基带信号写作:s(t)=I(t)+jQ(t)

实际天线发射的是实通带信号:x_RF(t)=I(t)cos(2πf_ct)-Q(t)sin(2πf_ct)

因此发射波形虽然是实数,但 Q 信息被承载在与 I 正交的载波分量中。

接收端通过同相/正交下变频可恢复 I/Q

当前仿真代码中 tx_analog=np.real(s) 是教学简化,不是完整射频前端模型。

5.11 MIMO 检测如何“拼凑”出完整信号?

本质是解线性方程,不是凭空猜。

在一个子载波上:y = Hx + n

x:各发射天线发出的符号(未知);y:各接收天线收到的混合(已知);H:信道矩阵(已估计)。

2x2 时可写为两条方程两个未知量,接收端利用不同天线观测到的不同混合权重,反推 x1,x2

当前代码使用 ZF(迫零)检测:x_hat = pinv(H) @ y,目的就是尽量消除天线间串扰。

若 H 病态(条件数大),ZF 会放大噪声,恢复效果变差。

在 OFDM 中该检测是“逐子载波”进行:每个子载波都做一次 y_k -> x_hat_k,最后汇总进入解调与译码。

5.12 pinv 是什么?

pinv 是伪逆(Moore-Penrose Pseudo-Inverse),在 NumPy 中是 np.linalg.pinv()

当矩阵不是可逆方阵,或数值上接近奇异时,普通逆 inv() 不适用,常用 pinv() 代替。

在 MIMO ZF 检测里:x_hat = pinv(H) @ y

直观理解:pinv(H) 是“最接近逆矩阵的替代”,给出最小二乘意义下的恢复结果。

6. 你当前代码产物

主脚本:mimo_ofdm.py

已增加中间过程打印(shape+前若干点)。

已增加发送5到接收4阶段图像输出:figures/*.png

7. 下一步可升级方向

1. 把 LDPC 从硬判决 bit-flip 升级为软判决 min-sum / sum-product。

2. 子载波映射改为更贴近标准(含导频、DC空载、保护带)。

3. 在每个 SNR 点统计 BER 曲线(Monte Carlo 多帧)。

仿真代码

PYTHON

#!/usr/bin/env python# coding=utf-8import numpy as npimport matplotlib.pyplot as pltimport os# -----------------------------------------------------------------------------# 系统参数(论文典型配置)# -----------------------------------------------------------------------------N_FFT = 64                # IFFT/FFT 点数N_CP = 16                 # 循环前缀长度N_TX = 2                  # 发射天线N_RX = 2                  # 接收天线MOD_ORDER = 6             # 64QAM = 6 bit/symbolSNR = 30                  # 信噪比FIR_TAPS = np.array([1, 0.5, 0.2, 0.1])  # FIR低通滤波器系数np.random.seed(0)          # 固定随机种子,确保每次输出可复现def dump_signal(name, x, n=8):    arr = np.asarray(x)    flat = arr.reshape(-1)    print(f"{name}: shape={arr.shape}, dtype={arr.dtype}")    print(f"{name} 前{min(n, len(flat))}点:", np.round(flat[:n], 3))def plot_complex_stage(signals, title_prefix, save_path):    n = np.arange(len(signals[0]))    fig, axes = plt.subplots(2, 1, figsize=(10, 6), sharex=True)    axes[0].plot(n, signals[0].real, label="Ant1 Real", linewidth=1.2)    axes[0].plot(n, signals[0].imag, label="Ant1 Imag", linewidth=1.2, linestyle="--")    axes[0].set_title(f"{title_prefix} (Antenna 1)")    axes[0].set_ylabel("Amplitude")    axes[0].grid(True, alpha=0.3)    axes[0].legend()    axes[1].plot(n, signals[1].real, label="Ant2 Real", linewidth=1.2)    axes[1].plot(n, signals[1].imag, label="Ant2 Imag", linewidth=1.2, linestyle="--")    axes[1].set_title(f"{title_prefix} (Antenna 2)")    axes[1].set_xlabel("Sample Index")    axes[1].set_ylabel("Amplitude")    axes[1].grid(True, alpha=0.3)    axes[1].legend()    plt.tight_layout()    plt.savefig(save_path, dpi=160)    plt.close(fig)def ensure_fig_dir():    fig_dir = "figures"    os.makedirs(fig_dir, exist_ok=True)    return fig_dir# -----------------------------------------------------------------------------# LDPC(简单系统码示例):(N, K) = (24, 12), H = [A I]# -----------------------------------------------------------------------------K_LDPC = 12N_LDPC = 24A_LDPC = np.array([    [1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0],    [0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0],    [0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0],    [0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0],    [0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0],    [0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0],    [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0],    [0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1],    [1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0],    [0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0],    [0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1],    [1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1],], dtype=int)H_LDPC = np.hstack([A_LDPC, np.eye(N_LDPC - K_LDPC, dtype=int)])def ldpc_encode(u_bits):    u = np.asarray(u_bits, dtype=int) % 2    p = (A_LDPC @ u) % 2    return np.concatenate([u, p]).astype(int)def ldpc_decode_bitflip(rx_bits, max_iter=20):    v = np.asarray(rx_bits, dtype=int).copy() % 2    for _ in range(max_iter):        syndrome = (H_LDPC @ v) % 2        if not syndrome.any():            break        unsat_checks = np.where(syndrome == 1)[0]        if len(unsat_checks) == 0:            break        scores = np.zeros(N_LDPC, dtype=int)        for m in unsat_checks:            involved = np.where(H_LDPC[m] == 1)[0]            scores[involved] += 1        threshold = max(2, int(np.max(scores) * 0.6))        flip_idx = np.where(scores >= threshold)[0]        if len(flip_idx) == 0:            flip_idx = np.array([int(np.argmax(scores))])        v[flip_idx] ^= 1    return v[:K_LDPC], v# -----------------------------------------------------------------------------# ===================== 发送端 TRANSMITTER =====================# -----------------------------------------------------------------------------print("="*80)print("                    发送端信号处理流程")print("="*80)# 1. 原始比特 + 信道编码(LDPC)print("\n[发送1] 原始比特 & 信道编码")bits = np.random.randint(0, 2, K_LDPC)  # 原始比特print("原始比特:\t", bits)coded_bits = ldpc_encode(bits)print("编码后比特:\t", coded_bits)print(f"LDPC参数:K={K_LDPC}, N={N_LDPC}, 码率={K_LDPC/N_LDPC:.2f}")# 2. 64QAM 调制print("\n[发送2] 64QAM 调制映射")def qam64_mod(bits):    bits = bits.reshape(-1, 6)    syms = np.zeros(len(bits), dtype=complex)    for i, b in enumerate(bits):        i_val = 2 * (b[0]*4 + b[1]*2 + b[2]) - 7        q_val = 2 * (b[3]*4 + b[4]*2 + b[5]) - 7        syms[i] = i_val + 1j * q_val    return syms / np.sqrt(42)qam_syms = qam64_mod(coded_bits)print("调制后复数符号:\n", np.round(qam_syms, 3))# 3. MIMO 编码(空间复用)print("\n[发送3] MIMO 编码(2天线)")def mimo_encode(syms, nt):    syms = syms.reshape(-1, nt)    return syms.Tmimo_syms = mimo_encode(qam_syms, N_TX)print("天线1符号:", np.round(mimo_syms[0], 3))print("天线2符号:", np.round(mimo_syms[1], 3))# 4. 子载波映射print("\n[发送4] 子载波映射")def subcarrier_map(syms, n_fft):    out = np.zeros(n_fft, dtype=complex)    out[:len(syms)] = syms    return outtx_sc = [subcarrier_map(s, N_FFT) for s in mimo_syms]dump_signal("天线1子载波映射", tx_sc[0])dump_signal("天线2子载波映射", tx_sc[1])# 5. IFFTprint("\n[发送5] IFFT 变换")tx_ifft = [np.fft.ifft(s) for s in tx_sc]dump_signal("天线1 IFFT输出", tx_ifft[0])dump_signal("天线2 IFFT输出", tx_ifft[1])fig_dir = ensure_fig_dir()plot_complex_stage(tx_ifft, "TX5 IFFT Time-Domain", os.path.join(fig_dir, "tx5_ifft.png"))print("图已保存:figures/tx5_ifft.png")# 6. 插入 CPprint("\n[发送6] 插入循环前缀 CP")def add_cp(x, cp_len):    return np.concatenate([x[-cp_len:], x])tx_cp = [add_cp(s, N_CP) for s in tx_ifft]dump_signal("天线1 CP后", tx_cp[0])dump_signal("天线2 CP后", tx_cp[1])plot_complex_stage(tx_cp, "TX6 With CP", os.path.join(fig_dir, "tx6_cp.png"))print("图已保存:figures/tx6_cp.png")# 7. FIR 滤波print("\n[发送7] FIR 低通滤波")def fir(x, taps):    return np.convolve(x.real, taps, mode='same') + 1j * np.convolve(x.imag, taps, mode='same')tx_fir = [fir(s, FIR_TAPS) for s in tx_cp]dump_signal("天线1 FIR输出", tx_fir[0])dump_signal("天线2 FIR输出", tx_fir[1])plot_complex_stage(tx_fir, "TX7 FIR Output", os.path.join(fig_dir, "tx7_fir.png"))print("图已保存:figures/tx7_fir.png")# 8. D/A 转换(输出实信号)print("\n[发送8] D/A 数模转换(发射波形)")tx_analog = [np.real(s) for s in tx_fir]print("天线1 DA输出前8点:", np.round(tx_analog[0][:8], 3))plot_complex_stage([tx_analog[0].astype(complex), tx_analog[1].astype(complex)],                   "TX8 D/A Real Waveform", os.path.join(fig_dir, "tx8_da.png"))print("图已保存:figures/tx8_da.png")# -----------------------------------------------------------------------------# 无线信道 + 噪声# -----------------------------------------------------------------------------print("\n" + "="*60)print("               无线信道传输(加噪 + 衰落)")print("="*60)H = (np.random.randn(N_RX, N_TX) + 1j*np.random.randn(N_RX, N_TX))/np.sqrt(2)  # 信道矩阵print("信道矩阵 H:\n", np.round(H, 3))print("信道矩阵条件数 cond(H):", np.round(np.linalg.cond(H), 3))rx_analog = np.zeros((N_RX, len(tx_analog[0])), dtype=complex)for r in range(N_RX):    for t in range(N_TX):        rx_analog[r] += H[r, t] * tx_analog[t]noise = (np.random.randn(*rx_analog.shape) + 1j*np.random.randn(*rx_analog.shape))/np.sqrt(2*SNR)rx_analog += noisedump_signal("接收端模拟复基带(天线1)", rx_analog[0])dump_signal("接收端模拟复基带(天线2)", rx_analog[1])# -----------------------------------------------------------------------------# ===================== 接收端 RECEIVER =====================# -----------------------------------------------------------------------------print("\n" + "="*80)print("                    接收端信号处理流程")print("="*80)# 1. A/D 模数转换print("\n[接收1] A/D 转换")rx_digital = rx_analog.copy()dump_signal("天线1 A/D输出", rx_digital[0])dump_signal("天线2 A/D输出", rx_digital[1])plot_complex_stage(rx_digital, "RX1 A/D Output", os.path.join(fig_dir, "rx1_ad.png"))print("图已保存:figures/rx1_ad.png")# 2. FIR 低通滤波print("\n[接收2] FIR 滤波")rx_fir = [fir(s, FIR_TAPS) for s in rx_digital]dump_signal("天线1 接收FIR输出", rx_fir[0])dump_signal("天线2 接收FIR输出", rx_fir[1])plot_complex_stage(rx_fir, "RX2 FIR Output", os.path.join(fig_dir, "rx2_fir.png"))print("图已保存:figures/rx2_fir.png")# 3. 去除 CPprint("\n[接收3] 去除 CP")def remove_cp(x, cp_len):    return x[cp_len:]rx_nocp = [remove_cp(s, N_CP) for s in rx_fir]dump_signal("天线1 去CP后", rx_nocp[0])dump_signal("天线2 去CP后", rx_nocp[1])plot_complex_stage(rx_nocp, "RX3 Remove CP", os.path.join(fig_dir, "rx3_remove_cp.png"))print("图已保存:figures/rx3_remove_cp.png")# 4. FFT 变换print("\n[接收4] FFT 频域变换")rx_fft = [np.fft.fft(s) for s in rx_nocp]dump_signal("天线1 FFT输出", rx_fft[0])dump_signal("天线2 FFT输出", rx_fft[1])plot_complex_stage(rx_fft, "RX4 FFT Output", os.path.join(fig_dir, "rx4_fft.png"))print("图已保存:figures/rx4_fft.png")# 5. 子载波解映射print("\n[接收5] 子载波解映射")def subcarrier_demap(x, num_sym):    return x[:num_sym]num_sym = len(mimo_syms[0])rx_demap = [subcarrier_demap(s, num_sym) for s in rx_fft]dump_signal("天线1 子载波解映射", rx_demap[0])dump_signal("天线2 子载波解映射", rx_demap[1])# 6. MIMO 检测(迫零 ZF)print("\n[接收6] MIMO 检测(ZF 算法)")def mimo_detect(y, H):    H_pinv = np.linalg.pinv(H)    return H_pinv @ yrx_mimo = mimo_detect(np.array(rx_demap), H)print("检测后符号(天线1):", np.round(rx_mimo[0], 3))# 7. 64QAM 解调print("\n[接收7] 64QAM 解调")def qam64_demod(syms):    syms = syms * np.sqrt(42)    bits = []    for s in syms:        i = np.clip(int(round((s.real + 7)/2)), 0, 7)        q = np.clip(int(round((s.imag + 7)/2)), 0, 7)        bits += [(i>>2)&1, (i>>1)&1, i&1, (q>>2)&1, (q>>1)&1, q&1]    return np.array(bits)demod_bits = qam64_demod(rx_mimo.flatten())print("解调后比特:", demod_bits)# 8. LDPC 信道解码(bit-flipping)print("\n[接收8] LDPC 信道解码(Bit-Flipping)")decoded_bits, decoded_codeword = ldpc_decode_bitflip(demod_bits[:N_LDPC], max_iter=20)syndrome_after = (H_LDPC @ decoded_codeword) % 2print("解码后比特:\t", decoded_bits)print("原始发送比特:\t", bits)print("译码后综合校验 syndrome:", syndrome_after)print("\n✅ 收发端全程仿真完成!")

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-05-16 05:57:30 HTTP/2.0 GET : https://67808.cn/a/489049.html
  2. 运行时间 : 0.079228s [ 吞吐率:12.62req/s ] 内存消耗:4,520.00kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=f1f0322dc96b905ad63c9d5536caeea4
  1. /yingpanguazai/ssd/ssd1/www/no.67808.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/no.67808.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/no.67808.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/no.67808.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/no.67808.cn/runtime/temp/6df755f970a38e704c5414acbc6e8bcd.php ( 12.06 KB )
  140. /yingpanguazai/ssd/ssd1/www/no.67808.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000550s ] mysql:host=127.0.0.1;port=3306;dbname=no_67808;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000798s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000324s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000239s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000479s ]
  6. SELECT * FROM `set` [ RunTime:0.000203s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000601s ]
  8. SELECT * FROM `article` WHERE `id` = 489049 LIMIT 1 [ RunTime:0.000470s ]
  9. UPDATE `article` SET `lasttime` = 1778882250 WHERE `id` = 489049 [ RunTime:0.003046s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 65 LIMIT 1 [ RunTime:0.000254s ]
  11. SELECT * FROM `article` WHERE `id` < 489049 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000473s ]
  12. SELECT * FROM `article` WHERE `id` > 489049 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000812s ]
  13. SELECT * FROM `article` WHERE `id` < 489049 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000777s ]
  14. SELECT * FROM `article` WHERE `id` < 489049 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000785s ]
  15. SELECT * FROM `article` WHERE `id` < 489049 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000833s ]
0.080868s