Advertisement
akocius

laboras

Nov 4th, 2021
966
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 7.00 KB | None | 0 0
  1. %% RLE kodavimas
  2. clear all
  3. clc
  4. j = 1;
  5. i = 1;
  6. load('Temperature.mat');
  7.  
  8. %Paleidžiamas ciklas per visas temp. reikšmes
  9. while i <= length(Temperature)
  10.     val = Temperature(i);
  11.     rleEncodedTemp(j) = val;
  12.     repeat = 1;
  13.    
  14.     %Tikrinama ar sekanti reikšmė yra tokia pati
  15.     while i < length(Temperature) && val == Temperature(i + 1)
  16.         repeat = repeat + 1; %pasikartojimų skaičius
  17.         i = i + 1; %pereinama prie kitos temp. reikšmės
  18.     end
  19.    
  20.     %Kitu elementu masyve įrašomas pasikartojimų skaičius
  21.     j = j + 1;
  22.     rleEncodedTemp(j) = repeat;
  23.  
  24.     j = j + 1;
  25.     i = i + 1;
  26. end
  27.  
  28. %Pirminės sekos dydis bitais
  29. sizeOrig = length(dec2bin(max(Temperature))) * length(Temperature);
  30.  
  31. maxEncodedValue = max(rleEncodedTemp(1:2:end));
  32. minEncodedValue = min(rleEncodedTemp(1:2:end));
  33. if minEncodedValue < 0
  34.     encodedValueLength = length(dec2bin(maxEncodedValue - minEncodedValue));
  35. else
  36.     encodedValueLength = length(dec2bin(maxEncodedValue))
  37. end
  38.  
  39. maxEncodedRepetition = max(rleEncodedTemp(2:2:end));
  40. repetitionLength = length(dec2bin(maxEncodedRepetition))
  41.  
  42. %Užkoduotos RLE koduote sekos dydis bitais
  43. encodedSize = (encodedValueLength + repetitionLength) * (length(rleEncodedTemp) / 2);
  44.  
  45. %Duomenų dydžio sumažėjimas
  46. sizeOrig
  47. encodedSize
  48. compression = (sizeOrig - encodedSize) / sizeOrig
  49. %% Delta kodavimas
  50. clear all
  51. clc
  52. load('Temperature.mat');
  53.  
  54. deltaTemp(1) = Temperature(1);
  55.  
  56. for i = 2:length(Temperature)
  57.     deltaTemp(i) = Temperature(i) - Temperature(i-1);
  58. end
  59.  
  60. %Pirminės sekos dydis bitais
  61. sizeOrig = length(dec2bin(max(Temperature))) * length(Temperature);
  62.  
  63. %Užkoduotos sekos dydis bitais
  64. firstValueSize = length(dec2bin(deltaTemp(1)));
  65. differenceValuesSize = length(dec2bin(max(deltaTemp(2:end)) - min(deltaTemp(2:end))));
  66. encodedSize = differenceValuesSize * (length(Temperature) - 1) + firstValueSize;
  67.  
  68. %Duomenų dydžio sumažėjimas
  69. sizeOrig
  70. encodedSize
  71. compression = (sizeOrig - encodedSize) / sizeOrig
  72. %% RLE kodu užkoduotos Delta vertės
  73. clear all
  74. clc
  75. load('Temperature.mat');
  76.  
  77. %Delta užkodavimas
  78. deltaTemp(1) = Temperature(1);
  79.  
  80. for i = 2:length(Temperature)
  81.     deltaTemp(i) = Temperature(i) - Temperature(i-1);
  82. end
  83.  
  84. %RLE kodavimas
  85. j = 1;
  86. i = 1;
  87. while i <= length(deltaTemp)
  88.     val = deltaTemp(i);
  89.     rleEncodedTemp(j) = val;
  90.     repeat = 1;
  91.    
  92.     while i < length(deltaTemp) && val == deltaTemp(i + 1)
  93.         repeat = repeat + 1;
  94.         i = i + 1;
  95.     end
  96.    
  97.     %Kitu elementu masyve įrašomas pasikartojimų skaičius
  98.     j = j + 1;
  99.     rleEncodedTemp(j) = repeat;
  100.  
  101.     j = j + 1;
  102.     i = i + 1;
  103. end
  104.  
  105. %Užkoduotos Delta sekos dydis bitais
  106. firstValueSize = length(dec2bin(deltaTemp(1)));
  107. differenceValuesSize = length(dec2bin(max(deltaTemp(2:end)) - min(deltaTemp(2:end))));
  108. deltaEncodedSize = differenceValuesSize * (length(Temperature) - 1) + firstValueSize;
  109.  
  110. %RLE - delta kodo dydis bitais
  111. rleFirstValSize = length(dec2bin(rleEncodedTemp(1)))
  112.  
  113. maxEncodedValue = max(rleEncodedTemp(3:2:end));
  114. minEncodedValue = min(rleEncodedTemp(3:2:end));
  115. if minEncodedValue < 0
  116.     encodedValueLength = length(dec2bin(maxEncodedValue - minEncodedValue));
  117. else
  118.     encodedValueLength = length(dec2bin(maxEncodedValue));
  119. end
  120.  
  121. maxEncodedRepetition = max(rleEncodedTemp(2:2:end));
  122. repetitionLength = length(dec2bin(maxEncodedRepetition));
  123.  
  124. %Užkoduotos RLE koduote sekos dydis bitais
  125. sizeEncodedRle = ((encodedValueLength + repetitionLength) * (length(rleEncodedTemp) / 2)) + rleFirstValSize;
  126.  
  127. %Duomenų dydžio sumažėjimas
  128. deltaEncodedSize
  129. sizeEncodedRle
  130. compression = (deltaEncodedSize - sizeEncodedRle) / deltaEncodedSize
  131.  
  132. %% Hafmano kodavimas
  133. clear all
  134. clc
  135. load('Temperature.mat');
  136. tempOrig = Temperature;
  137.  
  138. tempValues = [];
  139.  
  140. %Sudaromas visų esamų temp. verčių masyvas (be pasikartojimų)
  141. for i = 1:length(tempOrig)
  142.     valueExist = 0;
  143.     for j = 1:length(tempValues)
  144.         if tempValues(j) == tempOrig(i)
  145.             valueExist = 1;
  146.         end
  147.     end
  148.  
  149.     if valueExist == 0
  150.         tempValues(end + 1) = tempOrig(i);
  151.     end
  152. end
  153.  
  154. valuesProbability = [];
  155.  
  156. %Nustatoma kiekvienos vertės atsiradimo tikimybė
  157. for i = 1:length(tempValues)
  158.     repeatCount = 0;
  159.    
  160.     %Tam tikros vertės pasikartojimų skaičius
  161.     for j = 1:length(tempOrig)
  162.         if tempValues(i) == tempOrig(j)
  163.             repeatCount = repeatCount + 1;
  164.         end
  165.     end
  166.    
  167.     %Pasikartojimo tikimybė
  168.     valuesProbability(i) = repeatCount / length(tempOrig);
  169. end
  170.  
  171.  
  172. %Hafmano žodynas
  173. dict = huffmandict(tempValues, valuesProbability);
  174.  
  175.  
  176. %Hafmano būdu užkoduota temp. verčių seka
  177. tempEncoded = huffmanenco(tempOrig, dict);
  178.  
  179. %Neužkoduotos sekos dydis bitais
  180. sizeOrig = length(dec2bin(max(tempOrig))) * length(tempOrig)
  181.  
  182. %Užkoduotos Hafmano būdu sekos dydis bitais
  183. sizeEncoded = length(tempEncoded)
  184. %% Pasikartojantys kodai
  185. clear all
  186. clc
  187. load('Temperature.mat');
  188. tempOrig = Temperature;
  189.  
  190. %Funkcija, užkoduojanti seką pasikartojančio kodo būdu
  191. %kai įvesties sekos elemento dydis 8 bitai, o pasikartojimų skaičius 3
  192. tempEncoded = my_repetition(tempOrig, 3)
  193.  
  194. %Neužkoduotos sekos dydis bitais
  195. sizeOrig = 8 * length(tempOrig)
  196.  
  197. %Užkoduotos sekos dydis bitais
  198. sizeEncoded = length(tempEncoded)
  199.  
  200. %Duomenų padidėjimas
  201. dataIncrease = (sizeEncoded - sizeOrig) / sizeOrig
  202.  
  203. %% Hemingo kodavimas
  204. clear all
  205. clc
  206. load('Temperature.mat');
  207.  
  208. %Hemingo kodavimas, kai neužkoduoto dvejetainio pavidalo sekos elemento
  209. %dydis - 11, užkoduoto - 15
  210. m = 4;
  211. n = 2^m -1; %15
  212. k = n - m; %11
  213.  
  214. tempOrig = Temperature;
  215.  
  216. %Funkcija kodavimui Hemingo būdu
  217. tempEncoded = my_hamming_encode(tempOrig, n, k);
  218.  
  219. %Neužkoduotos sekos dydis bitais
  220. sizeOrig = 11 * length(tempOrig)
  221.  
  222. %Užkoduotos sekos dydis bitais
  223. sizeEncoded = length(tempEncoded)
  224.  
  225. %Duomenų padidėjimas
  226. dataIncrease = (sizeEncoded - sizeOrig) / sizeOrig
  227.  
  228.  
  229. %------------FUNKCIJOS (ATSKIRI FAILAI)------------------------
  230.  
  231. %Funkcija grąžina dvejetainę seką su pasikartojimais
  232. function out = my_repetition (in, numOfRep)
  233.     out = '';
  234.     out_idx = 1;
  235.     %Algoritmas skirtai kiekvienai temperatūros vertei sekoje
  236.     for i = 1:length(in)
  237.         %Temp. vertės konvertavimas į 8 skaitmenų dvejetainį pavidalą
  238.         b = dec2bin(in(i), 8);
  239.        
  240.         %Kiekvieno skaitmens pasikartojimas
  241.         k = 1;  
  242.         for j = 1:8
  243.             c(k:k + numOfRep - 1) = b(j);
  244.             k = k + numOfRep;
  245.         end
  246.        
  247.         %Skaitmens pridėjimas prie visos užkoduotos sekos masyvo
  248.         out(out_idx:out_idx + 8 * numOfRep - 1)  = c(1:8 * numOfRep);
  249.         out_idx = out_idx + 8 * numOfRep;
  250.     end
  251. end
  252.  
  253. %--------------
  254.  
  255. function encoded_data = my_hamming_encode (in, n, k)
  256.     ind = 1;
  257.     for i = 1:length(in)
  258.         value = dec2bin(in(i), k);
  259.        
  260.         for j = 1:k
  261.             bin_data(j) = str2num(value(j));
  262.         end
  263.        
  264.         encoded_word = encode(bin_data, n, k, 'Hamming');
  265.        
  266.         encoded_data(ind:ind + n - 1) = encoded_word(1:n);
  267.         ind = ind + n;
  268.     end
  269. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement