% One application of FSK LDPC work is SSTV. This function generates a\r
% simulated frame for testing\r
\r
-function [bytes rs232_bits] = gen_sstv_frame\r
+function frame_rs232 = gen_sstv_frame\r
+ load('H2064_516_sparse.mat');\r
+ HRA = full(HRA); \r
+ mod_order = 2;\r
+ code_param = ldpc_init(HRA, mod_order);\r
+\r
+ % generate payload data bytes and checksum\r
+\r
data = floor(rand(1,256)*256);\r
+ % data = zeros(1,256);\r
checksum = crc16(data);\r
+ data = [data hex2dec(checksum(3:4)) hex2dec(checksum(1:2))];\r
+\r
+ % unpack bytes to bits and LPDC encode\r
+\r
+ mask = 2.^(0:7);\r
+ unpacked_data = [];\r
+ for b=1:length(data)\r
+ unpacked_data = [unpacked_data bitand(data(b), mask) > 0];\r
+ end\r
+ codeword = ldpc_encode(code_param, unpacked_data);\r
+\r
+ % generate unpacked header bits\r
+\r
uw = 'abcd';\r
- bytes = [hex2dec('55')*ones(1,16) hex2dec('ab') hex2dec('cd')];\r
- bytes = [bytes data hex2dec(checksum(3:4)) hex2dec(checksum(1:2))];\r
+ header = [hex2dec('55')*ones(1,16) hex2dec('ab') hex2dec('cd')];\r
+ unpacked_header = [];\r
+ for b=1:length(header)\r
+ unpacked_header = [unpacked_header bitand(header(b), mask) > 0];\r
+ end\r
+ frame = [unpacked_header codeword 0 0 0 0]; % integer number of bytes\r
+\r
+ % insert rs232 framing bits\r
\r
- mask = 2.^(0:7); rs232_bits = [];\r
- for b=1:length(bytes)\r
- bits = bitand(bytes(b),mask) > 0;\r
- rs232_bits = [rs232_bits 0 bits 1];\r
+ frame_rs232 = [];\r
+ for b=1:8:length(frame)\r
+ frame_rs232 = [frame_rs232 0 frame(b:b+7) 1];\r
end\r
endfunction\r
\r
\r
% binary flags to run various demos, e.g. "15" to run 1 .. 8\r
\r
-demo = 7;\r
+demo = 8;\r
\r
if demo == 1\r
printf("simple_ut....\n");\r
end\r
\r
if demo == 8\r
- [bytes rs232_bits] = gen_sstv_frame;\r
- f = fopen("sstv.bin","wb"); fwrite(f, rs232_bits, "uint8"); fclose(f);\r
+ frames = 100;\r
+ EsNodB = 3;\r
+ EsNo = 10^(EsNodB/10);\r
+ variance = 1/(2*EsNo);\r
+\r
+ frame_rs232 = [];\r
+ for i=1:frames\r
+ frame_rs232 = [frame_rs232 gen_sstv_frame];\r
+ end\r
+\r
+ % write hard decn version to disk file, useful for fsk_mod input\r
+\r
+ f = fopen("sstv.bin","wb"); fwrite(f, frame_rs232, "char"); fclose(f);\r
+\r
+ % soft decision version (with noise)\r
+\r
+ s = 1 - 2*frame_rs232;\r
+ noise = sqrt(variance)*randn(1,length(frame_rs232)); \r
+ r = s + noise;\r
+ f = fopen("sstv_sd.bin","wb"); fwrite(f, r, "float32"); fclose(f);\r
end\r