Matlab: Introduction to Hybrid Beamforming

文章目录

  • 来源
  • 混合波束赋形的基本概念
  • System Setup
  • 关键函数

来源

在matlab的命令行输入
doc hybrid beamforming

混合波束赋形的基本概念

混合波束形成简介
本例介绍了混合波束形成的基本概念,并说明了如何模拟这种系统。

现代无线通信系统使用空间复用来提高散射体丰富的环境中系统内的数据吞吐量。为了通过信道发送多个数据流,从信道矩阵中导出一组预编码和组合权重。那么每个数据流都可以独立恢复。这些权重包含幅度和相位项,通常应用于数字域。模拟这种系统的一个例子可以在使用天线阵列提高无线通信的SNR和容量的例子中找到。在下图所示的系统图中,每个天线都连接到一个独特的发射和接收(TR)模块。在这里插入图片描述

对高数据速率和更多用户容量的日益增长的需求增加了更有效地使用频谱的需求。因此,下一代5G无线系统将使用毫米波频段来利用其更宽的带宽。此外,5G系统部署了大规模天线阵列,以减轻毫米波频段的严重传播损耗。然而,这些配置带来了其独特的技术挑战。

与目前的无线系统相比,毫米波波段的波长要小得多。虽然这允许一个阵列包含更多具有相同物理尺寸的单元,但为每个天线单元提供一个TR模块会变得昂贵得多。因此,作为一种折衷,TR开关通常用于为多个天线元件供电。这与雷达社区中使用的子阵列配置是相同的概念。下图显示了一种这样的配置。在这里插入图片描述
上图显示,在发射端,TR开关的数量小于天线单元的数量 N T N_T NT。为了提供更大的灵活性,每个天线元件可以连接到一个或多个TR模块。此外,可以在每个TR模块和天线之间插入模拟移相器,以提供一些有限的转向能力。

接收器端的配置类似,如图所示。此系统可以支持的最大数据流数量 N S N_S NS N T R F N_{TRF} NTRF N R R F N_{RRF} NRRF中较小的一个。

在这种配置中,不再可能对每个天线元件应用数字权重。相反,数字权重只能应用于每个RF链。在元件级,信号由模拟移相器调整,该移相器仅改变信号的相位。因此,预编码或组合实际上分两个阶段完成。由于这种方法在数字域和模拟域都执行波束成形,因此被称为混合波束成形。

System Setup

This section simulates a 64 x 16 MIMO hybrid beamforming system, with a 64-element square array with 4 RF chains on the transmitter side and a 16-element square array with 4 RF chains on the receiver side.

Nt = 64;
NtRF = 4;Nr = 16;
NrRF = 4;

In this simulation, it is assumed that each antenna is connected to all RF chains. Thus, each antenna is connected to 4 phase shifters. Such an array can be modeled by partitioning the array aperture into 4 completely connected subarrays.

rng(4096);
c = 3e8;
fc = 28e9;
lambda = c/fc;
txarray = phased.PartitionedArray(...'Array',phased.URA([sqrt(Nt) sqrt(Nt)],lambda/2),...'SubarraySelection',ones(NtRF,Nt),'SubarraySteering','Custom');
rxarray = phased.PartitionedArray(...'Array',phased.URA([sqrt(Nr) sqrt(Nr)],lambda/2),...'SubarraySelection',ones(NrRF,Nr),'SubarraySteering','Custom');

To maximize the spectral efficiency, each RF chain can be used to send an independent data stream. In this case, the system can support up to 4 streams.

Next, assume a scattering environment with 6 scattering clusters randomly distributed in space. Within each cluster, there are 8 closely located scatterers with an angle spread of 5 degrees, for a total of 48 scatterers. The path gain for each scatterer is obtained from a complex circular symmetric Gaussian distribution.

Ncl = 6;
Nray = 8;
Nscatter = Nray*Ncl;
angspread = 5;
% compute randomly placed scatterer clusters
txclang = [rand(1,Ncl)*120-60;rand(1,Ncl)*60-30];
rxclang = [rand(1,Ncl)*120-60;rand(1,Ncl)*60-30];
txang = zeros(2,Nscatter);
rxang = zeros(2,Nscatter);
% compute the rays within each cluster
for m = 1:Ncltxang(:,(m-1)*Nray+(1:Nray)) = randn(2,Nray)*sqrt(angspread)+txclang(:,m);rxang(:,(m-1)*Nray+(1:Nray)) = randn(2,Nray)*sqrt(angspread)+rxclang(:,m);
endg = (randn(1,Nscatter)+1i*randn(1,Nscatter))/sqrt(Nscatter);The channel matrix can be formed as 
txpos = getElementPosition(txarray)/lambda;
rxpos = getElementPosition(rxarray)/lambda;
H = scatteringchanmtx(txpos,rxpos,txang,rxang,g);

Hybrid Weights Computation
In a spatial multiplexing system with all digital beamforming, the signal is modulated by a set of precoding weights, propagated through the channel, and recovered by a set of combining weights. Mathematically, this process can be described by Y = (XFH+N)W where X is an Ns-column matrix whose columns are data streams, F is an Ns Nt matrix representing the precoding weights, W is an Nr Ns matrix representing the combining weights, N is an Nr-column matrix whose columns are the receiver noise at each element, and Y is an Ns-column matrix whose columns are recovered data streams. Since the goal of the system is to achieve better spectral efficiency, obtaining the precoding and combining weights can be considered as an optimization problem where the optimal precoding and combining weights make the product of FHW’ a diagonal matrix so each data stream can be recovered independently.
In a hybrid beamforming system, the signal flow is similar. Both the precoding weights and the combining weights are combinations of baseband digital weights and RF band analog weights. The baseband digital weights convert the incoming data streams to input signals at each RF chain and the analog weights then convert the signal at each RF chain to the signal radiated or collected at each antenna element. Note that the analog weights can only contain phase shifts.
Mathematically, it can be written as F=Fbb
Frf and W=WbbWrf, where Fbb is an Ns NtRF matrix, Frf an NtRF Nt matrix, Wbb an NrRF Ns matrix, and Wrf an Nr NrRF matrix. Since both Frf and Wrf can only be used to modify the signal phase, there are extra constraints in the optimization process to identify the optimal precoding and combining weights. Ideally, the resulting combination of FbbFrf and Wrf*Wbb are close approximations of F and W that are obtained without those constraints.
Unfortunately, optimizing all four matrix variables simultaneously is quite difficult. Therefore, many algorithms are proposed to arrive at suboptimal weights with a reasonable computational load. This example uses the approach proposed in [1] which decouples the optimizations for the precoding and combining weights. It first uses the orthogonal matching pursuit algorithm to derive the precoding weights. Once the precoding weights are computed, the result is then used to obtain the corresponding combining weights.
Assuming the channel is known, the unconstrained optimal precoding weights can be obtained by diagonalizing the channel matrix and extracting the first NtRF dominating modes. The transmit beam pattern can be plotted as

F = diagbfweights(H);
F = F(1:NtRF,:);
pattern(txarray,fc,-90:90,-90:90,'Type','efield',...'ElementWeights',F','PropagationSpeed',c);

在这里插入图片描述

The response pattern above shows that even in a multipath environment, there are limited number of dominant directions.
The hybrid weights, on the other hand, can be computed as

At = steervec(txpos,txang);
Ar = steervec(rxpos,rxang);Ns = NtRF;
[Fbb,Frf] = omphybweights(H,Ns,NtRF,At);

The beam pattern of the hybrid weights is shown below:

pattern(txarray,fc,-90:90,-90:90,'Type','efield',...'ElementWeights',Frf'*Fbb','PropagationSpeed',c);

在这里插入图片描述

Compared to the beam pattern obtained using the optimal weights, the beam pattern using the hybrid weights is similar, especially for dominant beams. This means that the data streams can be successfully transmitted through those beams using hybrid weights.

Spectral Efficiency Comparison
One of the system level performance metrics of a 5G system is the spectral efficiency. The next section compares the spectral efficiency achieved using the optimal weights with that of the proposed hybrid beamforming weights. The simulation assumes 1 or 2 data streams as outlined in [1]. The transmit antenna array is assumed to be at a base station, with a focused beamwidth of 60 degrees in azimuth and 20 degrees in elevation. The signal can arrive at the receive array from any direction. The resulting spectral efficiency curve is obtained from 50 Monte-Carlo trials for each SNR.

snr_param = -40:5:0;
Nsnr = numel(snr_param);
Ns_param = [1 2];
NNs = numel(Ns_param);NtRF = 4;
NrRF = 4;Ropt = zeros(Nsnr,NNs);
Rhyb = zeros(Nsnr,NNs);
Niter = 50;for m = 1:Nsnrsnr = db2pow(snr_param(m));for n = 1:Niter% Channel realizationtxang = [rand(1,Nscatter)*60-30;rand(1,Nscatter)*20-10];rxang = [rand(1,Nscatter)*180-90;rand(1,Nscatter)*90-45];At = steervec(txpos,txang);Ar = steervec(rxpos,rxang);g = (randn(1,Nscatter)+1i*randn(1,Nscatter))/sqrt(Nscatter);H = scatteringchanmtx(txpos,rxpos,txang,rxang,g);for k = 1:NNsNs = Ns_param(k);% Compute optimal weights and its spectral efficiency[Fopt,Wopt] = helperOptimalHybridWeights(H,Ns,1/snr);Ropt(m,k) = Ropt(m,k)+helperComputeSpectralEfficiency(H,Fopt,Wopt,Ns,snr);% Compute hybrid weights and its spectral efficiency[Fbb,Frf,Wbb,Wrf] = omphybweights(H,Ns,NtRF,At,NrRF,Ar,1/snr);Rhyb(m,k) = Rhyb(m,k)+helperComputeSpectralEfficiency(H,Fbb*Frf,Wrf*Wbb,Ns,snr);endend
end
Ropt = Ropt/Niter;
Rhyb = Rhyb/Niter;plot(snr_param,Ropt(:,1),'--sr',...snr_param,Ropt(:,2),'--b',...snr_param,Rhyb(:,1),'-sr',...snr_param,Rhyb(:,2),'-b');
xlabel('SNR (dB)');
ylabel('Spectral Efficiency (bits/s/Hz');
legend('Ns=1 optimal','Ns=2 optimal','Ns=1 hybrid', 'Ns=2 hybrid',...'Location','best');
grid on;

在这里插入图片描述

This figure shows that the spectral efficiency improves significantly when we increase the number of data streams. In addition, the hybrid beamforming can perform close to what optimal weights can offer using less hardware.

Summary
This example introduces the basic concept of hybrid beamforming and shows how to split the precoding and combining weights using orthogonal matching pursuit algorithm. It shows that hybrid beamforming can closely match the performance offered by optimal digital weights.
References
[1] Omar El Ayach, et al. Spatially Sparse Precoding in Millimeter wave MIMO Systems, IEEE Transactions on Wireless Communications, Vol. 13, No. 3, March 2014.
Copyright 2017 The MathWorks, Inc.

关键函数

工具包中的函数diagbfweights.m,实现了SVD预编码

function [w_pre,w_comb,Pi,G,C] = diagbfweights(Hchann_in,P_in,NpowSubchan_in,Popt_in)
%diagbfweights  MIMO beamforming using diagonalization
%   [WP,WC] = diagbfweights(HCHAN) returns the precoding weights, WP, and
%   combining weights, WC, for the channel matrix, HCHAN. These weights
%   together diagonalize the channel into independent subchannels so that
%   the result of WP*HCHAN*WC has all its off-diagonal elements equal to 0.
%
%   HCHAN can be either a matrix or a 3-dimensional array. If HCHAN is a
%   matrix, HCHAN has a size of NtxNr where Nt is number of elements in the
%   transmit array and Nr is the number of elements in the receive array.
%   If HCHAN is a 3-dimensional array, its dimension is LxNtxNr where L is
%   the number of subcarriers.
%
%   If HCHAN is a matrix, WP is an NtxNt matrix and WC has a size of NrxNr.
%   If HCHAN is a 3-dimensional array, WP is an LxNtxNt matrix and WC has a
%   size of LxNrxNr.
%
%   [WP,WC,P] = diagbfweights(HCHAN) returns the distributed power, P (in
%   linear scale), for each transmit element. If H is a matrix, P is a 1xNt
%   vector. If H is a 3-dimensional array, P is an LxNt vector.
%
%   [WP,WC,P,G] = diagbfweights(HCHAN) returns the subchannel gains in G.
%   If HCHAN is a matrix, G is a 1xR vector where R is the lessor of Nt and
%   Nr. If HCHAN is a 3-dimensional array, G has a size of LxR. G is
%   measured in linear units.
%
%   [WP,WC,P,G,C] = diagbfweights(HCHAN) returns the sum of capacity of the
%   channel in C (in bps/Hz). If HCHAN is a matrix, C is a scalar. If HCHAN
%   is a 3-dimensional array, C is an Lx1 vector.
%
%   [...] = diagbfweights(HCHAN,PT) specifies the total transmit power,
%   PT (in linear units), as a positive scalar or an L-element vector. PT
%   and P has the same units.
%
%   If PT is a scalar, then all subcarriers have the same transmit power.
%   If PT is a vector, its element specifies the transmit power for the
%   corresponding subcarrier. The total power is distributed evenly across
%   N transmit elements at each subcarrier and the result is included in
%   WP. The default value of PT is 1.
%
%   [...] = diagbfweights(HCHAN,PT,NPOW) specifies the noise power, NPOW,
%   in each receive antenna element as a scalar. All subcarriers are
%   assumed to have the same noise power. The default value of NPOW is 1.
%   NPOW shares the same unit as PT.
%
%   [...] = diagbfweights(HCHAN,PT,NPOW,POPTION) specifies how the total
%   transmit power, PT, is distributed among transmit array elements in
%   POPTION as one of 'Uniform' | 'Waterfill', where the default is
%   'Uniform'. If POPTION is 'Uniform', the transmit power is evenly
%   distributed across Nt channels. If POPTION is 'Waterfill', the transmit
%   power is distributed across the Nt channels using a waterfill 
%   algorithm.
%
%   % Examples:
%
%   % Example 1:
%   %   Given a channel matrix for a 4x4 MIMO channel, show that
%   %   diagonalization-based precoding and combining weights can achieve
%   %   spatial multiplexing, where the received signal at each element
%   %   matches the signal sent by the corresponding transmit element.
%   %   Assume the noise power of the receive channel is 0.01 watt.
%   
%   Hchan = rand(4,4);
%   x = 1-2.*randi([0 1],[20 4]);
%   [w_pre,w_comb] = diagbfweights(Hchan,4);
%   y = (x*w_pre*Hchan+0.1*randn(20,4))*w_comb;
%   for m = 1:4
%       subplot(4,1,m);
%       stem([x(:,m) y(:,m)]);
%       ylabel('Signal')
%   end
%   xlabel('Samples')
%   legend('Input','Recovered')
%
%   % Example 2:
%   %   Given a channel matrix for a 4x4 MIMO channel, show that
%   %   diagonalization-based precoding and combining weights can achieve
%   %   spatial multiplexing, where the received signal at each element
%   %   matches the signal sent by the corresponding transmit element.
%   %   Assume the noise power of receive channel is 0.1 watt. Also compare
%   %   the performance between different power allocation strategies.
%   
%   Hchan = rand(4,4);
%   x = 1-2.*randi([0 1],[20 4]);
%   [w_pre1,w_comb1,P1] = diagbfweights(Hchan,4);
%   npow = 0.1;
%   noise = sqrt(npow)*randn(20,4);
%   y1 = ((x.*P1)*w_pre1*Hchan+noise)*w_comb1;
%   [w_pre2,w_comb2,P2] = diagbfweights(Hchan,4,npow,'waterfill');
%   y2 = ((x.*P2)*w_pre2*Hchan+noise)*w_comb2;
%   for m = 1:4
%       subplot(4,1,m);
%       stem([x(:,m) y1(:,m) y2(:,m)]);
%       ylabel('Signal');
%   end
%   xlabel('Samples');
%   legend('Input','Uniform','Waterfill');
%   subplot(4,1,1);
%   title(['P_{uniform} = [',num2str(P1),...
%       '], P_{waterfill} = [',num2str(P2),']'])
%
%   See also phased, blkdiagbfweights, waterfill.%   Copyright 2016-2019 The MathWorks, Inc.%   Reference
%   [1] David Tse and Pramod Viswanath, Fundamentals of Wireless
%   Communication, Cambridge, 2005
%   [2] Arogyaswami Paulraj, et al. Introduction to Space-Time Wireless
%   Communications, Cambridge, 2003%#ok<*EMCLS>
%#ok<*EMCA>
%#codegennarginchk(1,4);
validateattributes(Hchann_in,{'double'},{'nonnan','nonempty','finite','3d'},...'diagbfweights','HCHAN');isHmatrix = ismatrix(Hchann_in);if isHmatrixHchann = permute(Hchann_in,[2 1 3]);  % NrxNtchansize = size(Hchann);L = 1;Nt = chansize(2);Nr = chansize(1);
elseHchann = permute(Hchann_in,[3 2 1]);  % NrxNtxLchansize = size(Hchann);L = chansize(3);Nt = chansize(2);Nr = chansize(1);
end
N_diag = min(Nt,Nr);
G = zeros(L,N_diag);if nargin < 2if isHmatrixP = 1;elseP = ones(L,1);end
elseif isHmatrixsigdatatypes.validatePower(P_in,'diagbfweights','PT',{'scalar'});P = P_in;elseif isscalar(P_in)sigdatatypes.validatePower(P_in,'diagbfweights','PT',{'scalar'});P = P_in*ones(L,1);elsesigdatatypes.validatePower(P_in,'diagbfweights','PT',{'vector','numel',L});P = P_in(:);endend
endif isHmatrix[U,S,V] = svd(Hchann);w_pre = V.';w_comb = conj(U);G(1:N_diag) = abs(diag(S).').^2;Nrk = sum(G>0);
else % 3Dw_pre = zeros(L,Nt,Nt,'like',1+1i);w_comb = zeros(L,Nr,Nr,'like',1+1i);G = zeros(L,min(Nt,Nr));Nrk = zeros(L,1);for m = 1:L[U,S,V] = svd(Hchann(:,:,m));w_pre(m,:,:) = V.';w_comb(m,:,:) = conj(U);G(m,:) = abs(diag(S).').^2;Nrk(m) = sum(G(m,:)>0);end
endif nargin < 3if isHmatrixNpowSubchan = 1;elseNpowSubchan = ones(L,1);end
elsesigdatatypes.validatePower(NpowSubchan_in,'diagbfweights','NPOW',{'scalar'});if isHmatrixNpowSubchan = NpowSubchan_in;elseNpowSubchan = NpowSubchan_in*ones(L,1);end
endif nargin < 4Popt = 'Uniform';
elsePopt = validatestring(Popt_in,{'Uniform','Waterfill'},'diagbfweights','POPTION');Popt = convertStringsToChars(Popt);
endif strcmp(Popt,'Waterfill')if isHmatrix% waterfillNvec = NpowSubchan./G;Nvec(isinf(Nvec)) = realmax;Pi = waterfill(P,Nvec);elseNvec = bsxfun(@rdivide,NpowSubchan,G);Nvec(isinf(Nvec)) = realmax;Pi = waterfill(P,Nvec);end
elseif isHmatrixPi = repmat(P/Nt,1,Nt);elsePi = repmat(P/Nt,1,Nt);endNvec = bsxfun(@rdivide,NpowSubchan,G);
endif isHmatrixNsub_in = min(Nrk,sum(Pi>0));Nsub = Nsub_in(1);C = sum(log2(1+Pi(1:Nsub)./Nvec(1:Nsub)));
elseC = zeros(L,1);for m = 1:LNsub_in = min(Nrk(m),sum(Pi(m,:)>0));Nsub = Nsub_in(1);C(m) = sum(log2(1+Pi(m,1:Nsub)./Nvec(m,1:Nsub)));end
end

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/265894.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ARM64汇编02 - 寄存器与指令基本格式

最近的文章可能会有较多修改&#xff0c;请关注博客哦 异常级别 ARMv8处理器支持4种异常等级&#xff08;Exception Level&#xff0c;EL&#xff09;。 EL0 为非特权模式&#xff0c;用于运行应用程序&#xff0c;其他资源访问受限&#xff0c;权限不够。 EL1 为特权模式&…

C++:常量表达式

C11开始constexpr作为一种声明&#xff0c;为编译器提供了在编译期间确认结果的优化建议&#xff0c;满足部分编译期特性的需求 constexpr和const区别 int b10; const int ab; //运行成功 constexpr int cb; //编译器报错&#xff0c;b的值在编译期间不能确定 const int size1…

电视盒子什么牌子好?老烧分享电视盒子品牌排行榜

多年前开始我就用电视盒子了至今已经七年&#xff0c;对各个品牌的电视盒子我都有详细深入的了解&#xff0c;看到网友们在讨论电视盒子什么牌子好&#xff0c;不知道如何挑选电视盒子的朋友们可以关注发烧友圈公认的电视盒子品牌排行榜&#xff0c;看看入围的都有哪些品牌吧。…

数据库之MVCC

1、什么是MVCC MVCC&#xff08;Multi-Version Concurrency Control&#xff09;即多版本并发控制。MVCC 是一种并发控制的方法&#xff0c;一般在数据库管理系统中&#xff0c;实现对数据库的并发访问。MVCC使得大部分支持行锁的事务引擎&#xff0c;不再单纯的使用行锁来进行…

如何让电脑待机而wifi不关的操作方法!!

1、一台电脑如果一天不关机&#xff0c;大约消耗0.3度电。 一般一台电脑的功耗约为250-400W&#xff08;台式机&#xff09;。 一台电脑每月的耗电量&#xff1a;如果是每小时300W每天10小时每月30天90KW&#xff0c;即90千瓦时的电。 这只是保守估计。 2、使用完毕后正常关闭…

小兴教你做平衡小车-stm32程序开发(串口打印)

文章目录 1 前言2 串口打印库函数版本3 串口打印寄存器版本3.1 配置时钟3.2 配置GPIO功能3.3 配置CR2寄存器3.4 配置CR1寄存器3.5 配置CR3寄存器 1 前言 我们在调试的过程中&#xff0c;都比较喜欢直观的数据&#xff0c;这时候我们可以使用芯片的串口功能&#xff0c;把数据打…

回归预测 | Matlab实现OOA-HKELM鱼鹰算法优化混合核极限学习机多变量回归预测

回归预测 | Matlab实现OOA-HKELM鱼鹰算法优化混合核极限学习机多变量回归预测 目录 回归预测 | Matlab实现OOA-HKELM鱼鹰算法优化混合核极限学习机多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现OOA-HKELM鱼鹰算法优化混合核极限学习机多变量…

智慧生活,从餐厅开始:开发智能扫码点餐系统的技术详解

本篇文章&#xff0c;小编将深入为大家讲解开发智能扫码点餐系统的技术细节&#xff0c;从系统架构到关键功能实现&#xff0c;为读者提供全面的技术指南。 一、智能扫码点餐系统概述 可实现在线浏览菜单、点餐、支付等操作&#xff0c;大大简化了点餐流程&#xff0c;提升了…

Spring Cloud Gateway官方文档学习

文章目录 推荐写在前面一、熟悉Gateway基本概念与原理1、三大概念2、工作流程 二、基本使用路由断言的两种写法 三、路由断言工厂1、After路由断言工厂2、Before路由断言工厂3、Between路由断言工厂4、Cookie路由断言工厂5、Header路由断言工厂6、Host路由断言工厂7、Method路由…

大话设计模式——4.装饰模式(Decorator Pattern)

1.定义 1&#xff09;可以在不改动原有对象代码的情况下扩展对象的功能&#xff0c;通过聚合的方式相较于继承更加灵活。 2&#xff09;UML图 2.示例 汽车有很多装饰可选&#xff0c;如座椅、音响、轮胎等都可以进行自定义组装 1&#xff09;抽象汽车对象 public interfac…

代码库管理工具Git介绍

阅读本文同时请参阅-----免费的Git图形界面工具sourceTree介绍 Git是一个分布式版本控制系统&#xff0c;它可以帮助开发者跟踪和管理代码历史。Git的命令行工具是使用Git的核心方式&#xff0c;虽然它可能看起来有些复杂&#xff0c;但是一旦掌握了基本命令&#xff0c;你…

回归预测 | Matlab实现SSA-BiLSTM-Attention麻雀算法优化双向长短期记忆神经网络融合注意力机制多变量回归预测

回归预测 | Matlab实现SSA-BiLSTM-Attention麻雀算法优化双向长短期记忆神经网络融合注意力机制多变量回归预测 目录 回归预测 | Matlab实现SSA-BiLSTM-Attention麻雀算法优化双向长短期记忆神经网络融合注意力机制多变量回归预测预测效果基本描述程序设计参考资料 预测效果 基…

Pytorch添加自定义算子之(5)-配置GPU形式的简单add自定义算子

参考:https://zhuanlan.zhihu.com/p/358778742 一、头文件 命名为:add2.h void launch_add2(float *c,const float *a,const float *b,int n);

【Unity】构建简单实用的年份选择器(简单原理示范)

在许多应用程序和游戏中&#xff0c;年份选择是一个常见的需求。无论是在日历应用程序中查看事件&#xff0c;还是在历史类游戏中选择时间段&#xff0c;年份选择器都是用户体验的重要组成部分&#xff0c;下面实现一个简易的年份选择器。 一、效果预览&#xff1a; 目录 一、…

为什么会出现 targetId 与 senderUserId 相同的情况?

描述 单聊会话&#xff08;两位用户聊天&#xff09;中出现了消息的 targetId 和 senderUserId 相同的情况。 分析 融云 IM 设计如此。 senderUserId 是消息的发送者的用户 ID。targetId 是当前会话的 ID&#xff0c;该 ID 指向与本端用户对话的用户 ID、群组 ID、聊天室 I…

蓝桥杯_定时器的基本原理与应用

一 什么是定时器 定时器/计数器是一种能够对内部时钟信号或外部输入信号进行计数&#xff0c;当计数值达到设定要求时&#xff0c;向cpu提出中断处理请求&#xff0c;从而实现&#xff0c;定时或者计数功能的外设。 二 51单片机的定时/计数器 单片机外部晶振12MHZ&#xff0c;…

Linux系统Docker部署StackEdit Markdown并实现公网访问本地编辑器

文章目录 前言1. ubuntu安装VNC2. 设置vnc开机启动3. windows 安装VNC viewer连接工具4. 内网穿透4.1 安装cpolar【支持使用一键脚本命令安装】4.2 创建隧道映射4.3 测试公网远程访问 5. 配置固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址5.3 测试…

基于Redo log Undo log的MySQL的崩溃恢复

基于Redo log & Undo log的MySQL的崩溃恢复 Redo log Undo log Redo log 重做日志,记录,修改过的数据 Undo log 回滚日志,记录修改之前的数据 两个我不做详细的介绍了,redo log就是记录哪些地方被修改了 undo log是记录修改之前我们的数据长什么样 更新流程 我们来捋一…

海量物理刚体 高性能物理引擎Unity Physics和Havok Physics的简单性能对比

之前的博客中我们为了绕过ECS架构&#xff0c;相当于单独用Batch Renderer Group实现了一个精简版的Entities Graphics&#xff0c;又使用Jobs版RVO2实现了10w人同屏避障移动。 万人同屏对抗割草 性能测试 PC 手机端 性能表现 弹幕游戏 海量单位同屏渲染 锁敌 避障 非ECS 那么有…

【C语言】while循环语句

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;C语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&…