オーディオプログラミングが、うちは音。

E

ezyneab

Guest
私のプログラム

#は<math.h>を含む
#は<stdio.h>含まれて
#は<stdlib.h>の含まれて
#が含まれます"dsk6713_aic23.h"/ /コーデックDSKをサポートファイル
uint32ののfs = DSK6713_AIC23_FREQ_8KHZ / /サンプリングレートを設定する
16 BIT_PER_SAMPLE#を定義する
int型input_dec;

int型のメートル= 5はn = 31、kは= 16、トン= 3、dは= 7;
int型の長さ= 31;
int型pの[6]; / /既約多項式
int型alpha_toは]を[32]、およびg [16 [index_of 32];
intは]をrecd [31、データ] [16]、bbの[16;
int型numerr、errposはdecerror [32] = 0;

typedefはリスト構¥造体

短いデータ;

次の構¥造体のリスト*は、以前、*;
)ノード;

ノード*第1 = NULLを。
ノード*戻る= NULLを。
Decimalに//===========は、バイナリ==================
ボイドde2bi(char型ビン[BIT_PER_SAMPLE]、int型の12月)

int型jが、temp1、temp2 = 12月;

BIT_PER_SAMPLE <の(jは= 0; jは、jは )

temp1 =(int)を床((float)はtemp2 / 2);
binに[j]と= temp2 - temp1 * 2;
temp2 = temp1;


戻り値;


多項式の次数5プリミティブ/ /
ボイドread_p()

登録します。int i;
もしp [0] = pの[2] = pの[5] = 1; / / xは^ 5 x ^ 2の 1
もしp [1] = pの[3] = pの[4] = 0;
)/ /(フィジケラを生成する2 ** m)の] [0] ..もしp [mのpのからの既約多項式p(X)は
/ /ルックアップテーブルは:インデックス>多項式の形alpha_to []私が含まれているjが=α**
/ /多項式の形- >インデックスのフォームindex_of [jは=アルファ** i]は=私のアルファ= 2
原始的な要素のフィジケラ/ /(2 ** m)の
ボイドgenerate_gf()

登録すると、int型私はマスク;
マスク= 1;
alpha_to [メートル] = 0;
0(一=;私は<mのは、i )

alpha_to は=マスク;
index_of [alpha_to が] =私;
] iの場合した(p [!= 0)
alpha_to [m]の^は=マスク;
マスク<<= 1;

index_of [alpha_to [メートル]]は=メートル。
マスク>> = 1;
1一= mの(;私<n;私 )

私は[場合(alpha_to - 1]> =マスク)
alpha_to は= alpha_to [m]の^((alpha_to [のi - 1] ^マスク)<<1);

alpha_to は= alpha_toの[i - 1] <<1;
index_of [alpha_to が] =私;

index_of [0] =- 1;
)のBCH符号の長さは多項式計算ジェネレータ/ / = 31、冗長性= 15
ボイドgen_poly()

kaux登録int型の二は、JJの、北韓;
int型のテスト、補助、nocycles、根、noterms、rdncy;
int型のサイクルが]を[16] [6、サイズは] [16]、分[16、ゼロは[編集] 16;
/ /生成サイクルは31日に設定モジュロ
サイクルは0 [0] [0] =;サイズ[0] = 1;
サイクルは[1] [0] = 1;サイズ[1] = 1;
ジュンジエ、JJ = 1; / /サイクルセットインデックス
行う

/ /生成ジュンジエ、JJ番目のサイクル設定
二= 0;
行う

二 ;
サイクルは[ジュンジエ、JJ] [二] =(サイクル[ジュンジエ、JJ] [2 - 1] * 2)は%n;
サイズ[ジュンジエ、JJ] ;
オー=(サイクル[ジュンジエ、JJ] [2] * 2)は%n;

補助しながら(!=サイクル[ジュンジエ、JJ] [0]);
/ /次のサイクルの代表¥を設定する
llの= 0;
行う

llの ;
テスト= 0;
))&&(!の(二= 1;((二<= JJのテスト);二 )
/ /調べる前のサイクルは、設定
)の(kaux = 0;((kaux <サイズ[二])&&(!テスト); kaux )
場合)(llの==サイクル[二] [kaux]
テスト= 1;

-中((テスト)&&(北韓<(nは1)));
(もし!(テスト))

ジュンジエ、JJ ; / /次のサイクルのインデックスを設定する
サイクル[ジュンジエ、JJ] [0] = llの;
サイズは、[ジュンジエ、JJ] = 1;


(中北韓<の(n - 1));
nocycles / /番号のサイクルジュンジエ、JJ = nを設定するモジュロ
/ /検索...の根1、2、- 1セットサイクルD
kaux = 0;
rdncy = 0;
nocycles =の(二= 1;二<;二 )

分[kaux] = 0;
(のジュンジエ、JJ = 0;ジュンジエ、JJ <サイズが[二];ジュンジエ、JJ )
1(のルート=;ルート<dは、ルート )
場合)(ルート==サイクル[二] [ジュンジエ、JJ]
分[kaux] =二;
場合)(分[kaux]

rdncy は=サイズ[分[kaux]]を。
kaux ;


noterms = kaux;
kaux = 1;
0(二=;二<noterms;二 )
(のジュンジエ、JJ = 0;ジュンジエ、JJ <サイズは[分[2]];ジュンジエ、JJ )

ゼロのサイクルkaux]を= [は[分[2] [ジュンジエ、JJ];
kaux ;

/ /計算の生成多項式
]] gの[0] = alpha_to [0 [1;
[gの1] = 1; / /【G(x)は=(Xの のゼロは、[1])は、当初
2(二=;二<= rdncy;二 )

グラム[二] = 1;
1対(ジュンジエ、JJ =二;ジュンジエ、JJ> 0;ジュンジエ、JJ - )
[場合(グラム[ジュンジエ、JJ!= 0)
[gの[ジュンジエ、JJ n]は、= gが[ジュンジエ、JJ -)] [1] ^をalpha_toを%の[(index_of [がg [ジュンジエ、JJ]] のゼロを[二;

グラム[ジュンジエ、JJ] =グラム[ジュンジエ、JJ - 1];
] n個のgの[0] = alpha_to [を(%のindex_of [はg [0]] ゼロ[2]);


//=============== Encode_bch ==============================
/ /計算冗長ビットをbbは[]は、符号は)はc(X)は=データ(X)は* Xの**(nkは) bbの(Xの
ボイドencode_bchは(int型のデータが)[16]では、int型の16 bbは[編集]

登録jはint型私は、;
フィードバックを登録int型。
0(一=;私は<長さkは、私 )
bbのは= 0;
1(i = kと-;私は> = 0;私は- )

フィードバック=データの^ bbの[長さのK - 1];
フィードバックするif(!= 0)

(のjは=長さからk - 1; jは> 0; jは- )
[場合(グラム[jは!= 0)
bbの[j]と= bbの[にj - 1] ^フィードバック。

bbの[j]と= bbの[にj - 1];
bbは[0]は=はg [0]&&feedback;



(のjは=長さからk - 1; jは> 0; jは- )
bbの[j]と= bbの[にj - 1];
bbの[0] = 0;
);
);

//============== decode_bch ================
ボイドdecode_bch()

登録qはint型私は、jは、;
int型のELPは[3は]だ、[5]、s3を。
int型のカウント= 0、syn_error = 0;
int型管理ライン[3]、[regの[3;
int型の補助;
/ /最初のフォーム症候群
1の(i =;私は<= 4;私 )

は= 0;
長さ<の(jは= 0; jは、jは )
[場合(recd [jは!= 0)
]ですは^を= alpha_to [(一* j)は%n個の;
] iの場合(の[!= 0)
ている必要がし、終了しますプログラムをここに検出syn_errorは= 1; / /ゼロに設定フラグをする場合、非症候群注は、エラーの場合のみ:...
]だが]は、i [= index_of【Sを、/ /フォームのインデックスから変換症候群を多項式フォーム
);
場合(syn_error)は/ /がある場合で、エラーを修正しようとすると

[場合は1(秒[!=- 1)

s3の=(の[1] * 3)は%n;
エラーS3の)/ /はされたが、1つの場合(==]の[3?

recd [はだ[1]] ^ = 1; / /はい:正しいこと

他/ /エラーを想定2が発生し、シグマの係数の解決(x)は、エラーのロケータpolynomail

] 3場合(の[!=- 1)
オー= alpha_to [s3の] ^ alpha_to [は]だ[3];

のAUX = alpha_to [s3の]を;
ELPの[0] = 0;
ELPのは、n [1] =%の(の[2] - index_of [オー] n)の;
ELPのは、n [2] = 1] - index_of [オー] n)は%の(sを[;
1の(i =;私は<= 2;私 )/ /多項式の場所エラーのルーツを見つける
レッグは=は、ELPのの;
カウント= 0;
1の(i =;私は<= nとは、i )/ /チアン検索

はq = 1;
(のはj = 1; jは<= 2; jは )
[場合(レッグ[jは!=- 1)

レッグ[j]と=(n%のレッグ[をj] j)は;
qを^ = alpha_to [レッグ[j]を];

インデックス番号するif(!q)を/ /ストアエラーの場所

管理ライン[カウント] =私は%n;
を数える ;


ない場合(カウント== 2)/ /。度のELPの=根はそれゆえ2エラー
0(一=;私は<2;私 )
1 recd [管理ラインの] ^ =;




16ビット10進バイナリ//=========== ==============
int型bi2de(char型ビン[BIT_PER_SAMPLE])

int型のオペアンプ= 0;
long int型power_vector [BIT_PER_SAMPLE];
int型jが;

int型私は、c = 0;
int型のフラグ= 0;

power_vectorは[0] = 1;
//==================== 1の補数==================

binにする場合([15] == 1)
(フラグ= 1;
15の(i =;私は> = 0;私は- )

場合)(ビンを== 0

binには= 1;



binには= 0;

/ / printf関数("%d"は、ビンの);


//================= 2の補数=======================
0(一=;私<16;私 )

場合)(2 == 0

場合)(ビンを== 0

binには= 1;



binには= 0;
c = 1の;




)もし私が(ウ== 1&&ビン[] == 0

binには= 1;
c = 0の。

他の場合は(ウ== 1&&ビンを== 1)

binには= 0;
c = 1の;


/ / printf関数("%d"は、ビンの);

//==============================


BIT_PER_SAMPLE <の(jは= 1; jは、jは )

power_vectorは、[j]と= power_vector [にj - 1] * 2;


//=================にビットを変換する10進数の数字===============BIT_PER_SAMPLE <の(jは= 0; jは、jは )

オペアンプ = power_vector [j]と*ビン[j]とを;

場合)(フラグ== 1

オペアンプ=(-2 *のオペアンプ) オペアンプ。
フラグ= 0;

リターン(オペアンプ);
)//====================== main_code ========================= =
無効のmain()

文字temp_binary [BIT_PER_SAMPLE] temp_decimal [BIT_PER_SAMPLE];

int型* binary_buffer;

int型* out_buffer;

int型jは、私= 0;

int型のカウント= 0、count_bit;

char型温度[BIT_PER_SAMPLE];

int型のC = 0;

int型はz = 0;

read_pは(); / / gの多項式を読むジェネレータ(x)は
generate_gfは(); /)mのガロア体GF(2 ** /生成
gen_poly();計算生成多項式のBCH符号/ /コード

comm_poll(); / / initのDSKを、McBSPコーデック、
DSK6713_LED_initは(); / / BSLのからLED initの
DSK6713_DIP_init(); initはディップスイッチからBSLの/ /

短い声。
ノード* currptr;

)中(DSK6713_DIP_get(3)== 0
(C の。
カウント ; / /カウントデータ

DSK6713_LED_onは(3); / / 3#向ける上のLED

input_sampleの();//ストアの入力データにバッファ=声
のprintf("%d個の¥¥ n"の、音声);

/ / scanf関数("%d個"、&声);

場合)(戻る== NULLの

currptr =(ノード*)はmalloc(sizeof演算(ノード));
バック= currptr;
=最初のcurrptr;
currptr ->データは=声;
currptr ->以前= NULLを。
currptr ->次= NULLを。



currptr =(ノード*)はmalloc(sizeof演算(ノード));
バック>次= currptr;
currptrバック>前=;
バック= currptr;
currptr ->データは=声;
バック>次= NULLを。



DSK6713_LED_off(3);

count_bit =カウント* BIT_PER_SAMPLE / /カウントビット
/ / printf関数("ビットのすべて=%d個の¥¥ n"の、count_bit);

//===========================================

binary_bufferは=(int型*)malloc関数(count_bit *はsizeof(int型)); / /配列をbinary_buffer動的

//===========================================

最初の中(!= NULL)の/ /中に最初のデータ

input_dec = 1>のデータ;
de2bi(input_dec temp_binary); / /後藤はfunc de2bi//================= define_binary_16bit =====================
15(jは=; jは> = 0; jは- )/ /ビット16

binary_buffer は= temp_binary [j]とは、/ /配列動的にtranferのtemp_binary
/ / printf関数("%d"は、binary_buffer を);
私は の。
)=最初の1>次のページ;

する* /(
 

Welcome to EDABoard.com

Sponsor

Back
Top