[音声コーディング] matlabADPCMコーディングおよびデコードに基づく[Matlabソースコード553期間を含む]

1.はじめに

1 Adpcmコーディングの原則
ここに画像の説明を挿入します
コーディング手順:

入力pcmデータと予測pcmデータ(最初の最後のpcmデータ)の間の差分差分を
計算します。差分量子化器を使用して(インデックス(最初のエンコードインデックスは0)で)デルタを計算し、差分を介してステップを見つけます。およびステップデルタを検索)。デルタはエンコードされたデータです
。vpdiffは逆量子化器によって計算されます(vpdiffは計算されたデルタとステップによって計算されます)。
新しい予測されたvalpredが計算されます。つまり、最後に予測されたvalpred + vpdiff;
予測子(正規化) 、次の計算のために、現在の入力pcm入力の予測pcm値を計算します。
量子化ステップ調整(デルタルックアップテーブルとインデックスを使用して、新しいインデックス値を計算します)。次の計算では、
2つのadpcmデコード原理
ここに画像の説明を挿入します
デコードステップ(実際、デコード原理はエンコードの3番目から6番目のステップです):

逆量子化器を介してvpdiffを見つけます(格納されたデルタとインデックスから、ステップを見つけ、vpdiffを計算します);
新しい予測されたvalpred、つまり最後に予測されたvalpred + vpdiffを見つけます;
予測子(正規化された)を介して、予測されたpcmを見つけます現在の入力の値pcminputは、次の計算に使用されます。予測されたpcm値はデコードされたデータであり、
量子化ステップが調整されます(新しいインデックス値は、テーブルを検索し、デルタを介してインデックスを作成することによって計算されます)。次の計算のために;
注記の説明
エンコードとデコードの原理により、実際には、最初のエンコードがすでにデコードされていることがわかります。つまり、予測されたpcmです。
エンコードとデコード後の出力データが量子化されているためです。計算式に従って、delta = diff * 4 / step; vpdiff =(delta + 0.5)* step / 4;これらはすべて整数演算であるため、次のように導出できます。pcmをエンコードしてからデコードすることによって生成される予測pcmデータpcmデータが予測される場合のデータ再エンコードによって取得されたデータは、最初のエンコードによって取得されたデータと同じです。したがって、1回のエンコードでpcmデータが失われた後は、何度デコードしてエンコードしてもデータは同じであり、音質が失われることはありません。つまり、最初のエンコード後、データが何度エンコードおよびデコードされても、ロスレス出力になります。

3 ADPCMデータストレージ形式
この部分は、詳細部分に属するadpcmデータストレージの説明です。この部分の詳細が正しくないため、デコード時に多くのコードにノイズが発生するため、注意深く読む必要があります。

3.1 adpcmデータブロックの
概要Adpcmデータは1つのブロックと1つのブロックに格納され、ブロックはブロックヘッダー(ブロックヘッダー)とデータの両方で構成されます。ブロックヘッダーは構造体であり、monoでの定義は次のとおりです。

Typedef struct
{
    
    
short  sample0;    //block中第一个采样值(未压缩)
BYTE  index;     //上一个block最后一个index,第一个block的index=0;
BYTE  reserved;   //尚未使用
}MonoBlockHeader;

デュアルチャネルの場合、そのブロックヘッダーには、次のように定義されている2つのMonoBlockHeaderが含まれている必要があります。

typedaf struct
{
    
    
MonoBlockHeader leftbher;
MonoBlockHeader rightbher;
}StereoBlockHeader;

解凍時には、左右のチャネルが別々に処理されるため、MonoBlockHeaderが2つ必要です。
ブロックヘッダー情報を使用すると、ブロックの以前のデータを知らなくても、このブロックの圧縮データを簡単に抽出できます。したがって、adpcmデコードはこのブロックにのみ関連し、他のブロックとは関係がなく、ブロックデータを個別にデコードすることしかできません。
ブロックのサイズは固定されており、カスタマイズできます。各ブロックに含まれるサンプル数nsamplesは、次のように計算されます。

//
#define BLKSIZE 1024
block = BLKSIZE * channels;
//block = BLKSIZE;//ffmpeg
nsamples = (block  - 4 * channels) * 8 / (4 * channels) + 1;

たとえば、オーディションソフトウェアは上記を使用し、シングルチャネルブロックは1024バイト、2041サンプルであり、デュアルチャネルブロックは2048であり、これにも2041サンプルが含まれています。
また、ffmpegはblock = 1024bytesを使用します。つまり、シングルチャネルとダブルチャネルの両方が1024バイトであり、シングルチャネルとダブルチャネルのサンプル数は、それぞれ2041と1017の式で計算できます。

3.2シングルチャネルpcmフォーマット:
ここに画像の説明を挿入します
3.3デュアルチャネルpcmフォーマット:
ここに画像の説明を挿入します
3.4エンコーディングおよびデコーディングコードの実装
データが1ブロックに十分でない場合、2チャネルの処理と処理方法に特別な注意を払う必要があります。
コードにはエンコーディングが含まれます。エンコードとデコードを実装するテストケースのデコード。交換して
完全なコードダウンロードアドレスを学ぶことを歓迎します(この記事では、adpcmのエンコードとデコードについてのみ詳しく説明します。wavファイルのエンコードとデコードを正しくするには、完全なコードをダウンロードする必要があります。
完全なコードは0x0011 / * IntelのDVI ADPCM * /エンコードおよびデコードコードの実装。シングルチャネルとダブルチャネルを含む処理と最終データは、ブロック全体の処理ではありません):

第二に、ソースコード

clear all;
clc
close all;
[x,fs,numbits]= wavread('C6_3_y.wav'); 

sign_bit=2;                                     %两位ADPCM算法
ss=adpcm_encoder(x,sign_bit);
yy=adpcm_decoder(ss,sign_bit)';

nq=sum((x-yy).*(x-yy))/length(x);
sq=mean(yy.^2);
snr=(sq/nq);
t=(1:length(x))/fs;
subplot(211)
plot(t,x/max(abs(x)))
axis tight
title('(a)编码前语音')
xlabel('时间/s')
ylabel('幅度')
subplot(212)
plot(t,yy/max(abs(yy)))
axis tight
% APDCM解码函数
function y=adpcm_decoder(code,sign_bit)
len=length(code);
y = zeros(1,len);
ss2 = zeros(1,len); 
ss2(1) = 1; 

currentIndex =1; 
index = [-1 4]; 
startval = 1; 
endval = 127;
base = exp( log(2)/8 ); 
% 近似步长 
const = startval/base; 
numSteps = round( log(endval/const) / log(base) ); 
n = 1:numSteps; 
base = exp( log(endval/startval) / (numSteps-1) ); 
const = startval/base; 
table2 = round( const*base.^n ); 
for n = 2:len 
% 计算量化距离 
    neg = code(n) >= sign_bit; 
    if (neg) 
        temp = code(n) - sign_bit; 
    else 
        temp = code(n); 
    end 
    temp2 = (temp+.5)*ss2(n-1); 
    if (neg) 
        temp2 = -temp2; 
    end 

3、実行中の結果

ここに画像の説明を挿入します

四、備考

完全なコードまたは書き込み追加QQ1564658423過去のレビュー
>>>>>>
[機能の抽出] matlabウェーブレット変換に基づくオーディオ透かしの埋め込みと抽出[Matlabソースコード053を含む]
[音声処理] matlabGUIに基づく音声信号処理[Matlabを含むソースコードの問題290]
[音声取得] matlabGUI音声信号収集に基づく[Matlabソースコード291を含む]
[音声変調] matlabGUI音声振幅変調に基づく[Matlabソースコード292を含む]
[音声合成] matlabGUI音声に基づく合成[Matlabソースコードの問題293を含む]
[音声暗号化] matlabGUI音声信号の暗号化と復号化に基づく[Matlabソースコード295を含む]
[音声拡張] Matlabウェーブレット変換ベースの音声拡張[Matlabソースコード296]
[音声認識] matlabGUI音声ベース周波数認識に基づく[Matlabソースコード294を含む]
[音声拡張] Matlab GUIWienerフィルタリングベースの音声拡張[Matlabソースコード298を含む]
[音声処理] matlabGUI音声信号処理に基づく[Matlabソースコード299を含む]
[信号処理] Matlab音声信号スペクトルアナライザーに基づく[Matlabソースコード325を含む]
[変調信号] matlabGUIに基づくデジタル変調信号シミュレーション[Matlabソースコード336を含む]
[感情認識] matlabBPニューラルに基づく音声感情認識ネットワーク[Matlabソースコード349の​​問題を含む]
[音声ステガノグラフィー] Matlabウェーブレット変換に基づく定量化されたオーディオデジタルウォーターマーキング[Matlabソースコードの問題351を含む]
[特徴抽出] matlabオーディオ透かしの埋め込みと抽出に基づく[Matlabソースコード350期間を含む]
[音声ノイズ除去] matlabローパスと適応フィルターノイズ除去に基づく[Matlabソースコード352期間を含む]
[感情認識] matlabGUI音声に基づく感情分類認識[Matlabソースコード354期間を含む]
[基本処理] Matlabベースの音声信号前処理[Matlabソースコード364期間を含む]
[音声認識] Matlabフーリエ変換0-9デジタル音声認識[Matlabソースコード384期間を含む]
[音声認識] 0-9 matlab GUIDTWに基づくデジタル音声認識[Matlabソースコード385を含む]
[音声再生] Matlab GUIMP3設計[Matlabソースコード425を含む]
[音声処理]人間の耳のマスキング効果に基づく音声強調アルゴリズムノイズ比の計算[Matlabソースコード428を含む]
[音声ノイズ除去] matlabスペクトル減算ノイズ除去に基づく[Matlabソースコード429を含む]
[音声認識] matlabの運動量項目に基づくBPニューラルネットワーク音声認識[Matlabソースコード430を含む]
[音声ステガノグラフィ] matlabLSB音声隠蔽に基づく[Matlabソースコード431を含む]
[音声認識] matlabの男性と女性の音声認識に基づく[Matlabソースコード452を含む]
[音声処理] matlab音声ノイズの追加とノイズリダクション処理に基づく[MatlabソースコードIssue473を含む]
[音声ノイズ除去] matlab最小二乗(LMS)適応フィルターに基づく[ Matlabソースコード481を含む]
[音声強調] matlabスペクトル減算、最小平均二乗、およびWienerフィルター音声強調に基づく[Matlabを含むソースコード482期間】
[通信] matlab GUIデジタル周波数帯域(ASK、PSK、QAM)変調シミュレーションに
基づく[ Matlabソースコード483を含む] [信号処理] matlabECG信号処理に基づく[Matlabソースコード484を含む]
[音声ブロードキャスト] matlabに基づく音声ブロードキャスト[Matlabソースコード507を含む]
[信号処理] EEG信号特徴抽出に基づくMatlabウェーブレット変換[Matlabソースコード511を含む]
[音声処理] matlab GUIデュアルトーンマルチ周波数(DTMF)信号検出に基づく[Matlabを含むソースコード512】
【音声ステガノグラフィ】音声信号のデジタル透かしを実現するmatlabLSBに基づく【Matlabソースコード513を含む】
【音声強調】matlab整合フィルターに基づく音声認識【Matlabソースコード514を含む】
【音声処理】ベースmatlabGUI音声周波数ドメインスペクトログラム分析[Matlabソースコード527を含む]
[音声ノイズ除去] matlab LMSに基づく、RLSアルゴリズム音声ノイズ除去[Matlabソースコード528を含む]
[音声ノイズ除去] matlabLMSスペクトル減算音声ノイズ除去[Matlabを含むソースコードの問題529]
[音声ノイズ除去] matlabソフトしきい値、ハードしきい値、妥協しきい値に基づく音声ノイズ除去[Matlabソースコード530を含む]
[音声認識] matlab特定の人の音声認識識別に基づく[Matlabソースコード534を含む]
[音声[ノイズ除去] matlabウェーブレットソフトしきい値音声ノイズリダクションに
基づく[ Matlabソースコード531を含む] [音声ノイズ除去] matlabウェーブレットハードしきい値音声ノイズリダクションに基づく[ Matlabソースコード532を含む]
[音声認識] matlabMFCCおよびSVM固有のヒューマンに基づく性別認識[Matlabソースコード533を含む]
[音声認識] MFCCに基づくGMM音声認識[Matlabソースコード535を含む]
[音声認識] matlabVQに基づく特定の人の孤立した単語音声認識[Matlabソースコード536を含む]
[音声認識] matlabGUIに基づく音声認識[含むMatlab]ソースコードの問題537]
[取得と読み取り] matlab音声収集と読み取りに基づく[Matlabソースコード538を含む]
[音声編集] matlab音声編集に基づく[Matlabソースコード539を含む]
[音声モデル] matlab音声に基づく信号数学モデル[Matlabソースコード540を含む]
[音声の健全性] matlabの音声強度とラウドネスに基づく[Matlabソースコード541を含む]
[感情認識] matlabK最近傍分類アルゴリズムに基づく音声感情認識[Matlabソースコード542を含む]
[感情認識] matlabサポートベクトルマシン(SVM)に基づく音声感情認識[Matlabソースコード543を含む]
[感情認識]ニューラルネットワークベースの音声感情認識[Matlabソースコード544を含む]
[音源定位]音源定位ベースmatlabのさまざまな空間スペクトル推定アルゴリズムの比較[Matlabソースコード545を含む]
[音源定位]さまざまな信号対雑音比で信号を受信するmatlabマイクに基づく[Matlabソースコード546を含む]
[音源定位]部屋のインパルス応答に基づくmatlabシングル音源およびデュアルマイク[Matlabソースコード547を含む]
[音源定位] Matlab一般化相互相関音源位置[Matlabソースコード548を含む]
[音源位置] Matlabアレイマニホールドマトリックスベースの信号表示[ Matlabソースコード549]
[機能抽出] matlabフォーマント推定に基づく[Matlabソースコード550期間を含む]
[特徴抽出] matlabピッチ周期推定に基づく[Matlabソースコード551を含む]
[特徴抽出] matlab音声エンドポイント検出に基づく[Matlabソースコード552を含む]

おすすめ

転載: blog.csdn.net/TIQCmatlab/article/details/114977184