from python_speech_features import mfcc出错原因

时间: 2023-09-03 14:10:00 浏览: 26
出错的原因可能有很多,以下是一些常见的问题和解决方法: 1. ImportError: No module named 'python_speech_features' 这个错误通常是因为没有安装python_speech_features库。可以通过以下命令来安装: ``` pip install python_speech_features ``` 2. TypeError: 'module' object is not callable 这个错误通常是因为在调用`mfcc`函数时,使用了错误的语法或参数。请检查函数的输入参数是否正确,并确保函数名正确拼写。请参考上一个回答中的示例代码。 3. ValueError: frames must be greater than zero 这个错误通常是因为输入的音频信号长度不够,或者帧的大小设置过大。可以尝试调整帧的大小或者使用更长的音频信号。例如: ```python import numpy as np from python_speech_features import mfcc import scipy.io.wavfile as wav # 读取音频文件 rate, signal = wav.read("audio.wav") # 计算MFCC系数 mfcc_features = mfcc(signal, rate, winlen=0.025, winstep=0.01, numcep=13, nfilt=26, nfft=512, lowfreq=0, highfreq=None, preemph=0.97, ceplifter=22, appendEnergy=True) print(mfcc_features) ``` 在上面的示例代码中,我们使用了更小的帧大小(winlen=0.025)和步长(winstep=0.01),并且指定了其他参数的默认值。

相关推荐

python_speech_features是Python中一个常用的语音信号处理库,其中的mfcc函数是用于计算梅尔频率倒谱系数(Mel Frequency Cepstral Coefficients,MFCC)的函数。 MFCC是语音信号处理中常用的特征参数,可以用于语音识别、说话人识别等任务。MFCC的计算过程包括以下几个步骤: 1. 分帧:将语音信号分成若干个短时窗口,通常使用汉明窗或其他窗函数对每个窗口进行加权。 2. 傅里叶变换:对每个窗口内的语音信号进行快速傅里叶变换(FFT),将信号从时域转换到频域。 3. 梅尔滤波器组:将频率轴划分为若干个梅尔滤波器组,每个梅尔滤波器组对应一个梅尔频率,用于模拟人耳对频率的响应。 4. 取对数:对每个梅尔滤波器组的能量取对数,得到梅尔频率谱系数(Mel Spectral Coefficients,MSC)。 5. 离散余弦变换:对MSC进行离散余弦变换(DCT),得到MFCC。 python_speech_features中的mfcc函数实现了上述MFCC的计算过程,可以将语音信号转换成一组MFCC特征向量。使用方法如下: python from python_speech_features import mfcc import scipy.io.wavfile as wav (rate, signal) = wav.read("test.wav") mfcc_feat = mfcc(signal, rate) 其中,rate是采样率,signal是语音信号的numpy数组。mfcc函数的返回值mfcc_feat是一个二维numpy数组,每行是一个MFCC特征向量。可以将mfcc_feat作为语音信号的特征向量,用于后续的语音识别任务。
音乐流派分类是一个非常有趣的问题,可以使用MFCC和GMM来实现。MFCC是一种用于音频信号特征提取的技术,可以将音频信号转换为一组与音高、音量等相关的特征向量。GMM是一种基于概率的分类器,可以用于将特征向量映射到不同的音乐流派。 下面是一个基于MFCC和GMM的音乐流派分类的Python代码示例: python import os import numpy as np import scipy.io.wavfile as wav from python_speech_features import mfcc from sklearn.mixture import GaussianMixture from sklearn.model_selection import train_test_split # 定义函数,提取MFCC特征 def extract_features(file_name): (rate, sig) = wav.read(file_name) mfcc_feat = mfcc(sig, rate, nfft=2048) return mfcc_feat # 定义函数,加载数据集 def load_data(dir_name): files = os.listdir(dir_name) data = [] for file in files: if file.endswith('.wav'): file_path = os.path.join(dir_name, file) features = extract_features(file_path) data.append(features) return data # 加载数据集 rock_data = load_data('path/to/rock/music') jazz_data = load_data('path/to/jazz/music') # 将数据集转换为numpy数组 rock_data = np.array(rock_data) jazz_data = np.array(jazz_data) # 为每个数据集添加标签 rock_labels = np.zeros(len(rock_data)) jazz_labels = np.ones(len(jazz_data)) # 将数据集合并 data = np.vstack((rock_data, jazz_data)) labels = np.hstack((rock_labels, jazz_labels)) # 拆分数据集为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(data, labels, test_size=0.2) # 训练GMM分类器 gmm = GaussianMixture(n_components=2, covariance_type='full') gmm.fit(X_train) # 预测测试集 y_pred = gmm.predict(X_test) # 计算准确率 accuracy = np.mean(y_pred == y_test) print('Accuracy:', accuracy) 这个代码示例假设你有两个文件夹,一个文件夹包含摇滚音乐文件,另一个文件夹包含爵士音乐文件。你需要将代码中的路径更改为你的文件夹路径,并根据需要更改GMM的参数。这个代码示例使用了sklearn库中的GaussianMixture类来训练GMM分类器,并使用numpy库计算准确率。
在Python中,对于时域特征提取,你可以使用各种信号处理库和机器学习库来实现。以下是一些常用的库和方法: 1. Librosa:它是一个用于音频和音乐信号处理的流行库。你可以使用Librosa来提取各种时域特征,如时长、能量、过零率、音调等。 python import librosa # 加载音频文件 audio, sr = librosa.load('audio.wav') # 提取时长 duration = librosa.get_duration(audio, sr) # 提取能量 energy = librosa.feature.rms(audio) # 提取过零率 zero_crossing_rate = librosa.feature.zero_crossing_rate(audio) # 提取音调 pitches, magnitudes = librosa.piptrack(audio) # 其他特征提取方法请参考Librosa文档 2. Python_speech_features:这是一个专门用于语音信号处理的库。你可以使用它提取MFCC(Mel频率倒谱系数)等特征。 python from python_speech_features import mfcc # 提取MFCC特征 mfcc_features = mfcc(audio, sr) # 其他特征提取方法请参考Python_speech_features文档 3. SciPy:SciPy是一个强大的科学计算库,其中包含了丰富的信号处理函数。你可以使用SciPy来进行信号滤波、傅里叶变换等操作。 python from scipy import signal # 设计一个低通滤波器 b, a = signal.butter(4, 0.2, 'low') # 应用滤波器 filtered_audio = signal.lfilter(b, a, audio) # 进行傅里叶变换 spectrum = np.fft.fft(audio) # 其他信号处理操作请参考SciPy文档 这只是几个常用的库和方法,实际上还有很多其他的库和算法可以用于时域特征提取。具体使用哪个库和方法取决于你的需求和数据类型。
以下是一个基于MFCC特征提取、DTW算法的语音识别Python代码示例: python import numpy as np import scipy.io.wavfile as wav from python_speech_features import mfcc from scipy.spatial.distance import euclidean from fastdtw import fastdtw # 1. 数据准备和特征提取 # 设置录音参数 fs = 16000 # 采样率 duration = 1 # 录音时长(秒) # 读取录音文件 filename = 'input.wav' rate, voiceData = wav.read(filename) # 提取MFCC特征 mfccFeatures = mfcc(voiceData, samplerate=fs) # 2. 训练模型 # 准备训练数据和标签 trainingData = [] # 存储训练数据 trainingLabels = [] # 存储标签 # 添加0到9的训练数据和标签 for i in range(10): # 读取训练数据(假设已经准备好了对应的语音文件) filename = f'digit_{i}.wav' rate, trainingVoice = wav.read(filename) # 提取MFCC特征 trainingFeatures = mfcc(trainingVoice, samplerate=fs) # 添加到训练数据和标签中 trainingData.extend(trainingFeatures) trainingLabels.extend([i] * len(trainingFeatures)) # 转换为NumPy数组 trainingData = np.array(trainingData) trainingLabels = np.array(trainingLabels) # 3. 识别输入语音 # 使用DTW算法计算距离和路径 distances = [] for i in range(10): # 获取当前数字的模型特征 filename = f'digit_{i}.wav' rate, digitVoice = wav.read(filename) digitFeatures = mfcc(digitVoice, samplerate=fs) # 计算DTW距离和路径 distance, _ = fastdtw(mfccFeatures, digitFeatures, dist=euclidean) distances.append(distance) # 找到最小距离对应的数字 recognizedDigit = np.argmin(distances) # 显示识别结果 print(f"识别结果:{recognizedDigit}") 请确保已安装所需的库,例如scipy、numpy、python_speech_features和fastdtw。此示例使用了wav库来读取和写入音频文件。你需要将录制的语音文件命名为input.wav,并准备好0到9的训练数据文件,命名为digit_0.wav到digit_9.wav。该代码示例使用了MFCC特征提取和DTW算法来计算输入语音与训练数据之间的距离,并找到最匹配的数字作为识别结果。
以下是基于Python和Kaldi工具包的GMM-HMM自动语音识别算法代码示例: python import kaldi_io import numpy as np from kaldi.feat.mfcc import Mfcc, MfccOptions from kaldi.feat.functions import compute_cmvn_stats from kaldi.hmm import HmmTopology, MakeAmDiagGmm, DecodableInterface, DecodableMatrixScaled from kaldi.matrix import SubVector, Vector from kaldi.util.table import SequentialMatrixReader, SequentialWaveReader from kaldi.fstext import SymbolTable, ReadFstKaldiGeneric from kaldi.decoder import LatticeFasterDecoder, CompactLatticeWriter # MFCC特征提取 def extract_mfcc(signal, sample_rate, num_mel_bins, num_ceps, use_energy=True, use_delta=True): mfcc_opts = MfccOptions() mfcc_opts.mel_opts.num_bins = num_mel_bins mfcc_opts.num_ceps = num_ceps mfcc_opts.use_energy = use_energy mfcc_opts.use_delta = use_delta mfcc = Mfcc(mfcc_opts) feats = mfcc.compute_features(signal, sample_rate) return feats # 计算CMVN统计量 def compute_cmvn_feats(feats): stats = compute_cmvn_stats(feats) feats_cmvn = feats.copy() feats_cmvn.add_row(-stats.mean_vec) feats_cmvn.scale_rows(1.0 / np.sqrt(stats.var_vec)) return feats_cmvn # 构建HMM拓扑结构 def build_hmm_topology(num_pdfs): topo = HmmTopology() topo.add_transition(0, 1, 0) for i in range(1, num_pdfs): topo.add_transition(i, i + 1, 0) topo.add_self_loop(1, 1) topo.set_final(num_pdfs, 0) return topo # 训练GMM模型 def train_gmm(data_rspecifier, num_gaussians, num_iterations, num_frames_per_batch): feats_rspec = f"ark,s,cs:apply-cmvn --norm-vars=false scp:{data_rspecifier} ark:- |" feats_reader = SequentialMatrixReader(feats_rspec) # 初始化GMM feats = feats_reader[0][1] dim = feats.shape[1] gmm = MakeAmDiagGmm(num_gaussians, dim, 1) # EM迭代 for i in range(num_iterations): sum_accs = gmm.AccumulateForUtterance(feats, 1.0) for j in range(1, feats_reader.num_rows()): utt, utt_feats = feats_reader[j] sum_accs.Add(gmm.AccumulateForUtterance(utt_feats, 1.0)) if (j + 1) % num_frames_per_batch == 0: gmm.Update(sum_accs, "m", True) sum_accs = gmm.ZeroAccs() if not sum_accs.IsZero(): gmm.Update(sum_accs, "m", True) return gmm # 解码 def decode(gmm, transducer, feats, word_symbols): decoder = LatticeFasterDecoder(transducer, 1.0, 0.0, True, 40.0, 30.0, 0.1, 0.1, True, True, True) decodable = DecodableMatrixScaled(DecodableInterface(gmm, feats), 1.0) # 解码 decoder.Decode(decodable) # 获取最佳路径 lattice = decoder.GetRawLattice() CompactLatticeWriter.Write("ark:| gzip -c > lat.gz", lattice) # 转录 with open("lat.gz", "rb") as f: for key, lat_str in kaldi_io.read_compress_archive(f): lat = CompactLattice() lat.ParseFromString(lat_str) best_path = kaldi.fst.shortestpath.shortestpath(lat).olabels words = [word_symbols.Find(sym).decode() for _, sym in best_path] print(key, " ".join(words)) if __name__ == '__main__': # 加载词典 word_symbols = SymbolTable.ReadText("words.txt") # 加载HMM拓扑 topo = ReadFstKaldiGeneric("topo") # 加载语言模型 graph = ReadFstKaldiGeneric("graph") # 加载数据 data_rspecifier = "scp:data.scp" # 提取MFCC特征 feats = extract_mfcc(signal, sample_rate, num_mel_bins=40, num_ceps=13) # 计算CMVN统计量 feats_cmvn = compute_cmvn_feats(feats) # 训练GMM gmm = train_gmm(data_rspecifier, num_gaussians=2048, num_iterations=10, num_frames_per_batch=10000) # 解码 decode(gmm, topo, feats_cmvn, graph, word_symbols) 该代码使用Kaldi工具包实现了一个基于GMM-HMM的自动语音识别系统,包括MFCC特征提取、CMVN归一化、GMM训练和解码等步骤。
语音识别是指将语音信号转化为文本的过程。卷积神经网络(CNN)是一种强大的深度学习模型,已经在图像识别、语音识别和自然语言处理等领域取得了很大的成功。本文将介绍如何使用CNN实现语音识别,并提供详细的Python代码。 ## 数据准备 我们将使用Google提供的Speech Commands Dataset v0.02来训练我们的模型。该数据集包含约6,000个30个单词的语音命令。您可以从以下链接下载数据集: https://storage.cloud.google.com/download.tensorflow.org/data/speech_commands_v0.02.tar.gz 下载并解压缩数据集,您将获得一个名为“speech_commands_v0.02”的文件夹,其中包含所有语音命令的文件夹,以及一个包含标签的CSV文件。 我们将使用Python的Librosa库来读取和处理音频文件。如果您尚未安装该库,请使用以下命令进行安装: !pip install librosa ## 数据预处理 我们需要将音频文件转换为MFCC(Mel频率倒谱系数)特征。 MFCC是一种常用于语音识别的特征提取方法,它通过将音频信号转换为频域来捕获语音的重要信息。 以下是将音频文件转换为MFCC特征的Python代码: python import librosa import librosa.display import numpy as np def extract_features(file_path): # 读取音频文件 signal, sample_rate = librosa.load(file_path, sr=16000) # 提取MFCC特征 mfccs = librosa.feature.mfcc(signal, sample_rate, n_mfcc=40) # 压缩特征数据 mfccs = np.mean(mfccs.T, axis=0) return mfccs 我们可以使用以下代码来测试该函数: python file_path = 'speech_commands_v0.02/yes/0a7c2a8d_nohash_0.wav' features = extract_features(file_path) print(features.shape) 输出应该是: (40,) 这意味着我们已成功将音频文件转换为40维的MFCC特征。 接下来,我们需要为每个语音命令创建一个特征集和一个标签向量。以下是创建特征集和标签向量的Python代码: python import os def load_data(data_dir): # 用于存储特征和标签的列表 features = [] labels = [] # 遍历所有语音命令文件夹 for label, sub_dir in enumerate(os.listdir(data_dir)): sub_dir_path = os.path.join(data_dir, sub_dir) # 遍历所有音频文件 for file_name in os.listdir(sub_dir_path): file_path = os.path.join(sub_dir_path, file_name) # 提取MFCC特征 mfccs = extract_features(file_path) # 将特征和标签添加到列表中 features.append(mfccs) labels.append(label) return np.array(features), np.array(labels) 我们可以使用以下代码来加载数据: python data_dir = 'speech_commands_v0.02' features, labels = load_data(data_dir) print(features.shape, labels.shape) 输出应该是: (105829, 40) (105829,) 这意味着我们已经成功加载了数据,并且有105,829个样本和40个特征。 ## 划分数据集 我们需要将数据集划分为训练集、验证集和测试集。我们将使用80%的数据作为训练集,10%的数据作为验证集,10%的数据作为测试集。 以下是将数据集划分为训练集、验证集和测试集的Python代码: python from sklearn.model_selection import train_test_split # 划分数据集 X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.1, random_state=42) X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.1, random_state=42) print(X_train.shape, y_train.shape) print(X_val.shape, y_val.shape) print(X_test.shape, y_test.shape) 输出应该是: (85766, 40) (85766,) (9520, 40) (9520,) (10543, 40) (10543,) 这意味着我们已成功将数据集划分为训练集、验证集和测试集。 ## 构建CNN模型 现在,我们将使用Keras库构建CNN模型。以下是CNN模型的Python代码: python from keras.models import Sequential from keras.layers import Conv2D, MaxPooling2D, Dropout, Flatten, Dense # 创建CNN模型 model = Sequential() # 添加卷积层和池化层 model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(40, 98, 1))) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Conv2D(64, kernel_size=(3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Conv2D(128, kernel_size=(3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) # 将特征图展平为向量 model.add(Flatten()) # 添加全连接层和输出层 model.add(Dense(256, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(30, activation='softmax')) # 编译模型 model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) print(model.summary()) 我们使用三个卷积层和池化层来提取特征,然后将特征图压缩为向量,并将其馈送到全连接层和输出层中。我们使用softmax作为输出层的激活函数,因为我们需要将模型的输出解释为概率。 ## 训练模型 现在我们已经准备好训练我们的模型了。我们将使用批量大小为32和100个时期来训练我们的模型。 以下是训练CNN模型的Python代码: python from keras.utils import np_utils # 将标签向量转换为独热编码 y_train = np_utils.to_categorical(y_train) y_val = np_utils.to_categorical(y_val) y_test = np_utils.to_categorical(y_test) # 将特征重塑为CNN所需的形状 X_train = X_train.reshape(X_train.shape[0], 40, 98, 1) X_val = X_val.reshape(X_val.shape[0], 40, 98, 1) X_test = X_test.reshape(X_test.shape[0], 40, 98, 1) # 训练模型 history = model.fit(X_train, y_train, batch_size=32, epochs=100, validation_data=(X_val, y_val)) ## 评估模型 现在我们已经训练了我们的模型,我们需要评估它的性能。我们将使用测试集来评估模型的性能。以下是评估模型的Python代码: python # 在测试集上评估模型 score = model.evaluate(X_test, y_test, verbose=0) print('Test loss:', score[0]) print('Test accuracy:', score[1]) ## 结论 在本文中,我们介绍了如何使用CNN实现语音识别,并提供了详细的Python代码。我们使用了Google的Speech Commands Dataset v0.02作为我们的数据集,并使用Keras库构建了CNN模型。我们将数据集划分为训练集、验证集和测试集,并使用批量大小为32和100个时期来训练模型。最后,我们在测试集上评估了模型的性能。

最新推荐

基于HTML5的移动互联网应用发展趋势.pptx

基于HTML5的移动互联网应用发展趋势.pptx

混合神经编码调制的设计和训练方法

可在www.sciencedirect.com在线获取ScienceDirectICTExpress 8(2022)25www.elsevier.com/locate/icte混合神经编码调制:设计和训练方法Sung Hoon Lima,Jiyong Hana,Wonjong Noha,Yujae Songb,Sang-WoonJeonc,a大韩民国春川,翰林大学软件学院b韩国龟尾国立技术学院计算机软件工程系,邮编39177c大韩民国安山汉阳大学电子电气工程系接收日期:2021年9月30日;接收日期:2021年12月31日;接受日期:2022年1月30日2022年2月9日在线发布摘要提出了一种由内码和外码组成的混合编码调制方案。外码可以是任何标准的二进制具有有效软解码能力的线性码(例如,低密度奇偶校验(LDPC)码)。内部代码使用深度神经网络(DNN)设计,该深度神经网络获取信道编码比特并输出调制符号。为了训练DNN,我们建议使用损失函数,它是受广义互信息的启发。所得到的星座图被示出优于具有5G标准LDPC码的调制�

利用Pandas库进行数据分析与操作

# 1. 引言 ## 1.1 数据分析的重要性 数据分析在当今信息时代扮演着至关重要的角色。随着信息技术的快速发展和互联网的普及,数据量呈爆炸性增长,如何从海量的数据中提取有价值的信息并进行合理的分析,已成为企业和研究机构的一项重要任务。数据分析不仅可以帮助我们理解数据背后的趋势和规律,还可以为决策提供支持,推动业务发展。 ## 1.2 Pandas库简介 Pandas是Python编程语言中一个强大的数据分析工具库。它提供了高效的数据结构和数据分析功能,为数据处理和数据操作提供强大的支持。Pandas库是基于NumPy库开发的,可以与NumPy、Matplotlib等库结合使用,为数

appium自动化测试脚本

Appium是一个跨平台的自动化测试工具,它允许测试人员使用同一套API来编写iOS和Android平台的自动化测试脚本。以下是一个简单的Appium自动化测试脚本的示例: ```python from appium import webdriver desired_caps = {} desired_caps['platformName'] = 'Android' desired_caps['platformVersion'] = '9' desired_caps['deviceName'] = 'Android Emulator' desired_caps['appPackage']

智能时代人机交互的一些思考.pptx

智能时代人机交互的一些思考.pptx

"基于自定义RC-NN的优化云计算网络入侵检测"

⃝可在www.sciencedirect.com在线获取ScienceDirectICTExpress 7(2021)512www.elsevier.com/locate/icte基于自定义RC-NN和优化的云计算网络入侵检测T.蒂拉加姆河ArunaVelTech Rangarajan博士Sagunthala研发科学技术研究所,印度泰米尔纳德邦钦奈接收日期:2020年8月20日;接收日期:2020年10月12日;接受日期:2021年4月20日2021年5月5日网上发售摘要入侵检测是保证信息安全的重要手段,其关键技术是对各种攻击进行准确分类。入侵检测系统(IDS)被认为是云网络环境中的一个重要安全问题。在本文中,IDS给出了一个创新的优化定制的RC-NN(递归卷积神经网络),提出了入侵检测与蚁狮优化算法的基础上。通过这种方法,CNN(卷积神经网络)与LSTM(长短期记忆)混合。因此,利用云的网络层识别的所有攻击被有效地分类。下面所示的实验结果描述了具有高精度的IDS分类模型的呈现,从而�

Shell脚本中的并发编程和多线程操作

# 一、引言 ## 1.1 介绍Shell脚本中并发编程和多线程操作的概念与意义 在Shell编程中,并发编程和多线程操作是指同时执行多个任务或操作,这在处理大规模数据和提高程序执行效率方面非常重要。通过并发编程和多线程操作,可以实现任务的同时执行,充分利用计算资源,加快程序运行速度。在Shell脚本中,也可以利用并发编程和多线程操作来实现类似的效果,提高脚本的执行效率。 ## 1.2 探讨并发编程和多线程在IT领域的应用场景 在IT领域,并发编程和多线程操作被广泛应用于各种场景,包括但不限于: - Web服务器中处理并发请求 - 数据库操作中的并发访问和事务处理 - 大数据处理和分析

极端随机数python

为了生成极端随机数,我们可以使用Python的random模块中的SystemRandom类。SystemRandom类使用操作系统提供的随机源来生成随机数,因此它比random模块中的其他函数更加安全和随机。以下是一个生成极端随机数的例子: ```python import random sys_random = random.SystemRandom() extreme_random_number = sys_random.randint(-9223372036854775807, 9223372036854775807) print("Extreme random number: "

引文编年可视化软件HistCite介绍与评价.pptx

引文编年可视化软件HistCite介绍与评价.pptx

"量子进化算法优化NOMA用户配对"

可在www.sciencedirect.com在线获取ScienceDirectICTExpress 8(2022)11www.elsevier.com/locate/icteNOMA用户配对的量子进化算法Bhaskara Narottamaa,Denny Kusuma Hendraningratb,Soo Young Shina,a韩国龟尾市久茂国立技术学院IT融合工程系b印度尼西亚雅加达印度尼西亚国家标准化机构标准制定副代表接收日期:2021年8月17日;接收日期:2021年12月15日;接受日期:2022年1月24日2022年2月18日在线提供摘要本文提出了利用量子进化算法(QEA)进行非正交多用户配对访问(NOMA)。通过利用量子概念,如叠加,它获得了一个用户配对的解决方案,接近最高可实现的总和速率。此外,精英QEA(E-QEA)的建议,以进一步提高性能,通过消除在下一次迭代失去当前迭代的最佳解的风险。仿真结果表明,E-QEA和QEA产生更高的平均可实现与随机用户配对相比的总和速率© 2022 由 Elsevier B.V. 发 布 代 表 韩 国 通