主要内容

深層学習ネットワクを使用した音声のノズ除去

この例では,深層学習ネットワ,クを使用して音声信号をノ,ズ除去する方法を説明します。例は,同じタスクに適用された 2 つのタイプのネットワーク (全結合と畳み込み) を比較します。

はじめに

音声のノ▪▪ズ除去の目的は,音声の品質と明瞭度を強調しながら▪▪音声信号からノ▪▪ズを削除することです。この例は,深層学習のネットワクを使用した音声信号からの洗浄機ノズの削除にいて紹介します。例は,同じタスクに適用された 2 つのタイプのネットワーク (全結合と畳み込み) を比較します。

問題の概要

8 kHzでサンプリングされた以下の音声信号にいて考えます。

[cleanAudio,fs] = audioread(“SpeechDFT-16-8-mono-5secs.wav”);声音(cleanAudio fs)

洗浄機のノ@ @ズを音声信号に付加します。S/N比(信噪比)が0 dBとなるようにノe @ズパワを設定します。

噪音= audieread (“洗衣机- 16 - 8 mono - 1000 - secs.mp3”);从噪声文件中的随机位置提取一个噪声段ind = randi(数字(噪音)-数字(cleanAudio) + 1,1,1);noisessegment = noise(ind:ind + numel(cleanAudio) - 1);speechPower = sum(cleanAudio.^2);noisePower = sum(noisessegment .^2);noisyAudio = cleanAudio +√(speechPower/noisePower)* noisessegment;

ノ@ @ズ音声信号を再生します。

声音(noisyAudio fs)

元の信号とノ@ @ズ信号を可視化します。

t = (1/fs)*(0:numel(cleanAudio) - 1);图(1)tiledlayout(2,1) nexttile plot(t,cleanAudio)“干净的声音”网格)nexttile plot(t,noisyAudio)“嘈杂的声音”)包含(“时间(s)”网格)

音声のノイズ除去の目的は,出力音声で望ましくないアーティファクトを最小化しながら,音声信号から洗浄機のノイズを削除することです。

デ,タセットの確認

この例では,Mozilla Common Voiceデ,タセット[1]のサブセットを使用し,深層学習ネットワ,クに学習させてテストします。デ,タセットには,短い文章を話す被験者の48 kHzの録音が含まれます。デタセットをダウンロドし,ダウンロドしたファルを解凍します。

downloadFolder = matlab.internal.examples.download万博1manbetxSupportFile(“音频”“commonvoice.zip”);dataFolder = tempdir;unzip(下载文件夹,数据文件夹)dataset = fullfile(数据文件夹,数据文件夹)“无法推进”);

audioDatastoreを使用し,学習セットのデ,タストアを作成します。パフォマンスを犠牲にして例のランタムを高速化するには,speedupExample真正的に設定します。

adsTrain = audioDatastore(fullfile(dataset,“训练”), IncludeSubfolders = true);speedupExample =真正的如果speedupExample adsTrain = shuffle(adsTrain);adsTrain =子集(adsTrain,1:1000);结束

を使用し,デ,タストア内の最初のファ,ルの内容を取得します。

[audio,adsTrainInfo] = read(adsTrain);

音声信号を再生します。

声音(音频、adsTrainInfo.SampleRate)

音声信号をプロットします。

图(2)t = (1/adsTrainInfo.SampleRate) *(0:数字(音频)-1);情节(t,音频)标题(“语音信号示例”)包含(“时间(s)”网格)

深層学習システムの概要

標準の深層学習の学習スキ,ムを以下に示します。音声が通常4 kHz未満になるため,ネットワークの計算負荷を減らすために,最初にクリーンなオーディオ信号とノイズを含むオーディオ信号を8 kHzまでダウンサンプリングすることに注意してください。予測子とターゲットのネットワーク信号は,それぞれノイズを含む信号とクリーンなオーディオ信号の振幅スペクトルです。ネットワクの出力はノズ除去後の信号の振幅スペクトルです。回帰ネットワ,クは,予測子入力を使用して,出力と入力のタ,ゲット間の平均二乗誤差を最小化します。ノイズ除去後のオーディオは,出力振幅スペクトルとノイズを含む信号の位相を使用して時間領域に戻されます[2]。

短時間フーリエ変換(STFT)を使用して,ウィンドウの長さが256サンプル,オーバーラップが75%,ハミングウィンドウをもつ周波数領域にオーディオを変換します。負の周波数に対応する周波数サンプルを落として,スペクトルベクトルのサイズを129まで縮小します(時間領域の音声信号が実数のため,これは情報の損失にはつながりません)。各STFT出力の推定が現在のノイズを含むSTFTと7つの以前のノイズを含むSTFTベクトルを基にして計算されるように,予測子入力は8つの連続するノイズを含むSTFTベクトルで構成されます。

STFTのタ,ゲットと予測子

この節では,1の学習ファ。

最初に,次のシステムパラメ,タ,を定義します。

windowLength = 256;win = hamming(windowLength,“周期”);重叠= round(0.75*windowLength);fftLength = windowLength;inputFs = 48e3;Fs = 8e3;numFeatures = fftLength/2 + 1;numSegments = 8;

48 kHzオディオを8 kHzに変換するために,dsp。SampleRateConverter(DSP系统工具箱)オブジェクトを作成します。

src = dsp.SampleRateConverter(InputSampleRate=inputFs,OutputSampleRate=fs,Bandwidth=7920);

を使用して、デ、タストアからオ、ディオファ、ルの内容を取得します。

音频= read(adsTrain);

オ,ディオの長さがサンプルレ,ト変換の間引き係数の倍数であることを確認してください。

decimationFactor = inputFs/fs;L =地板(数字(音频)/decimationFactor);音频=音频(1:decimationFactor*L);

オ,ディオ信号を8 kHzに変換します。

音频= src(音频);重置(src)

洗浄機のノ▪▪ズベクトルからランダムなノ▪▪ズのセグメントを作成します。

Randind = randi(数字(噪音)-数字(音频),[1 1]);noisessegment =噪音(randind:randind +数字(音频)- 1);

信噪比が0 dBとなるように音声信号にノaaplズを付加します。

noisePower = sum(noisessegment .^2);cleanPower = sum(音频.^2);noiseSegment = noiseSegment.*sqrt(cleanPower/noisePower);noisyAudio =音频+ noisessegment;

stftを使用して,元のオーディオ信号とノイズを含むオーディオ信号から振幅STFTベクトルを生成します。

cleanSTFT = stft(音频,窗口=win,OverlapLength=重叠,fftLength=fftLength);cleanSTFT = abs(cleanSTFT(numFeatures-1:end,:));noisySTFT = stft(noisyAudio,Window=win,OverlapLength=overlap,fftLength=fftLength);noisySTFT = abs(noisySTFT(numFeatures-1:end,:));

ノ▪▪ズを含むSTFTから8▪▪のセグメントの学習予測子信号を生成します。連続する予測子間のオ,バ,ラップは,7セグメントです。

noisySTFT = [noisySTFT(:,1:numSegments - 1),noisySTFT];stftSegments = 0 (numFeatures,numSegments,size(noisySTFT,2) - numSegments + 1);index = 1:size(noisySTFT,2) - numSegments + 1 stftSegments(:,:,index) = noisySTFT(:,index:index + numSegments - 1);结束

タ,ゲットと予測子を設定します。両方の変数の最後の次元は,オーディオファイルによって生成された個別の予測子/ターゲットのペアの数に対応します。各予測子は,129 × 8で,各タ,ゲットは129 × 1です。

目标= cleanSTFT;大小(目标)
ans =1×2129 544
predictors = stftSegments;大小(预测)
ans =1×3129 8 544

高大配列を使用した特徴の抽出

プロセスの速度を上げるには,高配列を使用してデータストアのオーディオファイルすべての音声セグメントから特徴シーケンスを抽出します。▪▪▪▪▪ンメモリ配列とは異なり,高▪▪配列は,通常,関数收集を呼び出すまで未評価のままになります。この延期された評価によって,大容量のデ,タセットを高速で処理することができます。收集を使用して出力を最終的に要求するときに,MATLABは,可能であればキューに入っている計算を結合して,データからパスの最小数を取ります。并行计算工具箱™がある場合,ローカルのMATLABセッションまたはローカルの並列プールで高配列を使用することができます。MATLAB®并行服务器™をインストールしている場合は,クラスター上で高配列の計算を実行することもできます。

最初に,デ,タストアを高配列に変換します。

reset(adsTrain) T = tall(adsTrain)
使用“本地”配置文件启动并行池(parpool)…连接到平行池(工人数量:6)。T = M×1高细胞数组{234480×1双}{210288×1双}{282864×1双}{292080×1双}{410736×1双}{303600×1双}{326640×1双}{233328×1双}::::

表示は,(デタストアのファル数に対応する)行数,mはまだわからないことを示します。計算が完了するまでmはプレスホルダです。

高表からタ,ゲットと予測子の振幅STFTを抽出します。このアクションは,新しい高配列変数を作成して,後続の計算で使用します。関数HelperGenerateSpeechDenoisingFeaturesは,STFTのタ,ゲットと予測子の節で既に示した手順を実行します。cellfunコマンドはHelperGenerateSpeechDenoisingFeaturesをデタストアの各オディオファルの内容に適用します。

[targets,predictors] = cellfun(@(x)HelperGenerateSpeechDenoisingFeatures(x,noise,src),T,UniformOutput=false);

收集を使用して,タ,ゲットと予測子を評価します。

[目标,预测器]= gather(目标,预测器);
使用并行池“本地”评估tall表达式:-通过1 / 1:在52秒内完成评估在1分53秒内完成

すべての特徴をゼロ平均および標準偏差1に正規化することをお勧めします。

予測子とタ,ゲットの平均値と標準偏差をそれぞれ計算して,デ,タを正規化するのに使用します。

Predictors = cat(3, Predictors {:});noisyMean = mean(predictors(:));noisyStd = std(predictors(:)));predictors(:) = (predictors(:) - noisyMean)/noisyStd;target = cat(2, Targets {:});cleanMean = mean(目标(:));cleanStd = std(目标(:));targets(:) = (targets(:) - cleanMean)/cleanStd;

予測子とタ,ゲットを深層学習ネットワ,クによって予測される次元に形状変更します。

Predictors =重塑(Predictors,size(Predictors,1),size(Predictors,2),1,size(Predictors,3));目标=重塑(目标,1,1,大小(目标,1),大小(目标,2));

学習中の検証にデタの1%を使用します。検証は,ネットワ,クが学習デ,タを過適合しているシナリオを検出するのに役立,ます。

学習セットと検証セットにデ,タをランダムに分割します。

Inds = randperm(size(predictors,4));L = round(0.99*size(predictors,4));trainPredictors = predictors(:,:,:,inds(1:L));trainTargets = targets(:,:,:,inds(1:L));validatePredictors = predictors(:,:,:,inds(L+1:end));validateTargets = targets(:,:,:,inds(L+1:end));

全結合層での音声ノ@ @ズ除去

最初に全結合層で構成されたノ▪▪ズ除去ネットワ▪▪クに▪▪いて考えます。全結合層の各ニュ,ロンは,前の層からのすべての活性化に接続されます。全結合層は,入力に重み行列を乗算し,バesc escアスベクトルを加算します。重み行列とバイアスベクトルの次元は,層のニューロン数と前の層からの活性化の数によって決定されます。

ネットワ,クの層を定義します。サereplicationズNumFeaturesxNumSegments(この例では129 × 8)のesc escジになるように,入力サesc escズを指定します。2 . 1024。純粋な線形システムであるため,正規化線形ユニット(ReLU)層がある各隠れ全結合層に従います。バッチ正規化層は,出力の平均と標準偏差を正規化します。129 ニューロンをもつ全結合層を追加し、その後回帰層を追加します。

layers = [imageInputLayer([numFeatures,numSegments]) fullyConnectedLayer(1024) batchNormalizationLayer reluLayer fullyConnectedLayer(1024) batchNormalizationLayer reluLayer fullyConnectedLayer(numFeatures) regressionLayer];

次に,ネットワ,クの学習オプションを指定します。ネットワクが学習デタから3個のパスを作るようMaxEpochs3.に設定します。ネットワクが一度に128の学習信号を確認するよう128MiniBatchSizeを設定します。情节“训练进步”として指定し,反復回数の増大に応じた学習の進行状況を示すプロットを生成します。详细的に設定し,プロットで示されるデータに対応する表出力のコマンドラインウィンドウへの表示を無効にします。洗牌“every-epoch”として指定して,各エポックの最初に学習シ,ケンスをシャッフルします。LearnRateSchedule“分段”に指定して,特定のエポック数(1)が経過するたびに,指定された係数(0.9)によって学習率を減らします。ValidationDataを検証予測子とタ,ゲットに設定します。検証の平均二乗誤差がエポックごとに1回計算されるようにValidationFrequencyを設定します。この例では,適応モ,メント推定(亚当)ソルバ,を使用します。

miniBatchSize = 128;选项= trainingOptions(“亚当”...MaxEpochs = 3,...InitialLearnRate e-5 = 1,...MiniBatchSize = MiniBatchSize,...洗牌=“every-epoch”...情节=“训练进步”...Verbose = false,...ValidationFrequency =地板(大小(trainPredictors 4) / miniBatchSize),...LearnRateSchedule =“分段”...LearnRateDropFactor = 0.9,...LearnRateDropPeriod = 1,...ValidationData = {validatePredictors, validateTargets});

trainNetworkを使用し,指定した学習オプションと層のア,キテクチャでネットワ,クに学習させます。学習セットが大きいため,学習プロセスには数分かかる場合があります。ネットワークにゼロから学習させる代わりに,事前学習済みのネットワークをダウンロードして読み込む場合は,downloadPretrainedSystem真正的に設定します。

downloadPretrainedSystem =如果downloadPretrainedSystem downloadFolder = matlab.internal.examples.download万博1manbetxSupportFile(“音频”“SpeechDenoising.zip”);dataFolder = tempdir;unzip(下载文件夹,数据文件夹)netFolder = fullfile(数据文件夹,数据文件夹)“SpeechDenoising”);s = load(fullfile(netFolder)“denoisenet.mat”));denoiseNetFullyConnected = s.denoiseNetFullyConnected;cleanMean = s.cleanMean;cleanStd = s.cleanStd;noisyMean = s.noisyMean;noisyStd = s.noisyStd;其他的denoiseNetFullyConnected = trainNetwork(trainPredictors,trainTargets,layers,options);结束

ネットワ,クの全結合層の重みの数をカウントします。

numWeights = 0;index = 1: nummel (denoiseNetFullyConnected.Layers)如果isa (denoiseNetFullyConnected.Layers(指数),“nnet.cnn.layer.FullyConnectedLayer”) numWeights = numWeights + nummel (denoiseNetFullyConnected.Layers(index).Weights);结束结束disp ("权重数= "+ numWeights);
权重数= 2237440

畳み込み層での音声ノ@ @ズ除去

全結合層の代わりに畳み込み層を使用するネットワク([3.])にいて考えます。2次元畳み込み層は、入力にスライディング フィルターを適用します。この層では、入力に沿って垂直方向および水平方向にフィルターを移動させ、重みと入力のドット積を計算し、バイアス項を加算することによって、入力を畳み込みます。畳み込み層は、通常、全結合層より少ないパラメーターで構成されます。

16の畳み込み層で構成される,[3.]で説明されている完全畳み込みネットワ,クの層を定義します。最初の15の畳み込み層は,3の層のグルプで5回繰り返されます。それぞれ,フィルタ,幅が9,5,9,フィルタ,数が18,30,8です。最後の畳み込み層は,フィルタ,幅が129,フィルタ,が1です。このネットワークには,畳み込みは一方向のみで(周波数次元に沿って)実行され,時間次元に沿ってフィルター幅は最初の1つを除いてすべての層で1に設定されます。全結合ネットワ,クと同様,畳み込み層の後にReLu層とバッチ正規化層が続きます。

layers =[imageInputLayer([numFeatures,numSegments]) convolution2dLayer([9 8],18,Stride=[1 100],Padding=“相同”) reluLayer repmat(...[convolution2dLayer([5 1],30,Stride=[1 100],Padding= .“相同”) batchNormalizationLayer reluLayer convolution2dLayer([9 1],8,Stride=[1 100],Padding=“相同”) batchNormalizationLayer reluLayer convolution2dLayer([9 1],18,Stride=[1 100],Padding=“相同”) batchNormalizationLayer relullayer],4,1) convolution2dLayer([5 1],30,Stride=[1 100],Padding=“相同”) batchNormalizationLayer reluLayer convolution2dLayer([9 1],8,Stride=[1 100],Padding=“相同”) batchNormalizationLayer reluLayer convolution2dLayer([129 1],1,Stride=[1 100],Padding=“相同”) regressionLayer];

学習オプションは,全結合ネットワ,クのオプションと同じになります。ただし,検証タ,ゲット信号の次元が回帰層で必要な次元と一致するように並べ替えられる点が異なります。

选项= trainingOptions(“亚当”...MaxEpochs = 3,...InitialLearnRate e-5 = 1,...MiniBatchSize = MiniBatchSize,...洗牌=“every-epoch”...情节=“训练进步”...Verbose = false,...ValidationFrequency =地板(大小(trainPredictors 4) / miniBatchSize),...LearnRateSchedule =“分段”...LearnRateDropFactor = 0.9,...LearnRateDropPeriod = 1,...ValidationData={validatePredictors,permute(validateTargets,[3 1 2 4])});

trainNetworkを使用し,指定した学習オプションと層のア,キテクチャでネットワ,クに学習させます。学習セットが大きいため,学習プロセスには数分かかる場合があります。ネットワークにゼロから学習させる代わりに,事前学習済みのネットワークをダウンロードして読み込む場合は,downloadPretrainedSystem真正的に設定します。

downloadPretrainedSystem =如果downloadPretrainedSystem downloadFolder = matlab.internal.examples.download万博1manbetxSupportFile(“音频”“SpeechDenoising.zip”);dataFolder = tempdir;unzip(下载文件夹,数据文件夹)netFolder = fullfile(数据文件夹,数据文件夹)“SpeechDenoising”);s = load(fullfile(netFolder)“denoisenet.mat”));denoiseNetFullyConvolutional = s.denoiseNetFullyConvolutional;cleanMean = s.cleanMean;cleanStd = s.cleanStd;noisyMean = s.noisyMean;noisyStd = s.noisyStd;其他的denoiseNetFullyConvolutional = trainNetwork(trainPredictors,permute(trainTargets,[3 1 2 4]),layers,options);结束

ネットワ,クの全結合層の重みの数をカウントします。

numWeights = 0;index = 1:numel(denoiseNetFullyConvolutional.Layers)如果isa (denoiseNetFullyConvolutional.Layers(指数),“nnet.cnn.layer.Convolution2DLayer”) numWeights = numWeights + nummel (denoiseNetFullyConvolutional.Layers(index).Weights);结束结束disp (卷积层的权重数=+ numWeights);
卷积层中的权重数= 31812

ノ▪▪ズ除去ネットワ▪▪クのテスト

テストデ,タセットを読み取ります。

adsTest = audioDatastore(fullfile(dataset,“测试”), IncludeSubfolders = true);

デタストアからファルの内容を読み取ります。

[cleanAudio,adsTestInfo] = read(adsTest);

オ,ディオの長さがサンプルレ,ト変換の間引き係数の倍数であることを確認してください。

L = floor(numel(cleanAudio)/decimationFactor);cleanAudio = cleanAudio(1:decimationFactor*L);

オ,ディオ信号を8 kHzに変換します。

cleanAudio = src(cleanAudio);重置(src)

このテスト段階で,学習段階で使用されなかった洗浄機のノ。

噪音= audieread (“洗衣机- 16 - 8 mono - 200 - secs.mp3”);

洗浄機のノ▪▪ズベクトルからランダムなノ▪▪ズのセグメントを作成します。

randind = randi(数字(噪音)-数字(cleanAudio), [1 1]);noisessegment = noise(randind:randind + numel(cleanAudio) - 1);

信噪比が0 dBとなるように音声信号にノaaplズを付加します。

noisePower = sum(noisessegment .^2);cleanPower = sum(cleanAudio.^2);noiseSegment = noiseSegment.*sqrt(cleanPower/noisePower);noisyAudio = cleanAudio + noisessegment;

stftを使用して,ノズを含むオディオ信号から振幅STFTベクトルを生成します。

noisySTFT = stft(noisyAudio,Window=win,OverlapLength=overlap,fftLength=fftLength);noisyPhase = angle(noisySTFT(numFeatures-1:end,:));noisySTFT = abs(noisySTFT(numFeatures-1:end,:));

ノ▪▪ズを含むSTFTから8▪▪のセグメントの学習予測子信号を生成します。連続する予測子間のオ,バ,ラップは,7セグメントです。

noisySTFT = [noisySTFT(:,1:numSegments-1) noisySTFT];predictors = 0 (numFeatures,numSegments,size(noisySTFT,2) - numSegments + 1);index = 1:(size(noisySTFT,2) - numSegments + 1) predictors(:,:,index) = noisySTFT(:,index:index + numSegments - 1);结束

学習段階で計算された平均値と標準偏差によって予測子を正規化します。

predictors(:) = (predictors(:) - noisyMean)/noisyStd;

2 .の学習済みネットワ,クで预测を使用してノesc escズ除去された振幅STFTを計算します。

predictors =重塑(predictors,[numFeatures,numSegments,1,size(predictors,3)]);STFTFullyConnected = predict(denoiseNetFullyConnected,predictors);STFTFullyConvolutional = predict(denoiseNetFullyConvolutional,predictors);

学習段階で使用された平均値と標準偏差によって出力をスケ,リングします。

STFTFullyConnected(:) = cleanStd*STFTFullyConnected(:) + cleanMean;STFTFullyConvolutional(:) = cleanStd*STFTFullyConvolutional(:) + cleanMean;

片側STFTを中央揃えSTFTに変換します。

STFTFullyConnected = (STFTFullyConnected.').*exp(1j*noisyPhase);STFTFullyConnected = [conj(STFTFullyConnected(end-1:-1:2,:));STFTFullyConnected];STFTFullyConvolutional = squeeze(STFTFullyConvolutional).*exp(1j*noisyPhase);STFTFullyConvolutional = [conj(STFTFullyConvolutional(end-1:-1:2,:));STFTFullyConvolutional];

ノ@ @ズ除去後の音声信号を計算します。istftは逆STFTを実行します。ノ▪▪ズを含むSTFTベクトルの位相を使用して,時間領域信号を再構成します。

denoisedAudioFullyConnected = istft(STFTFullyConnected,Window=win,OverlapLength=overlap,fftLength=fftLength,共轭对称=true);denoisedAudioFullyConvolutional = istft(STFTFullyConvolutional,Window=win,OverlapLength=overlap,fftLength=fftLength,共轭对称=true);

クリーンなオーディオ信号,ノイズを含むオーディオ信号,およびノイズ除去後のオーディオ信号をプロットします。

t = (1/fs)*(0:numel(denoisedAudioFullyConnected)-1);图(3)tiledlayout(4,1) nexttile plot(t,cleanAudio(1:numel(denoisedAudioFullyConnected))“干净的演讲》网格)nexttile plot(t,noisyAudio(1:numel(降噪音频)))《吵闹的演讲》网格)nexttile plot(t,denoisedAudioFullyConnected)去噪语音(全连接层)网格)nexttile plot(t,denoisedAudioFullyConvolutional)去噪语音(卷积层)网格)包含(“时间(s)”

クリーンなスペクトログラム,ノイズを含むスペクトログラム,およびノイズ除去後のスペクトログラムをプロットします。

H =图(4);tiledlayout(4,1) nexttile频谱图(cleanAudio,win,overlap,fftLength,fs);标题(“干净的演讲》网格)nexttile光谱图(noisyAudio赢,重叠,fftLength, fs);标题(《吵闹的演讲》网格)nexttile光谱图(denoisedAudioFullyConnected赢,重叠,fftLength, fs);标题(去噪语音(全连接层)网格)nexttile光谱图(denoisedAudioFullyConvolutional赢,重叠,fftLength, fs);标题(去噪语音(卷积层)网格)P = get(h,“位置”);集(h,“位置”,[p(1) 65 p(3) 800]);

ノ@ @ズを含む音声を再生します。

声音(noisyAudio fs)

全結合層をもネットワクからノズ除去後の音声を再生します。

声音(denoisedAudioFullyConnected fs)

畳み込み層をもネットワクからノズ除去後の音声を再生します。

声音(denoisedAudioFullyConvolutional fs)

クリ,ンな音声を再生します。

声音(cleanAudio fs)

testDenoisingNetsを呼び出すことによってデタストアのファルをさらにテストできます。時間領域と周波数領域を作成する関数は,上記で強調表示したものをプロットします。さらに,クリーンなオーディオ信号,ノイズを含むオーディオ信号,およびノイズ除去後のオーディオ信号を返します。

[cleanAudio,noisyAudio,denoisedAudioFullyConnected,denoisedAudioFullyConvolutional] = testDenoisingNets(adsTest,denoiseNetFullyConnected,denoiseNetFullyConvolutional,noisyMean,noisyStd,cleanMean,cleanStd);

リアルタ▪▪ムアプリケ▪▪ション

前の節の手順は,预测にノ@ @ズを含む信号の全体のスペクトルを渡します。これは,低レ@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @

ストリーミング用リアルタイムバージョンのノイズ除去ネットワークをシミュレートする方法の例については,speechDenoisingRealtimeAppを実行します。アプリは全結合層をもつネットワークを使用します。オーディオ フレームの長さは、STFT ホップ サイズ (0.25 * 256 = 64 サンプル) と同じです。

speechDenoisingRealtimeAppはシミュレーションを対話的に実行するように設計されたUI(ユーザーインターフェイス)を起動します。UIではパラメ,タ,を調整でき,結果はシミュレ,ションにすぐに反映されます。さらに,ノイズ除去された出力で操作するノイズゲートを有効または無効にして,ノイズをさらに減らしたり,ノイズゲートのアタック時間,リリース時間,しきい値の微調整を行うことができます。ノイズを含むオーディオ,クリーンなオーディオまたはノイズ除去後のオーディオをUIによって再生することができます。

スコープは,クリーンな信号,ノイズを含む信号およびノイズ除去後の信号とノイズゲートの増幅率をプロットします。

参考文献

[1]https://voice.mozilla.org/en

[2]“基于深度学习的语音去噪实验”,刘丁,Paris Smaragdis, Minje Kim, INTERSPEECH, 2014。

[3]“一种用于语音增强的全卷积神经网络”,Se Rim Park, Jin Won Lee, INTERSPEECH, 2017。