【5G NR】【一文读懂系列】移动通讯中使用的信道编解码技术-Turbo编码原理

目录

Turbo码:无线通信中的革命性技术

引言

一、Turbo码的基本原理

1.1 卷积码基础:

1.2 Turbo码的构造:

1.2.1 分量编码器

1.2.2 随机交织器

1.2.3 穿刺和复接单元

1.3 编码器结构的重要性和影响

1.4 迭代解码:

1.4.1 迭代思想

1.4.2 BCJR算法流程

二、Turbo码的应用场景

2.1 无线通信

2.2 卫星通信

2.3 深空通信

三、Turbo码的优缺点分析

3.1 优点:

3.2 缺点:

四、Turbo码与其他译码技术的比较

4.1 性能比较

4.2 复杂度和实现难度比较

4.3 应用场景比较

五 Matlab实现

结语


Turbo码:无线通信中的革命性技术

引言

Turbo码是一种在通信领域具有里程碑意义的纠错编码技术,以其优异的性能在现代无线通信中占据了重要地位。本文将介绍Turbo码的基本原理、应用场景、优缺点分析,并与其他译码技术进行比较,旨在帮助读者更好地理解Turbo码及其在通信技术中的作用。

一、Turbo码的基本原理

1.1 卷积码基础

首先回顾卷积码的基本概念和工作原理,作为Turbo码的基础。

【5G NR】【一文读懂系列】移动通讯中使用的信道编解码技术-卷积码原理

【5G NR】【一文读懂系列】移动通讯中使用的信道编解码技术-Viterbi译码原理

1.2 Turbo码的构造

Turbo码的译码器有两个分量码译码器,译码在两个分量译码器之间进行迭代译码,因整个译码过程类似涡轮turbo工作,共称为Turbo码。

Turbo码编码器结构如下图所示:

图一、Turbo码编码器结构框图

Turbo码的核心在于其编码器结构,这种结构由两个或多个分量编码器(卷积编码器)并行组合而成。每个分量编码器都是传统的卷积码编码器,能够独立地对输入数据进行编码,生成具有一定冗余度的编码数据。

1.2.1 分量编码器

在Turbo码中,原始数据先经过一个卷积编码器(通常称为分量编码器1),然后再经过一个随机交织器进行数据的重新排列。这个交织后的数据再进入第二个卷积编码器(分量编码器2)进行编码。通过这样的方式,原始数据被两次编码,每次编码都增加了不同的冗余信息。

通过并行组合,Turbo码能够在不同的时间和频率上提供冗余,使得在传输过程中即使某一部分数据丢失或受到干扰,也能通过解码过程中的迭代算法来恢复这部分数据。这种冗余的增加显著提高了Turbo码的纠错能力。

1.2.2 随机交织器

随机交织器是Turbo码中的另一个关键组件,它在编码过程中起着至关重要的作用。

交织器的定义:交织器是一个将原始数据重新排列的装置。它并不改变数据的内容,只是按照某种规则重新排列数据的顺序。

交织器的目的:交织器的目的是使两个卷积编码器之间的数据相互独立。这是因为在实际的通信过程中,数据在传输时可能会受到连续的错误干扰。如果没有交织器,这些连续的错误可能会同时影响两个卷积编码器,导致无法恢复原始数据。而通过交织器的重新排列,连续的错误被分散开,降低了对两个编码器同时产生影响的可能性。

交织器的实现:交织器的实现通常采用一个固定的伪随机序列,这个序列决定了原始数据如何被重新排列。在解码过程中,接收端会使用相同的伪随机序列对接收到的数据进行逆交织,以恢复出原始的数据顺序。

1.2.3 穿刺和复接单元

穿刺单元在Turbo编码中的主要作用是减少编码后的冗余信息,以提高编码效率。由于Turbo码在编码过程中会引入大量的冗余比特,这些冗余比特虽然能够提高解码时的可靠性,但也会占用更多的带宽。穿刺单元的目标就是在保持一定纠错能力的同时,尽可能地减少这些冗余比特。穿刺单元按照一定的模式或算法,从编码后的比特流中选择性地删除一部分比特。这个过程是可控的,即可以通过调整穿刺率来控制保留和删除的比特数量。穿刺率定义为被删除的比特数与原始编码比特数的比例。例如,如果穿刺率为1/2,则意味着每两个编码比特中就有一个被删除。穿刺模式的选择对Turbo码的性能至关重要。一个好的穿刺模式应该能够在减少冗余的同时,保持足够的纠错能力。在实际应用中,通常会通过仿真或实验来确定最佳的穿刺模式。

复接单元的主要作用是将多个编码器的输出合并成一个单一的比特流,以便在信道中传输。在Turbo编码中,由于存在多个并行工作的卷积编码器,它们的输出需要通过复接单元进行合并。
复接单元按照预定的顺序或模式,将不同编码器的输出比特交织在一起。这个过程需要确保每个编码器的输出比特在最终的比特流中都有合适的位置,以便在解码时能够正确地分离和识别。复接单元还需要处理由于穿刺而产生的空位。当某些比特被穿刺单元删除后,复接单元需要相应地调整其余比特的位置,以确保输出的比特流在长度和格式上都是正确的。

1.3 编码器结构的重要性和影响

Turbo码的编码器结构是其卓越性能的关键所在。这种结构通过并行组合和随机交织,实现了强大的纠错能力和对连续错误的抵抗能力。在实际应用中,即使在复杂的通信环境下,如低信噪比、高干扰或高速数据传输等情况下,Turbo码也能保持较高的数据传输可靠性和效率。

1.4 迭代解码

Turbo码的解码过程是其编码过程的一个逆向操作,但这个过程远比编码复杂。解码的核心在于迭代解码算法,其中最著名的就是BCJR算法(Bahl-Cocke-Jelinek-Raviv算法)。这种算法通过迭代的方式,逐步逼近最佳的解码结果。

1.4.1 迭代思想

迭代解码的基本思想是利用软输入软输出(Soft-Input Soft-Output, SISO)解码器进行多次迭代,每次迭代都会更新对每个比特的可靠性估计。在Turbo码的解码过程中,每个分量编码器(卷积编码器)的输出都被视为一个独立的信道,而迭代解码就是在这些信道之间传递和更新信息。

每次迭代,解码器都会根据当前的信息(包括接收到的信号和其他解码器提供的信息)对每个比特做出最佳的判断。然后,这个判断会以概率的形式(即软输出)传递给下一个解码器。下一个解码器会利用这个信息,结合自己的判断,再次更新对每个比特的可靠性估计。这个过程会一直重复,直到达到预设的迭代次数或满足一定的收敛条件。

1.4.2 BCJR算法流程

BCJR算法是Turbo码解码中最常用的算法之一。它是一种最大后验概率(Maximum A Posteriori, MAP)算法,旨在找到最可能的原始信息序列。BCJR算法的基本流程如下:

  1. 初始化:设置迭代次数、初始状态概率等参数。对于每个比特,初始化其前向和后向状态概率。
  2. 前向递归:从时间0开始,逐步计算每个时间点上所有可能状态的前向概率。前向概率表示在给定接收序列的条件下,到达某个状态的概率。
  3. 后向递归:从最后一个时间点开始,逐步计算每个时间点上所有可能状态的后向概率。后向概率表示在给定接收序列和某个状态的条件下,后续序列的概率。
  4. 计算比特概率:结合前向和后向概率,计算每个比特为0或1的概率。这些概率就是软输出,将作为下一次迭代的输入。
  5. 迭代更新:将计算得到的比特概率传递给下一个解码器,并重复步骤2-4。每次迭代后,都会更新对每个比特的可靠性估计。
  6. 判决和输出:达到预设的迭代次数或满足收敛条件后,根据最后的比特概率做出硬判决(即确定每个比特是0还是1),并输出解码结果。

BCJR算法通过充分利用Turbo码的结构特点和迭代解码的思想,实现了优异的纠错性能。然而,它也存在计算复杂度高、实现难度大等问题。因此,在实际应用中,通常会采用一些简化的算法或优化方法来降低复杂度和提高解码效率。

二、Turbo码的应用场景

Turbo码作为一种高效的纠错编码技术,已经在多种通信系统中得到了广泛的应用。以下是对Turbo码在不同通信系统中的应用场景及其具体使用案例的详细解释。

2.1 无线通信

在无线通信系统中,由于信号传输过程中会受到多种干扰和衰减,因此需要采用纠错编码技术来提高通信的可靠性。Turbo码凭借其接近香农限的性能和灵活的编码结构,在无线通信中得到了广泛应用。

使用案例:在第三代移动通信系统(3G)和第四代移动通信系统(4G)中,Turbo码被用作数据传输的纠错编码方案。例如,在WCDMA(宽带码分多址)和LTE(长期演进)等标准中,Turbo码被广泛用于语音、数据和多媒体业务的传输。通过采用Turbo码,这些系统能够在较低的信噪比下实现可靠的通信,从而提高用户体验和数据传输效率。

2.2 卫星通信

卫星通信是一种重要的远程通信方式,但由于信号在传播过程中需要经过大气层和空间衰减,因此通信质量容易受到影响。Turbo码的高编码增益和接近香农限的性能使其成为卫星通信中的理想选择。

使用案例:在卫星数字视频广播(DVB-S2)标准中,Turbo码被用作主要的纠错编码方案。DVB-S2标准是为了满足高清电视和多媒体业务的高数据传输需求而制定的。通过使用Turbo码,DVB-S2能够在有限的带宽和信噪比条件下提供高质量的视频和数据传输服务,使得卫星通信在广播、数据传输和互联网接入等领域得到了广泛应用。

2.3 深空通信

深空通信是指地球与太空中其他天体(如月球、火星等)之间的通信。由于深空通信距离远、信号衰减大,因此需要采用高效的纠错编码技术来保证通信的可靠性。Turbo码以其出色的性能和灵活性,在深空通信中发挥着重要作用。

使用案例:在国际空间站(ISS)与地球之间的通信中,Turbo码被广泛用于数据传输和语音通信。通过采用Turbo码,这些通信能够在极端恶劣的信道条件下实现可靠的传输,从而确保航天员与地面控制中心之间的顺畅沟通以及科学实验数据的准确传输。

除了上述场景外,Turbo码还在许多其他通信系统中得到了应用,如光纤通信、移动通信网络中的中继传输等。随着通信技术的不断发展,Turbo码在未来仍然具有广阔的应用前景和重要的研究价值。

三、Turbo码的优缺点分析

Turbo码是一种高效的纠错编码技术,它在无线通信领域有着广泛的应用。以下是对Turbo码的优缺点进行的详细分析:

3.1 优点

  1. 高编码增益:Turbo码通过采用迭代解码和软输入软输出(SISO)技术,能够在较低的信噪比(SNR)下实现可靠的通信,提供显著的编码增益。这意味着在相同的传输条件下,Turbo码可以比其他编码方案传输更多的信息或者提供更高的通信质量。

  2. 接近香农限的性能:Turbo码的纠错性能非常接近理论上的香农限。香农限是信息论中描述在给定噪声和带宽条件下,可靠通信所能达到的最大信息速率的理论极限。Turbo码的性能逼近这个极限,使得它在许多高要求的应用中成为首选的编码方案。

  3. 灵活的编码结构:Turbo码由多个分量编码器(通常是卷积编码器)和随机交织器组成,这种结构提供了灵活性和可配置性。编码器的参数(如码率、块大小等)可以根据特定的应用需求进行调整。

  4. 适用于多种场景:Turbo码最初是为无线通信设计的,但由于其出色的性能,它也被应用于其他领域,如深空通信、数据存储和光纤通信等。在这些场景中,Turbo码能够提供必要的纠错能力以确保数据的可靠传输。

  5. 与调制技术兼容:Turbo码可以与多种调制技术(如QPSK、QAM等)结合使用,实现高效的数字通信。这种兼容性使得Turbo码在各种通信系统中都有广泛的应用前景。

3.2 缺点

  1. 高解码复杂度:Turbo码的迭代解码过程涉及大量的计算,尤其是在处理长码块时。这增加了接收机的复杂性和功耗,可能不适用于资源受限的设备或需要低延迟的应用。

  2. 解码延迟:由于Turbo码需要迭代解码以达到最佳性能,这通常会导致一定的解码延迟。对于实时性要求较高的应用(如语音通信或实时视频流),这种延迟可能是不可接受的。

  3. 对信道条件敏感:虽然Turbo码在多种信道条件下都能表现出良好的性能,但在某些极端条件下(如深衰落或高干扰环境),其性能可能会受到严重影响。在这些情况下,可能需要采取额外的措施来提高通信的可靠性。

  4. 交织器设计挑战:Turbo码中的随机交织器对于其性能至关重要。设计一个适用于特定应用场景且性能优良的交织器是一个具有挑战性的问题。不当的交织器设计可能会导致性能下降或甚至无法正常工作。

  5. 专利和许可问题:Turbo码作为一项重要的通信技术,可能受到专利和许可的限制。这可能会增加使用Turbo码的成本和复杂性,尤其是在商业应用中。

综上所述,Turbo码以其卓越的纠错性能和接近香农限的表现而著称,在无线通信和其他领域都有广泛的应用。然而,其高解码复杂度、解码延迟以及对特定信道条件的敏感性等问题也需要在实际应用中予以考虑和权衡。

四、Turbo码与其他译码技术的比较

在数字通信系统中,译码技术的选择对系统的整体性能有着至关重要的影响。Turbo码、低密度奇偶校验码(LDPC)和卷积码是三种常见的译码技术,它们各自在不同的应用场景中具有独特的优势和劣势。本报告将对这三种译码技术在性能、复杂度、实现难度和应用场景等方面进行深入的比较分析。

4.1 性能比较

  1. Turbo码:Turbo码以其接近香农限的性能而著称,它通过迭代解码和软输入软输出(SISO)技术实现了高编码增益。在信噪比(SNR)较低的情况下,Turbo码仍能保持可靠的通信质量。

  2. LDPC码:LDPC码是一种具有稀疏校验矩阵的线性分组码,其性能也非常接近香农限。LDPC码通过稀疏的校验矩阵和高效的迭代解码算法实现了优异的纠错性能。与Turbo码相比,LDPC码在长码长和低信噪比条件下具有更好的性能。

  3. 卷积码:卷积码是一种具有记忆性的纠错码,它通过卷积运算将输入信息序列编码为输出序列。与Turbo码和LDPC码相比,卷积码的性能较差,尤其是在高数据传输速率和低信噪比条件下。然而,卷积码具有较低的解码复杂度和延迟,因此在一些对实时性要求较高的应用中仍有使用。

4.2 复杂度和实现难度比较

  1. Turbo码:Turbo码的编码过程相对简单,但解码过程涉及迭代解码和大量的计算,因此具有较高的解码复杂度。此外,Turbo码的性能对交织器的设计非常敏感,设计一个性能优良的交织器是一个具有挑战性的问题。

  2. LDPC码:LDPC码的编码过程需要构建稀疏校验矩阵,这可能需要一定的计算资源和存储空间。然而,LDPC码的解码过程相对简单且高效,尤其是当采用硬件实现时。因此,LDPC码在实现难度和复杂度上相对较为平衡。

  3. 卷积码:卷积码的编码和解码过程都相对简单且易于实现。卷积码的性能虽然不如Turbo码和LDPC码,但其低复杂度和低延迟的特点使得它在一些特定应用中具有优势。

4.3 应用场景比较

  1. Turbo码:Turbo码广泛应用于无线通信系统,如3G、4G和某些5G场景中。由于其出色的纠错性能和灵活性,Turbo码也适用于卫星通信和深空通信等远距离通信场景。

  2. LDPC码:LDPC码在无线通信、数据存储和光纤通信等领域都有广泛的应用。特别是在需要长码长和高数据传输速率的场景中,如高清视频传输和大规模数据存储,LDPC码表现出色。

  3. 卷积码:卷积码主要用于语音通信、实时视频流等对实时性要求较高的应用。此外,在一些资源受限的设备或低复杂度要求的场景中,卷积码也是一个合适的选择。

五 Matlab实现

你是一位Matlab编程专家,任务是编写一段Matlab程序,用于实现Turbo码的编码过程。该程序需要包含必要的输入参数,如输入数据、编码速率等,并能够输出编码后的结果。在编写程序时,请注意保持程序结构的清晰性,添加详尽的注释,以确保程序易于理解和修改。

function encodedBits = turboEncode(inputBits, codeRate)  
    % turboEncode - Turbo码编码函数  
    %  
    % 输入参数:  
    %   - inputBits: 输入数据比特流,应为二进制0和1的向量  
    %   - codeRate: 编码速率,例如1/3, 1/2等  
    %  
    % 输出参数:  
    %   - encodedBits: 编码后的比特流  
  
    % 参数检查  
    if codeRate <= 0 || codeRate >= 1  
        error('Invalid encoding rate. It should be a fraction like 1/3, 1/2, etc.');  
    end  
  
    % 定义分量编码器的生成多项式(以八进制表示)  
    g1 = [1 3 1]; % 对应于 (1+D^2+D^3)  
    g2 = [1 5 1]; % 对应于 (1+D+D^3)  
  
    % 创建分量编码器  
    trellis1 = poly2trellis(g1);  
    trellis2 = poly2trellis(g2);  
  
    % 创建交织器(行列置换交织器)  
    N = length(inputBits);  
    blockSize = ceil(sqrt(N)); % 假设交织块大小接近sqrt(N)  
    interleaver = reshape(1:N, blockSize, [])'; % 行列置换交织矩阵  
    interleavedBits = inputBits(interleaver); % 执行交织  
  
    % 分量编码  
    encodedBits1 = convenc(inputBits, trellis1);  
    encodedBits2 = convenc(interleavedBits, trellis2);  
  
    % 穿刺(删除一些编码比特以达到所需的码率)  
    puncturePattern = [1; 1; 0]; % 简单的穿刺模式,每3个比特删除1个  
    puncturedBits1 = puncture(encodedBits1, puncturePattern);  
    puncturedBits2 = puncture(encodedBits2, puncturePattern);  
  
    % 复接器(将两个分量编码器的输出合并)  
    encodedBits = [puncturedBits1; puncturedBits2];  
  
    % 由于交织和穿刺,最终编码长度可能与输入长度不匹配  
    % 这里简单地对编码后的比特进行截断或填充以达到期望长度  
    expectedLength = ceil(length(inputBits) / codeRate);  
    if length(encodedBits) > expectedLength  
        encodedBits = encodedBits(1:expectedLength);  
    elseif length(encodedBits) < expectedLength  
        encodedBits = [encodedBits; zeros(expectedLength - length(encodedBits), 1)];  
    end  
end  
  
function encodedBits = convenc(inputBits, trellis)  
    % convenc - 卷积编码函数  
    %  
    % 输入参数:  
    %   - inputBits: 输入数据比特流  
    %   - trellis: 卷积码的trellis结构  
    %  
    % 输出参数:  
    %   - encodedBits: 卷积编码后的比特流  
  
    convEncoder = comm.ConvEncoder('TrellisStructure', trellis, ...  
        'TerminationMethod', 'Truncated', 'InitialConditions', 0);  
    encodedBits = step(convEncoder, inputBits);  
end  
  
function puncturedBits = puncture(encodedBits, puncturePattern)  
    % puncture - 穿刺函数  
    %  
    % 输入参数:  
    %   - encodedBits: 编码后的比特流  
    %   - puncturePattern: 穿刺模式,1表示保留,0表示删除  
    %  
    % 输出参数:  
    %   - puncturedBits: 穿刺后的比特流  
  
    N = length(encodedBits);  
    punctureLength = length(puncturePattern);  
    puncturedBits = zeros(ceil(N / sum(puncturePattern)), 1);  
    idx = 1;  
    for i = 1:punctureLength:N  
        for j = 1:punctureLength  
            if puncturePattern(j)  
                puncturedBits(idx) = encodedBits(i + j - 1);  
                idx = idx + 1;  
            end  
        end  
    end  
end

请注意,这个程序是一个简化的Turbo编码示例,它没有考虑一些实际应用中可能需要的特性,如动态调整编码速率、更复杂的交织和穿刺策略、迭代解码等。此外,convencpuncture函数是辅助函数,用于执行卷积编码和穿刺操作。

在实际应用中,你可能需要使用Matlab的Communications Toolbox中的更高级的函数来实现Turbo编码,这些函数提供了更多的配置选项和更高的性能。

使用这个程序之前,请确保你了解Turbo码的基本原理,并根据你的具体需求对程序进行修改和优化。

结语

综上所述,Turbo码、LDPC码和卷积码各有其优势和劣势。Turbo码以接近香农限的性能著称,适用于无线通信和远距离通信等场景;LDPC码在长码长和高数据传输速率条件下表现出色,广泛应用于无线通信、数据存储和光纤通信等领域;而卷积码则以其低复杂度和低延迟的特点在某些特定应用中具有优势。在实际应用中,应根据具体的需求和场景选择合适的译码技术。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#使用RabbitMQ-5_主题模式(主题交换机)

简介 主题模式允许发送者根据主题发布消息&#xff0c;而订阅者可以订阅特定的主题。 在主题模式中&#xff0c;生产者发送的消息被发送到一个交换机&#xff08;Exchange&#xff09;&#xff0c;该交换机根据消息的路由键&#xff08;Routing Key&#xff09;和绑定&#x…

springcloud分布式架构网上商城源码和论文

首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设计。本项…

React18原理: Fiber架构下的单线程CPU调度策略

概述 React 的 Fiber 架构, 它的整个设计思想就是去参考CPU的调度策略CPU现在都是多核多进程的&#xff0c;重点研究的是 CPU是单核单线程&#xff0c;它是如何调度的?为什么要去研究单线程的CPU&#xff1f; 浏览器中的JS它是单线程的JS 的执行线程和浏览器的渲染GUI 是互斥…

小兔鲜项目网页版

头部模块 <!-- 头部模块 --><header><!-- 快捷菜单模块 --><div class"xtx-shortcut"><!-- 版心的盒子 --><nav class"container"><ul class"fr"><li><a href"#">请先登录<…

前端JavaScript篇之对象继承的方式有哪些?

目录 对象继承的方式有哪些&#xff1f;1. 原型链继承2. 借用构造函数3. 组合继承4. 原型式继承5. 寄生式组合继承 对象继承的方式有哪些&#xff1f; 1. 原型链继承 当使用原型链继承时&#xff0c;子类型的原型对象被设置为父类型的一个实例。这意味着子类型通过其原型可以…

Python爬虫——请求库安装

目录 1.打开Anaconda Prompt 创建环境2.安装resuests3.验证是否安装成功4.安装Selenium5.安装ChromeDriver5.1获取chrom的版本5.1.1点击浏览器右上三个点5.1.2点击设置5.1.3下拉菜单&#xff0c;点击最后关于Chrome&#xff0c;获得其版本 5.2 打开网址 [chromedriver](https:/…

ADMap:Anti-disturbance framework for reconstructing online vectorized HD map

参考代码&#xff1a;ADMap 动机与出发点 局部地图构建算法在实际中会遇到部分车道线偏离的或是错误的情况&#xff0c;这往往是全局信息获取上存在欠缺&#xff0c;毕竟地图元素的回归很依赖于全局信息的获取。那么从特征提取、attention layer设计和loss构建上可以做一些工作…

qt-C++笔记之判断一个QLabel上有没有load图片

qt-C笔记之判断一个QLabel上有没有load图片 code review! 在Qt框架中&#xff0c;QLabel是用来显示文本或者图片的一个控件。如果你想判断一个QLabel控件上是否加载了图片&#xff0c;你可以检查它的pixmap属性。pixmap属性会返回一个QPixmap对象&#xff0c;如果没有图片被加…

基于springboot广场舞团管理系统源码和论文

随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&#xf…

Linux中常用的工具

软件安装 yum 软件包 在Linux中&#xff0c;软件包是一种预编译的程序集合&#xff0c;通常包含了用户需要的应用程序、库、文档和其他依赖项。 软件包管理工具是用于安装、更新和删除这些软件包的软件。常见的Linux软件包管理工具包括APT&#xff08;Advanced Packaging To…

吉他学习:C大调第一把位音阶,四四拍曲目练习 小星星,练习的目的

第十三课 C大调第一把位音阶https://m.lizhiweike.com/lecture2/29364198 第十四课 四四拍曲目练习 小星星https://m.lizhiweike.com/lecture2/29364131 C大调第一把位音阶非常重要,可以多练习&#x

耳机壳UV树脂制作耳机壳的工艺流程是什么?

使用耳机壳UV树脂制作耳机壳的工艺流程如下&#xff1a; 获取耳模&#xff1a;首先&#xff0c;需要获取用户的耳模。这通常是通过使用一种柔软的材料注入到用户的耳朵中&#xff0c;然后取出并用来制作耳机的内芯。选择UV树脂&#xff1a;接下来&#xff0c;需要选择合适的UV…

二十、K8S-1-权限管理RBAC详解

目录 k8s RBAC 权限管理详解 一、简介 二、用户分类 1、普通用户 2、ServiceAccount 三、k8s角色&角色绑定 1、授权介绍&#xff1a; 1.1 定义角色&#xff1a; 1.2 绑定角色&#xff1a; 1.3主体&#xff08;subject&#xff09; 2、角色&#xff08;Role和Cluster…

【MySQL】MySQL表的增删改查(进阶)

MySQL表的增删改查&#xff08;进阶&#xff09; 1. 数据库约束1.1 约束类型1.2 NULL约束1.3 UNIQUE:唯一约束1.4 DEFAULT&#xff1a;默认值约束1.5 PRIMARY KEY&#xff1a;主键约束1.6 FOREIGN KEY&#xff1a;外键约束:1.7 CHECK约束&#xff08;了解&#xff09; 2. 表的设…

emmet语法

一.html $排序 直接.dem或#two是默认div 内容可写{}里 二.css 直接写首字母 三.格式化 一次&#xff08;右键格式化&#xff09; 永久

最佳视频转换器软件:2024年视频格式转换的选择

我们生活在一个充满数字视频的世界&#xff0c;但提供的内容远不止您最喜欢的流媒体服务目录。虽然我们深受喜爱的设备在播放各种自制和下载的视频文件方面变得越来越好&#xff0c;但在很多情况下您都需要从一种格式转换为另一种格式。 经过大量测试&#xff0c; 我们尝试过…

《动手学深度学习(PyTorch版)》笔记8.4

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过&…

JSP页面模型

1. JSP页面模型 JSP页面模型描述如何为所提供的协议通过请求对象创建响应对象。JSP容器将Web客户端发送的请求下发给JSP页面实现对象,并向Web客户端返回响应。JSP页面实现对象时一个servlet,运行时表示JSP页面,由JSP容器执行。 在JSP页面作者和JSP容器之间定义合同的方法 …

Android:Cordova,JavaScript操作设备功能

Cordova学习 Cordova提供了一组设备相关的API,通过这组API,移动应用能够以JavaScript访问原生的设备功能,如摄像头、麦克风等。 Cordova还提供了一组统一的JavaScript类库,以及为这些类库所用的设备相关的原生后台代码。 Cordova是PhoneGap贡献给Apache后的开源项目,是从…

OpenCV-35 查找轮廓

一、 什么是图像轮廓 图像轮廓是具有相同颜色或灰度的连续点的曲线&#xff0c;轮廓在形状分析和物体的检测识别中很有用。 用于图形分析物体的识别和检测 注意点&#xff1a; 为了检测的准确性&#xff0c;需要先对图像进行二值化或Canny操作。画轮廓时会修改输入的图像&a…