当前位置: 首页 > article >正文

MIMO信号检测ZF算法和MMSE算法

1️⃣ MIMO系统为什么要做信号检测?

发射信号向量
考虑一个MIMO系统,假设有 N T x N_{\mathrm{Tx}} NTx 根发射天线,发射信号 x \boldsymbol{x} x 是一个列向量,表示每根发射天线发送的信号。即:

x = [ x 1 x 2 ⋮ x N Tx  ] \boldsymbol{x}=\left[\begin{array}{c} x_1 \\ x_2 \\ \vdots \\ x_{N_{\text {Tx }}} \end{array}\right] x= x1x2xNTx 

这里, x \boldsymbol{x} x 是一个 N T x × 1 N_{\mathrm{Tx}} \times 1 NTx×1 的列向量,包含了所有发射天线的信号。
接收信号向量
接收信号 y \boldsymbol{y} y 是接收端各天线接收到的信号向量。假设有 N R x N_{\mathrm{Rx}} NRx 根接收天线,接收信号 y \boldsymbol{y} y 也是一个列向量,表示每根接收天线接收到的信号:

y = [ y 1 y 2 ⋮ y N R x ] \boldsymbol{y}=\left[\begin{array}{c} y_1 \\ y_2 \\ \vdots \\ y_{N_{\mathrm{Rx}}} \end{array}\right] y= y1y2yNRx

这里, y \boldsymbol{y} y 是一个 N R x × 1 N_{\mathrm{Rx}} \times 1 NRx×1 的列向量,包含了所有接收天线的信号。

信道矩阵
信道矩阵 H \boldsymbol{H} H 是一个 N R x × N T x N_{\mathrm{Rx}} \times N_{\mathrm{Tx}} NRx×NTx 的矩阵,其中每个元素 h j i h_{j i} hji 表示从第 i i i 根发射天线到第 j j j 根接收天线的信道增益:

H = [ h 11 h 12 ⋯ h 1 N T x h 21 h 22 ⋯ h 2 N T x ⋮ ⋮ ⋱ ⋮ h N R x 1 h N R x 2 ⋯ h N R x N T x ] \boldsymbol{H}=\left[\begin{array}{cccc} h_{11} & h_{12} & \cdots & h_{1 N_{\mathrm{Tx}}} \\ h_{21} & h_{22} & \cdots & h_{2 N_{\mathrm{Tx}}} \\ \vdots & \vdots & \ddots & \vdots \\ h_{N_{\mathrm{Rx}} 1} & h_{N_{\mathrm{Rx}} 2} & \cdots & h_{N_{\mathrm{Rx}} N_{\mathrm{Tx}}} \end{array}\right] H= h11h21hNRx1h12h22hNRx2h1NTxh2NTxhNRxNTx

其中 h j i h_{j i} hji 是从第 i i i 根发射天线到第 j j j 根接收天线的信道增益。

信道模型的矩阵形式
给定发射信号 x \boldsymbol{x} x ,接收信号 y \boldsymbol{y} y ,信道矩阵 H \boldsymbol{H} H ,以及噪声 z \boldsymbol{z} z ,我们可以将整个 MIMO 系统的信号模型表示为:

y = H x + z \boldsymbol{y}=\boldsymbol{H} \boldsymbol{x}+\boldsymbol{z} y=Hx+z

  • H \boldsymbol{H} H N R x × N T x N_{\mathrm{Rx}} \times N_{\mathrm{Tx}} NRx×NTx 的信道矩阵。
  • x \boldsymbol{x} x N T x × 1 N_{\mathrm{Tx}} \times 1 NTx×1 的发射信号向量。
  • y \boldsymbol{y} y N R x × 1 N_{\mathrm{Rx}} \times 1 NRx×1 的接收信号向量。
  • z z z N R x × 1 N_{\mathrm{Rx}} \times 1 NRx×1 的噪声向量,表示每个接收天线的噪声。

假设 y \boldsymbol{y} y 的每个元素 y j y_j yj 是第 j j j 根接收天线接收到的信号,我们可以将它展开为:

y j = h j 1 x 1 + h j 2 x 2 + ⋯ + h j N Tx  x N Tx  + z j y_j=h_{j 1} x_1+h_{j 2} x_2+\cdots+h_{j N_{\text {Tx }}} x_{N_{\text {Tx }}}+z_j yj=hj1x1+hj2x2++hjNTx xNTx +zj

即,接收信号 y j y_j yj 是由多个发射天线的信号加权(权重由信道增益 h j i h_{j i} hji 给出)并加上噪声 z j z_j zj

信号检测

在 MIMO 系统中,空间复用可以使多个数据流(来自不同发射天线的信号)同时发送。这虽然能大大提高数据速率,但也使得接收端的信号检测变得更加复杂,因为多个信号在接收端混合在一起,需要有效地分离和解码,信号检测必须考虑到以下几个方面:

  • 混合信号:每个接收信号 y j y_j yj 都是由多个发射信号 x i x_i xi 通过不同信道增益 h j i h_{j i} hji 组合而成。因此,接收端的任务是从这些加权叠加的信号中恢复出每个发射天线的独立信号。
  • 噪声干扰:接收信号还受到噪声 z j z_j zj 的影响,这使得信号的恢复更加困难。噪声是随机的,因此,检测接收信号时必须考虑噪声的影响。

在实践中,常见的信号检测算法包括:

  • 线性检测方法:零强制(Zero-Forcing, ZF)和最小均方误差(Minimum Mean Square Error, MMSE)
  • 迭代检测方法:串行干扰消除
  • 最大似然检测

2️⃣ ZF信号检测&MMSE信号检测

接收端的信号是这些发射信号的线性组合,并且其中还包含噪声,信号检测的目标是从混合信号中恢复出原始的发射信号,我们需要通过一个"加权矩阵" W W W 来对接收信号进行处理,它的作用是对接收信号进行“逆转信道”的处理,从而消除干扰、恢复目标信号。

加权矩阵 W \boldsymbol{W} W 可以看作是一个滤波器,它的任务是从接收到的信号中提取出目标发射天线的信号,并尽量消除来自其他发射天线的干扰。

接收信号 y \boldsymbol{y} y 是各个发射信号的混合。
y = H x + z y=\boldsymbol{H} \boldsymbol{x}+\boldsymbol{z} y=Hx+z

其中, H \boldsymbol{H} H 是信道矩阵, x \boldsymbol{x} x 是发射信号, z \boldsymbol{z} z 是噪声。

通过加权矩阵 W \boldsymbol{W} W ,我们可以得到估计的信号:

x ~ = W y \tilde{\boldsymbol{x}}=W \boldsymbol{y} x~=Wy这个 x ~ \tilde{\boldsymbol{x}} x~ 就是我们期望恢复出的发射信号 x 1 , x 2 , … , x N T x_1, x_2, \ldots, x_{N_T} x1,x2,,xNT

2.1 ZF信号检测

在 MIMO 系统中,多个发射天线的信号在接收端会相互干扰。所以,恢复某个目标信号时,我们要尽量最小化其他发射信号的影响。例如,假设我们正在检测来自发射天线 1 的信号 x 1 x_1 x1 ,我们希望通过加权矩阵 W \boldsymbol{W} W 将来自其他发射天线(如 x 2 , x 3 , … x_2, x_3, \ldots x2,x3, )的干扰去掉,使得我们能够清唽地恢复出 x 1 x_1 x1

ZF信号检测通过选择一个加权矩阵 W \boldsymbol{W} W ,使得接收信号中来自非目标发射天线的部分为零。加权矩阵表示为:
W Z F = ( H H H ) − 1 H H \boldsymbol{W}_{\mathrm{ZF}}=\left(\boldsymbol{H}^{\mathrm{H}} \boldsymbol{H}\right)^{-1} \boldsymbol{H}^{\mathrm{H}} WZF=(HHH)1HH
其中, ( ⋅ ) H (\cdot)^{\mathrm{H}} ()H 表示共轭转置。

恢复出来的信号 x ~ Z F \tilde{\boldsymbol{x}}_{\mathrm{ZF}} x~ZF被表示为:
x ~ Z F = W Z F y = x + ( H H H ) − 1 H H z = x + z ~ Z F \begin{aligned} \tilde{\boldsymbol{x}}_{\mathrm{ZF}} & =\boldsymbol{W}_{\mathrm{ZF}} \boldsymbol{y} \\ & =\boldsymbol{x}+\left(\boldsymbol{H}^{\mathrm{H}} \boldsymbol{H}\right)^{-1} \boldsymbol{H}^{\mathrm{H}} \boldsymbol{z} \\ & =\boldsymbol{x}+\tilde{z}_{\mathrm{ZF}} \end{aligned} x~ZF=WZFy=x+(HHH)1HHz=x+z~ZF
可以看到,ZF信号检测将原始信号 x \boldsymbol{x} x恢复出来,但也引入了噪声项 z ~ Z F = ( H H H ) − 1 H H z \tilde{z}_{\mathrm{ZF}}=\left(\boldsymbol{H}^{\mathrm{H}} \boldsymbol{H}\right)^{-1} \boldsymbol{H}^{\mathrm{H}} \boldsymbol{z} z~ZF=(HHH)1HHz

噪声 z ~ Z F \tilde{z}_{\mathrm{ZF}} z~ZF的大小会直接影响到系统的性能,需要分析这个噪声项的功率,即它对信号恢复的影响有多大。噪声功率的大小通常与信道的特性有关。首先通过奇异值分解(SVD)可以将信道矩阵 H H H分解为:
H = U Σ V H \boldsymbol{H}=\boldsymbol{U} \boldsymbol{\Sigma} \boldsymbol{V}^{\mathrm{H}} H=UΣVH其中, Σ \boldsymbol{\Sigma} Σ 是一个对角矩阵,其对角元素就是矩阵 H \boldsymbol{H} H 的奇异值,记作 σ 1 , σ 2 , … , σ r \sigma_1, \sigma_2, \ldots, \sigma_r σ1,σ2,,σr ,其中 r r r 是矩阵 H \boldsymbol{H} H的秩。然后,噪声功率的可以表示为:
∥ z ~ Z F ∥ 2 2 = ∥ ( H H H ) − 1 H H z ∥ 2 = ∥ ( V Σ 2 V H ) − 1 V Σ U H z ∥ 2 = ∥ V Σ − 2 V H V Σ U H z ∥ 2 = ∥ V Σ − 1 U H z ∥ 2 \begin{aligned} \left\|\tilde{\boldsymbol{z}}_{\mathrm{ZF}}\right\|_2^2 & =\left\|\left(\boldsymbol{H}^{\mathrm{H}} \boldsymbol{H}\right)^{-1} \boldsymbol{H}^{\mathrm{H}} z\right\|^2 \\ & =\left\|\left(\boldsymbol{V} \Sigma^2 \boldsymbol{V}^{\mathrm{H}}\right)^{-1} \boldsymbol{V} \boldsymbol{\Sigma} \boldsymbol{U}^{\mathrm{H}} z\right\|^2 \\ & =\left\|\boldsymbol{V} \Sigma^{-2} \boldsymbol{V}^{\mathrm{H}} \boldsymbol{V} \boldsymbol{\Sigma} \boldsymbol{U}^{\mathrm{H}} \boldsymbol{z}\right\|^2 \\ & =\left\|\boldsymbol{V} \Sigma^{-1} \boldsymbol{U}^{\mathrm{H}} z\right\|^2 \end{aligned} z~ZF22= (HHH)1HHz 2= (VΣ2VH)1VΣUHz 2= VΣ2VHVΣUHz 2= VΣ1UHz 2

接下来,计算噪声功率的期望值。由于 z z z是噪声项,噪声的方差是 σ z 2 \sigma^2_z σz2,所以噪声功率的期望值为:
E { ∥ z ~ Z F ∥ 2 2 } = E { ∥ Σ − 1 U H z ∥ 2 2 } = E { Tr ⁡ ( Σ − 1 U H z z H U Σ − 1 ) } = Tr ⁡ ( Σ − 1 U H E { z H } U Σ − 1 ) = Tr ⁡ ( σ z 2 Σ − 1 U H U Σ − 1 ) = σ z 2 Tr ⁡ ( Σ − 2 ) = ∑ i = 1 N T x σ z 2 σ i 2 \begin{aligned} E\left\{\left\|\tilde{\boldsymbol{z}}_{\mathrm{ZF}}\right\|_2^2\right\} & =\boldsymbol{E}\left\{\left\|\Sigma^{-1} \boldsymbol{U}^{\mathrm{H}} \boldsymbol{z}\right\|_2^2\right\} \\ & =E\left\{\operatorname{Tr}\left(\Sigma^{-1} \boldsymbol{U}^{\mathrm{H}} \boldsymbol{z} \boldsymbol{z}^{\mathrm{H}} \boldsymbol{U} \Sigma^{-1}\right)\right\} \\ & =\operatorname{Tr}\left(\Sigma^{-1} \boldsymbol{U}^{\mathrm{H}} \boldsymbol{E}\left\{\boldsymbol{z}^{\mathrm{H}}\right\} \boldsymbol{U} \boldsymbol{\Sigma}^{-1}\right) \\ & =\operatorname{Tr}\left(\sigma_z^2 \Sigma^{-1} \boldsymbol{U}^{\mathrm{H}} \boldsymbol{U} \Sigma^{-1}\right) \\ & =\sigma_z^2 \operatorname{Tr}\left(\Sigma^{-2}\right) \\ & =\sum_{i=1}^{N_{\mathrm{Tx}}} \frac{\sigma_z^2}{\sigma_i^2} \end{aligned} E{z~ZF22}=E{ Σ1UHz 22}=E{Tr(Σ1UHzzHUΣ1)}=Tr(Σ1UHE{zH}UΣ1)=Tr(σz2Σ1UHUΣ1)=σz2Tr(Σ2)=i=1NTxσi2σz2
这表明,信道增益较大的(即奇异值较大的)信道对噪声的“抑制”效果较好;而信道增益较小的(即奇异值较小的)会导致噪声影响较大。

2.2 MMSE信号检测

MMSE的加权矩阵为:
W MMSE  = ( H H H + σ z 2 I ) − 1 H H \boldsymbol{W}_{\text {MMSE }}=\left(\boldsymbol{H}^{\mathrm{H}} \boldsymbol{H}+\sigma_z^2 \boldsymbol{I}\right)^{-1} \boldsymbol{H}^{\mathrm{H}} WMMSE =(HHH+σz2I)1HH其中, H \boldsymbol{H} H 是信道矩阵, σ z 2 \sigma_z^2 σz2 是噪声的方差, I I I 是单位矩阵

恢复出来的信号 W MMSE  \boldsymbol{W}_{\text {MMSE }} WMMSE 被表示为:
x ~ M M S E = W M M S E y = ( H H H + σ z 2 I ) − 1 H H y = x + ( H H H + σ z 2 I ) − 1 H H z = x + z ~ M M S E \begin{aligned} \tilde{\boldsymbol{x}}_{\mathrm{MMSE}} & =\boldsymbol{W}_{\mathrm{MMSE}} \boldsymbol{y} \\ & =\left(\boldsymbol{H}^{\mathrm{H}} \boldsymbol{H}+\sigma_z^2 \boldsymbol{I}\right)^{-1} \boldsymbol{H}^{\mathrm{H}} \boldsymbol{y} \\ & =\boldsymbol{x}+\left(\boldsymbol{H}^{\mathrm{H}} \boldsymbol{H}+\sigma_z^2 \boldsymbol{I}\right)^{-1} \boldsymbol{H}^{\mathrm{H}} \boldsymbol{z} \\ & =\boldsymbol{x}+\tilde{\boldsymbol{z}}_{\mathrm{MMSE}} \end{aligned} x~MMSE=WMMSEy=(HHH+σz2I)1HHy=x+(HHH+σz2I)1HHz=x+z~MMSE其中, z ~ M M S E = ( H H H + σ z 2 I ) − 1 H H z \tilde{\boldsymbol{z}}_{\mathrm{MMSE}}=\left(\boldsymbol{H}^{\mathrm{H}} \boldsymbol{H}+\sigma_z^2 \boldsymbol{I}\right)^{-1} \boldsymbol{H}^{\mathrm{H}} \boldsymbol{z} z~MMSE=(HHH+σz2I)1HHz表示噪声。

噪声功率为: ∥ z ~ M M S E ∥ 2 2 = ∥ ( H H H + σ z 2 I ) − 1 H H z ∥ 2 = ∥ ( V Σ 2 V H + σ z 2 I ) − 1 V Σ U H z ∥ 2 \begin{aligned} \left\|\tilde{\boldsymbol{z}}_{\mathrm{MMSE}}\right\|_2^2 & =\left\|\left(\boldsymbol{H}^{\mathrm{H}} \boldsymbol{H}+\sigma_z^2 \boldsymbol{I}\right)^{-1} \boldsymbol{H}^{\mathrm{H}} \boldsymbol{z}\right\|^2 \\ & =\left\|\left(\boldsymbol{V} \Sigma^2 \boldsymbol{V}^{\mathrm{H}}+\sigma_z^2 \boldsymbol{I}\right)^{-1} \boldsymbol{V} \Sigma \boldsymbol{U}^{\mathrm{H}} \boldsymbol{z}\right\|^2 \end{aligned} z~MMSE22= (HHH+σz2I)1HHz 2= (VΣ2VH+σz2I)1VΣUHz 2

噪声功率的期望值为:
E { ∥ z ~ M M S E ∥ 2 2 } = ∑ i = 1 N T x σ z 2 σ i 2 ( σ i 2 + σ z 2 ) 2 E\left\{\left\|\tilde{z}_{\mathrm{MMSE}}\right\|_2^2\right\}=\sum_{i=1}^{N_{\mathrm{Tx}}} \frac{\sigma_z^2 \sigma_i^2}{\left(\sigma_i^2+\sigma_z^2\right)^2} E{z~MMSE22}=i=1NTx(σi2+σz2)2σz2σi2
这表明,噪声功率不仅受到噪声方差的影响,还受到信道的奇异值的影响。

2.3 对ZF和MMSE的分析

对于 ZF,噪声功率期望为:
E { ∥ z ~ Z F ∥ 2 2 } = ∑ i = 1 N T x σ z 2 σ i 2 ≈ σ z 2 σ min ⁡ 2 E\left\{\left\|\tilde{z}_{\mathrm{ZF}}\right\|_2^2\right\}=\sum_{i=1}^{N_{\mathrm{Tx}}} \frac{\sigma_z^2}{\sigma_i^2} \approx \frac{\sigma_z^2}{\sigma_{\min }^2} E{z~ZF22}=i=1NTxσi2σz2σmin2σz2
对于MMSE,噪声功率期望为:
E { ∥ z ~ M M S E ∥ 2 2 } = ∑ i = 1 N Tx  σ z 2 σ i 2 ( σ i 2 + σ z 2 ) 2 ≈ σ z 2 σ min ⁡ 2 ( σ min ⁡ 2 + σ z 2 ) 2 E\left\{\left\|\tilde{z}_{\mathrm{MMSE}}\right\|_2^2\right\}=\sum_{i=1}^{N_{\text {Tx }}} \frac{\sigma_z^2 \sigma_i^2}{\left(\sigma_i^2+\sigma_z^2\right)^2} \approx \frac{\sigma_z^2 \sigma_{\min }^2}{\left(\sigma_{\min }^2+\sigma_z^2\right)^2} E{z~MMSE22}=i=1NTx (σi2+σz2)2σz2σi2(σmin2+σz2)2σz2σmin2
其中, σ min ⁡ 2 = min ⁡ { σ 1 2 , σ 2 2 , ⋯   , σ N T x 2 } \sigma_{\min }^2=\min \left\{\sigma_1^2, \sigma_2^2, \cdots, \sigma_{N_{\mathrm{Tx}}}^2\right\} σmin2=min{σ12,σ22,,σNTx2}

结论如下:

  • ZF会消除干扰信号,但它会对噪声产生较大的增强效应,特别是在信道条件较差时
  • MMSE 接收机在优化过程中会加入噪声的影响,从而使得噪声增强效应比 ZF小
  • σ min ⁡ 2 ≫ σ z 2 \sigma_{\min }^2 \gg \sigma_z^2 σmin2σz2 时(即信道条件较好),噪声增强效应对两种技术的影响是相似的。因为在这种情况下,噪声的增益较小,所以 ZF 和 MMSE 都可以表现出类似的性能。
  • σ min ⁡ 2 \sigma_{\min }^2 σmin2 较小时(即信道条件较差), ZF 的噪声增强效应会非常显著,而 MMSE 由于其优化过程,会减小噪声增强,具有更好的性能。

3️⃣ 代码

%%%%%%%%%%%%%%%%%%%%%%MIMO信号检测,基于ZF/MMSE算法%%%%%%%%%%%%%%%%%%
clear all;
close all;
%%%%%%%%%%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%收发天线数
Nrx = 8;
Ntx = 4;
num_symbol = 1000;
EbN0s = 0:1:20;
%调制方式,BPSK
b = 1;
M = 2^b;
num_iteration = 1000;
errors_ZF = zeros(length(EbN0s),1);
errors_MMSE = zeros(length(EbN0s),1);

%%%%%%%%%%%%%%%%%%%%%%%%%主循环%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for index_EbN0 = 1:length(EbN0s)
    EbN0 = EbN0s(index_EbN0);
    N0 = 1/(10^(EbN0/10));
    for iteration = 1:num_iteration
        %生成符号
        x = randi([0,M-1],Ntx,num_symbol);
        %调制
        x_mod = pskmod(x,M);
        H = sqrt(0.5)*(randn(Nrx,Ntx)+1i*randn(Nrx,Ntx));
        w_ZF = inv(H'*H)*H';
        w_MMSE = inv(H'*H+N0*eye(Ntx))*H';
        %生成噪声
        N = sqrt(N0/2)*(randn(Nrx,num_symbol)+1i*randn(Nrx,num_symbol));
        y = H*x_mod + N;
        y_ZF = w_ZF*y;
        y_MMSE = w_MMSE*y;
        %解调
        y_demod_ZF = pskdemod(y_ZF,M);
        y_demod_MMSE = pskdemod(y_MMSE,M);
        %计算误码
        errors_ZF(index_EbN0) = errors_ZF(index_EbN0)+sum(sum(y_demod_ZF~=x));
        errors_MMSE(index_EbN0) = errors_MMSE(index_EbN0)+sum(sum(y_demod_MMSE~=x));
    end
end
%计算误码率
error_rate_ZF = errors_ZF/(num_iteration*num_symbol*Ntx);
error_rate_MMSE = errors_MMSE/(num_iteration*num_symbol*Ntx);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%作图比较%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
plot(EbN0s,error_rate_ZF,'r-o',EbN0s,error_rate_MMSE,'b-s');
title('ZF和MMSE算法误码率比较');
legend('ZF算法','MMSE算法');
xlabel('Eb/N0(dB)');
ylabel('BER');
grid on;

结果分析:
在这里插入图片描述

  • MMSE 在低信噪比下表现更优。因为在低信噪比 下,噪声的影响较大,ZF 由于其固有的噪声放大效应表现较差,而 MMSE通过考虑噪声的功率,能有效减轻噪声的影响,因而表现更好
  • 在高信噪比下,信号能量远高于噪声,ZF 和 MMSE 都能有效恢复信号,噪声的影响不再显著,因此两者的性能差异逐渐减小。

4️⃣ 知识点

  • 主要记住ZF和MMSE的加权矩阵即可


http://www.kler.cn/a/548374.html

相关文章:

  • SQLAlchemy 中字段类型与常见数据库(MySQL、PostgreSQL 和 SQLite)的全面映射关系
  • 数据结构与算法面试专题——堆排序
  • 【设计模式】03-理解常见设计模式-行为型模式(专栏完结)
  • Bug日记:Linux中systemctl restart network失败问题,网络故障
  • IP属地:是否等同于当前登录位置?
  • 【Deepseek】解决Deepseek服务器繁忙的问题
  • leetcode_二叉树 404.左叶子之和
  • Qt文本高亮显示QSyntaxHighlighter
  • python defaultdict用法
  • 【开源免费】基于SpringBoot+Vue.JS文理医院预约挂号系统(JAVA毕业设计)
  • 清华大学:DeepSeek 如何赋能职场应用(35 页 PDF)
  • Flask从基础结构到工作原理的解析
  • Flutter使用gen_l10n实现多语言支持
  • Autojs: 使用 SQLite
  • Spring Boot 原理分析
  • [AI]从零开始的llama.cpp部署与DeepSeek格式转换、量化、运行教程
  • 排序算法之自定义排序函数的含义
  • 闲鱼IP属地是通过电话号码吗?
  • Hami项目开发笔记
  • 使用grafana v11 建立k线(蜡烛图)仪表板