커뮤니케이션"터보

I

islamatef

Guest
내가 터보 인코더 시뮬레이션 matlab에 파일을 / 디코더 변조 및 코딩을 사용하여 속도가 필요

 
이 프로그램은 공간입니다 - 시간 터보 코더 및 모든 필요한 변조하는 방법이 포함되어있습니다.%의 공간 - 시간 터보 코더
에서 에코
모든 취소
맑은
CLC

dec_alg = 입력 ( '제발 디코딩 알고리즘을 입력합니다. (0 : 로그인지도, 1 : SOVA) 기본값은 0');
만약 isempty () dec_alg
= 0 dec_alg;

awgn = 입력 ( '제발 AWGN / 레일리 ( 1 / -1)을 선택하십시오 : 기본적으로 1');
isempty (awgn 경우)
awgn = 1;

L_total = 입력 ( '하시기 바랍니다 (= 정보 꼬리 기본값 : 프레임의 크기를 입력 400)');
isempty (L_total 경우)
L_total = 400; % 정보를 비트 더하기 꼬리 비트

% g = [1 1 1 1; 1 0 1];
% g = [1 1 0 1; 1 1 1 1];
g = [1 1 1 1 1; 1 0 0 0 1];
[N으로, 케이] = 크기는 게 (g);
난 = 케이 - 1;
% 빵꾸 = 0, 속도 1로 puncturing / 2;
% 빵꾸 = 1, 안돼 puncturing
빵꾸 = 입력 ( '구멍을 선택하시기 바랍니다 / unpunctured (0 / 1) : 기본값은 0');
isempty (빵꾸 경우)
빵꾸 = 0;

% 코드 속도
속도 = 1 / (2 펑크);
반복의 % 번호
질산 칼륨 = 입력 ( '각 프레임에 대한 반복 횟수를 입력하십시오 : 기본적으로 5');
isempty (질산 칼륨 경우)
질산 칼륨 = 5;

프레임 에러의 인원을 중지 % criterior로 계산
ferrlim = 입력 ( '제발 프레임 오류의 해지 번호 : 기본적으로 입력 15');
만약 isempty () ferrlim
ferrlim = 15;

EbN0db = 입력 ( '제발 DB에 Eb/N0 입력 : 기본적으로 [2.0]');
isempty (EbN0db 경우)
EbN0db = [2.0];


fprintf ( ' 이점 양해해 주시기 바랍니다. 결과를 얻기 위해 잠시 만요. \ n'을);
% G는 격자 설정;
[출력, 전환, inv_state] = 격자 게 (g);
첫 번째 인코더의 % 출력 인터리브되지 않습니다; 순서를 그대로
알파 (1,1 : L_total) = [1 : L_total];
% 뒤로 두 번째 인코더 interleaver 블록 생성
% 알파 (2, 1 : L_total) = back_block ([1 : L_total], 3, 4);
% 두 번째 인코더에 대한 무작위로 생성 interleaver
알파 (2, 1 : L_total) = r_inter (L_total);
blocknum = 0을 (1,40);

%------------------------------------------------- ---------
user_no = 1;
frame_num = 1; % 100;
bit_len = 192 * 2;

EbNo = 5시 15분하기
power1 = EbNo;
fprintf ( 'EB / 아니오 = % d 개 \ n'을, EbNo);
의 SNR = 1/power (10, EbNo/10); % sigma2
블록 = 1;
errblock = 0;
ffer = 0;
bber = 0;
G1은 = sqrt (0.5) * (randn (1, frame_num) 나는 * randn (1 frame_num)); % 블록 페이딩
G2는 = sqrt (0.5) * (randn (1, frame_num) 나는 * randn (1 frame_num));
gain1 = G1은 * sqrt (frame_num) / 정 (G1을);
gain2 = G2는 * sqrt (frame_num) / 정 (G2를);

프레임 = 1 : frame_num
BER는 = 0;
users_data = randint (user_no, bit_len/2-m); % 정보 생성기
% % en_output = en_turbo (users_data G의 알파, 펑크);
알파 = spread_interleaver (L_total, 0);
en_output = encoderm (users_data G의 알파, 펑크);
% BPSK 변조기
% en_output = 2 * en_output - 사람 (크기 (en_output)); %
%------------------------------------------------- -------
% 만약 addinter == 1
% en_output1 = 남북 (en_output, m_inter, n_inter);
% en_output = en_output1;
% 끝
%------------------------------------------------- -------
% 변조기 : QPSK, 8PSK, 16 - QAM의 (별표 16 - QAM의)
%------------------------------------------------- -------
mod_in = en_output;
mod_out = mod_qpsk (mod_in);
% mod_out = mod_8psk (mod_in);
= mod_16qam (mod_in) % mod_out;
% mod_out = (mod_in) opt_16qam_mod;
psk_out = mod_out;
%------------------------------------------------- -------
trans_sig1 = sqrt (0.5) * psk_out;
은 ip = 1 : bit_len / 4 % STTD
trans_sig2 (2 *의 IP - 1) =- conj (trans_sig1 (2 * ip가));
trans_sig2 (2 * IP)을 = conj (trans_sig1 (2 *의 IP - 1));

receiv = gain1 (프레임) * trans_sig1 gain2 (프레임) * trans_sig2 ...
sqrt (0.5 * EbNo) * (randn (1 bit_len / 2) 나는 * randn (1 bit_len / 2));
은 ip = 1 : bit_len / 4 % 디코딩 STTD
(2 *의 IP - 1) = conj (gain1 (프레임)) * receiv (2 *의 IP - 1) gain2 (프레임) * conj ((2 * IP)을) receiv; re_sig
(2 * IP)을 = conj (gain1 (프레임)) * receiv (2 * IP)을 - gain2 (프레임) * conj ((2 *의 IP - 1)) receiv; re_sig

%------------------------------------------------- -------
% 복조기 : QPSK, 8PSK, 16 - QAM의 (별표 16 - QAM의)
%------------------------------------------------- -------
demod_in = re_sig;
demod_out = (demod_in) soft_qpsk_demod;
% demod_out = (demod_in) soft_8psk_demod;
% demod_out = (demod_in) soft_16qam_demod;
% demod_out = (demod_in) soft_opt_16qam_demod;
%------------------------------------------------- -------
% 만약 addinter == 1
% r1 = 남북 (demod_out, n_inter, m_inter);
% demod_out = r1;
% 끝
%------------------------------------------------- --------
% ar = sqrt ((gain1 (프레임) ^ 2 gain2 (프레임) ^ 2) / 2);
ar = 1;
LCC = 2 * ar / EbNo; 채널의 신뢰성 값을 %
% LCC = 1;
채널 신뢰성 % 체중 채널 출력, 디코더에 사용되는
r_Lc = demod_out * LCC;
수신기에서 % demultiplex 직렬 병렬 인코더의 각 단어의 코드를
subr = demultiplex (치수, 알파, 펑크) r_Lc;
% 반복 시작 디코딩
르 = 0 * 사람 (1 L_total);
iter = 1 : 반복
L_in = 르;
L_out = sova (출력, 전환, inv_state, L_in, g를 subr (1,

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="미소" border="0" />

, 1);
전 = 1 : L_total
르는 (i) = L_out은 (i)) *은 (i - 1) 1 (1, 아 subr - L_in은 (i);

% 정상화
= (복근 (르)) * 2/std (복근 (르)) ^ 2; C 뜻
르와 C * 르;
% 2 디코더에 대한 정보를 선험적으로 사용되는 외부의 가치를 인터 리빙
희미한 = 2;
전 = 1 : L_total
L_in은 (i) = 르 (알파 (흐린, 난));

L_out = sova (출력, 전환, inv_state, L_in, g를 subr (희미한

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="미소" border="0" />

, -1);
% deinterleave 부드러운 출력
전 = 1 : L_total
온도 (알파 (치수, 난)) = L_out은 (i);

% 현재 블록, 현재 반복 비트 오류 비율을 계산
x_hat = (기호 (임시직 (1 : L_info)) 1) / 2;
= (x_hat ~ = users_data) 찾을 수 드렸어요;
흥 (요약 (blocknum (1 : power1 - 1)) 블록, iter) = 길이 () 잘못 / L_info;
BER는 = biterr (x_hat, users_data);
bber = bber BER에;
% 외부의 정보를 먼저 디코더의 통계에 사용되는
전 = 1 : L_total
르는 (i) = L_out은 (i)) *은 (i - 1) 1 (흐린, 아 subr - L_in은 (i);

%로 다음 디코더의 정보를 선험적으로 르 외부의 가치를 deinterleaving
전 = 1 : L_total
온도 (알파 (흐린, 난)) = 르는 (i);

르 = 온도;
% 반복 현재 블록, 현재에 대한 사전 정보의 가치를 의미
L_mean (요약 (blocknum (1 : power1 - 1)) 블록, iter) = (복근 (르)) 의미;
% 정상화
= (복근 (르)) * 2/std (복근 (르)) ^ 2; C 뜻
르와 C * 르;
엔드 % iter
% 만약 Pe (합계 (blocknum (1 : power1 - 1)) 블록, 반복) ~ = 0 % 프레임 오류
% errblock = errblock 1;
% 끝
% % fprintf ( '\ n % 3d로', 블록);
P는 = 1 % : 반복
% fprintf ( '% 15.5e'는 여기저기에 심복 (합계 (blocknum (1 : power1 - 1)) 블록, P는));
% 끝
% fprintf ( '\ n'을);
블록 = 블록 1;
프레임 엔드 %
blocknum (power1) = 블록 - 1;
케이 = 1 % : 반복
15.5e ', % fprintf ('% 의미 (Pe (합계 (blocknum (1 : power1 - 1)) 1 : ...
% 금액 (blocknum (1 : power1)), k)의));
% 끝
ber0 (EbNo) = bber / (frame_num * 길이 (x_hat) * 반복)


 

Welcome to EDABoard.com

Sponsor

Back
Top