Аудио программирования, но звук не из.

E

ezyneab

Guest
Моя программа

# включить <math.h>
# включить <stdio.h>
# включить <stdlib.h>
# INCLUDE "dsk6713_aic23.h" / / кодек-ДСК поддержка файлов
Uint32 FS = DSK6713_AIC23_FREQ_8KHZ / / установить частоту дискретизации
# DEFINE BIT_PER_SAMPLE 16
Int input_dec;

Int M = 5, N = 31, К = 16, T = 3, D = 7;
Int длина = 31;
Int P [6] / / неприводимые полиномиальной
Int alpha_to [32], index_of [32], G [16];
Int recd [31], данные [16], Б. [16];
Int numerr, errpos [32], decerror = 0;

ЬурейеЕ структуру список
(
краткое данных;

структура перечня * Предыдущее * Next;
) узла;

Node * First = NULL;
Node * Back = NULL;
//=========== Десятичных чисел в двоичной ==================
Пустота de2bi (Char бен [BIT_PER_SAMPLE], Int DEC)
(
Int J, temp1, temp2 = Dec;

для (J = 0; J <BIT_PER_SAMPLE; J )
(
temp1 = (INT) этаж ((FLOAT) temp2 / 2);
Бен [J] = temp2-temp1 * 2;
temp2 = temp1;

)
возвращение;
)//Primitive polynomial of degree 5 Пустота read_p ()
(
Регистрация Int I;
P [0] = P [2] = P [5] = 1; / / X ^ 5 X ^ 2 1
P [1] = P [3] = P [4] = 0;
)/ / Генерация GF (2 ** м) от неприводимых полиномов P (X) в р [0] .. P [M]
/ / Таблиц поиска: Главная-> alpha_to полиномиального вида [] содержит J = альфа ** I;
/ / Полиномиальной формы -> Индекс формы index_of [J = альфа ** I] = I альфа = 2
/ / Примитивный элемент GF (2 ** M)
Пустота generate_gf ()
(
Регистрация Int I, маски;
Маска = 1;
alpha_to [м] = 0;
для (i = 0; i <M; I )
(
alpha_to = маску;
index_of [alpha_to ] = I;
если (P ! = 0)
alpha_to [м] ^ = маску;
Маска <<= 1;
)
index_of [alpha_to [M]] = M;
Маски>> = 1;
Для (I = M 1; I <N; I )
(
если (alpha_to [I-1]> = маска)
alpha_to = alpha_to [M] ^ ((alpha_to [I-1] ^ маска) <<1);
еще
alpha_to = alpha_to [I - 1] <<1;
index_of [alpha_to ] = I;
)
index_of [0] =- 1;
)/ / Compute полиномиального генератора МПБ код длины = 31, избыточность = 15
Пустота gen_poly ()
(
Регистрация Int II, JJ, LL, kaux;
Int испытаний, AUX, nocycles, корень, noterms, rdncy;
Int цикла [16] [6], размер [16], мин [16], нули [16];
/ / Генерация цикл множеств по модулю 31
цикл [0] [0] = 0; размером [0] = 1;
цикла [1] [0] = 1; Размер [1] = 1;
JJ = 1; / / цикл набора индексов
делать
(
/ / Генерация JJ-й цикл набора
II = 0;
делать
(
II ;
цикл [JJ] [II] = (цикл [JJ] [II-1] * 2)% N;
Размер [JJ] ;
AUX = (цикл [JJ] [II] * 2)% N;
)
While (AUX! = цикл [JJ] [0]);
/ / Следующий цикл набора представитель
LL = 0;
делать
(
LL ;
Test = 0;
для (II = 1; ((II <= JJ )&&(! тест)); II )
/ / Изучить предыдущих наборов цикл
для (kaux = 0; ((kaux <Размер [II ])&&(! тест)); kaux )
если (LL == цикла [II] [kaux])
Test = 1;
)
While ((тест) & & (LL <(N - 1)));
IF (! (тест))
(
JJ ; / / следующий цикл набора индексов
цикл [JJ] [0] = LL;
Размер [JJ] = 1;
)
)
в то время (LL <(N-1));
nocycles JJ = / / Число циклов множеств по модулю N
/ / Поиск корней 1, 2, ..., D-1 в цикле набора
kaux = 0;
rdncy = 0;
для (II = 1; II <= nocycles; II )
(
мин [kaux] = 0;
для (JJ = 0; JJ <Размер [II]; JJ )
для (корень = 1; корневых <D; корень )
если (корень == цикла [II] [JJ])
мин [kaux] = II;
если (мин [kaux])
(
rdncy = размер [мин [kaux]];
kaux ;
)
)
noterms = kaux;
kaux = 1;
для (II = 0; II <noterms; II )
для (JJ = 0; JJ <размер [мин [II]]; JJ )
(
нули [kaux] = цикл [мин [II]] [JJ];
kaux ;
)
/ / Compute полиномиального генератора
G [0] = alpha_to [нули [1]];
G [1] = 1; / / G (X) = (X нули [1]) изначально
для (II = 2; II <= rdncy; II )
(
G [II] = 1;
для (JJ = II-1; JJ> 0; JJ -)
если (G [JJ]! = 0)
G [JJ] = G [JJ-1] ^ alpha_to [(index_of [G [JJ]] нули [II])% N];
еще
G [JJ] = G [JJ-1];
G [0] = alpha_to [(index_of [G [0]] нули [II])% N];
)
)
//=============== Encode_bch ==============================
/ / Вычислить избыточных BB битов [], кодовое слово C (X) = данные (X) * X ** (НК) BB (X)
Пустота encode_bch (INT данные [16], Int BB [16])
(
Регистрация Int I, J;
Регистрация Int обратной связи;
для (i = 0; i <длина-K; I )
BB = 0;
Для (I = K-1; I> = 0; I -)
(
Данные обратной связи = ^ BB [длина-K-1];
если (обратная связь! = 0)
(
для (J = длина-K-1, J> 0, J -)
если (G [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 ()
(
Регистрация Int I, J, Q;
Int ELP [3], S [5], S3;
: = 0, syn_error = 0;
Int LOC [3], р [3];
Int AUX;
/ / Первая форма синдромы
для (i = 1; I <= 4; I )
(
S = 0;
для (J = 0; J <длина; J )
если (recd [J]! = 0)
S ^ alpha_to = [(I * J)% N];
если (S ! = 0)
syn_error = 1; / / установка флага, если ненулевой синдром ПРИМЕЧАНИЕ: Если нужна только обнаружение ошибок, а затем выйти из программы, здесь ...
S = index_of [S ]; / / преобразовать синдром из полиномиальной формы в форму индекса
);
если (syn_error) / / если есть ошибки, стараемся их исправить
(
если (S [1]! =- 1)
(
S3 = (S [1] * 3)% N;
если (S [3] == S3) / / Была ли это одна ошибка?
(
recd [S [1]] ^ = 1; / / Да: исправить
)
зе / / Предположим, две ошибки произошли, и решить для коэффициентов Sigma (X), polynomail ошибка локатора
(
если (S [3]! =- 1)
AUX = alpha_to [S3] ^ alpha_to [S [3]];
еще
AUX = alpha_to [S3];
ELP [0] = 0;
ELP [1] = (S [2]-index_of [AUX] N)% N;
ELP [2] = (S [1]-index_of [AUX] N)% N;
для (i = 1; I <= 2; I ) / / Поиск корней полинома месте ошибка
р = ELP ;
Count = 0;
для (i = 1; I <= N; I ) / / Цзянь поиск
(
Q = 1;
для (J = 1, J <= 2; J )
если (р [J]! =- 1)
(
REG [j] = (REG [J] J)% N;
Q ^ = alpha_to [REG [J]];
)
IF (! Q) / / Магазин ошибка индексы порядковый номер
(
LOC [Count] = I% N;
Count ;
)
)
если (кол-во == 2) / / нет.Корни = степень ELP, следовательно, 2 ошибками
для (i = 0; i <2; I )
recd [LOC ] ^ = 1;
)
)
)
)
//=========== Бинарных 16 бит десятичной ==============
Int bi2de (Char бен [BIT_PER_SAMPLE])
(
Int OP = 0;
долгое Int power_vector [BIT_PER_SAMPLE];
Int J;

Int I, C = 0;
Int FLAG = 0;

power_vector [0] = 1;
//==================== 1 дополнением ==================

если (BIN [15] == 1)
(Флаг = 1;
Для (I = 15; I> = 0; I -)
(
если (BIN == 0)
(
Бен = 1;
)
еще
(
Бен = 0;
)
/ / Е ( "% D", бен );
)

//================= 2 дополнением =======================
для (i = 0; i <16; I )
(
если (I == 0)
(
если (BIN == 0)
(
Бен = 1;
)
еще
(
Бен = 0;
C = 1;
)
)
еще
(
если (C == 1 & & бен == 0)
(
Бен = 1;
C = 0;
)
Else If (C == 1 & & бен == 1)
(
Бен = 0;
C = 1;
)
)
/ / Е ( "% D", бен );
)
//==============================
)

для (J = 1, J <BIT_PER_SAMPLE; J )
(
power_vector [J] = power_vector [J-1] * 2;
)

//================= Конвертировать разрядных десятичных цифр для ===============для (J = 0; J <BIT_PER_SAMPLE; J )
(
ОП = power_vector [J] * бен [J];
)
если (флаг == 1)
(
OP = (-2 * OP) ФП;
FLAG = 0;
)
возвращение (ОП);
)//====================== main_code ========================= =
Основными Void ()
(
Чар temp_binary [BIT_PER_SAMPLE], temp_decimal [BIT_PER_SAMPLE];

Int * binary_buffer;

Int * out_buffer;

Int J, I = 0;

: = 0, count_bit;

етр [BIT_PER_SAMPLE];

Int C = 0;

Int Z = 0;

read_p (); / / читать полиномиального генератора G (X)
generate_gf (); / / Генерация полем Галуа GF (2 ** M)
gen_poly (); / / Вычислить полиномиального генератора кода МПБ

comm_poll (); / / Init ДСК, кодек, McBSP
DSK6713_LED_init (); / / Init вел из BSL
DSK6713_DIP_init (); / / Init ДИП от BSL
(
краткое голоса;
Node * currptr;

While (DSK6713_DIP_get (3) == 0)
(C ;
Count ; / / данных кол
-
DSK6713_LED_on (3); / / включение светодиодной # 3
(
Voice = input_sample ();// магазин входных данных в буфере
Е ( "% D \ п", голос);

/ / ЗсапЕ ( "% D", & голоса);

если (Back == NULL)
(
currptr = (Node *) MALLOC (sizeof (Node));
Back = currptr;
первый = currptr;
currptr-> Data = голос;
currptr-> Предыдущий = NULL;
currptr-> Next = NULL;
)
еще
(
currptr = (Node *) MALLOC (sizeof (Node));
Back-> Next = currptr;
currptr-> Предыдущий = назад;
Back = currptr;
currptr-> Data = голос;
Back-> Next = NULL;
)
)
)
DSK6713_LED_off (3);

count_bit = кол-во * BIT_PER_SAMPLE / / кол-разрядный
/ / Е ( "Бит всех =% D \ N", count_bit);

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

binary_buffer = (INT *) MALLOC (count_bit * SizeOf (INT)); / / binary_buffer динамический массив

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

в то время (первая! = NULL) / / Пока первые данные
(
input_dec = первый-> данных;
de2bi (temp_binary, input_dec); / / Перейти функции de2bi//================= define_binary_16bit =====================
для (J = 15, J> = 0; J -) / / для 16 бит
(
binary_buffer = temp_binary [J] / / трансфер temp_binary динамических массивов
/ / Е ( "% D", binary_buffer );
I ;
)первый = первый-> Next;
)
/ * Для (i = 0; i <= (count_bit-1); I )
(
Е ( "% D", binary_buffer );
) * /

//==================== dividing_binary_data ================

для (J = 0; J <Count; J )
(
для (i = 0; i <16; I )
(
Данные = binary_buffer [16 * J I];
/ / Е ( "% D", данные );
)
/ / МПБ кодировки
encode_bch (данные, ВВ); / / кодировать данные
для (i = 0; i <длина-K; I )
(
recd = BB / / первый (длина-K) бит избыточности
/ / Е ( "% D", recd );
)
для (i = 0; I <K; I )
(
recd [I длина-K] = данные / / К последнему биты являются данные
/ / Е ( "% D", recd [I длина-K]);
)

для (i = 0; i <длина; I )
(
Е ( "% D", recd ); / / печать кодовое слово
)

Е ( "Кодовое слово \ п");

/ / Ошибку при вводе данных//------------------------------------------------ ---------
/ / БЧХ
decode_bch (); / / расшифровал данные
Для (I = длина-K; I <длина; I ) / / декодирования ошибок: сравнить данные только части
(Если (по данным [I-длина K]! Recd = )
decerror ;
)для (i = 0; i <16; I )
(
binary_buffer [16 * J I] = recd [I длина-K];
Е ( "% D", binary_buffer [16 * J I]);
)
Е ( "декодировать \ п");
)

//==============================================
out_buffer = (INT *) MALLOC (Count * SizeOf (INT));

/ / Преобразование 16-разрядного двоичного кода 'binary_buffer к десятичной' out_buffer '

для (i = 0; i <Count; I )
(
для (J = 0; J <BIT_PER_SAMPLE; J )
(
temp_decimal [J] = binary_buffer [16 * I J];
/ / Е ( "% D", temp_decimal [J]);
)
Z = 0;
для (J = 15, J> = 0; J -) / / для 16 бит
(
Темп [г] = temp_decimal [J];
/ / Е ( "% D", темп [г]);
Z ;
)

out_buffer = bi2de (Temp);

/ / Output_sample (out_buffer * 10);
Е ( "% D \ N", out_buffer );
)
свободный (binary_buffer);
)
)

************************************************** *
Помоги мне сделать.
Программа голос с.

 
Zalewani spamem, wśród którego znajduje się korespondencja biznesowa, często nie potrafimy odróżnić fałszywki od realnej korespondencji. Zagrożenia cechują się często kilkoma elementami.

Read more...
 

Welcome to EDABoard.com

Sponsor

Back
Top