Advertisement
Guest User

Untitled

a guest
Jul 6th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Octave 4.32 KB | None | 0 0
  1. printf("\n");
  2. clear;
  3. # ----------------------------------------------------
  4. #  Trabalho por Gabriel Ferreira e Vinícius Santiago.
  5. #           Matrículas 78218 e 78208.
  6. # ----------------------------------------------------
  7.  
  8. # ---- PASSO 1 ----
  9. # Entrada de qualquer caracter.
  10. palavra = input ("--> Digite uma palavra: ", "s");
  11. arrayASCII = toascii(palavra);
  12.  
  13. printf("\nPalavra inicial ASCII: ");
  14. printf("%d  ", arrayASCII);
  15.  
  16. # Dividindo arrayASCII em partes de 8 bits.
  17. # Então separando os números num mesmo array.
  18. arrayBinario = dec2bin(arrayASCII, 8);
  19.  
  20. arrayBinarioDividido = [];
  21. i = 1;
  22. while (i <= size(arrayBinario, 1))
  23.   j = 1;
  24.   arrayAux = [];
  25.  
  26.   while (j <= 8)
  27.     arrayAux = [arrayAux, sprintf("%s", arrayBinario(i, j)) - '0'];
  28.     j++;
  29.   endwhile
  30.  
  31.   arrayBinarioDividido = [arrayBinarioDividido, arrayAux];
  32.  
  33.   i++;
  34. endwhile
  35.  
  36. printf("\nPalavra inicial Binario: ");
  37. printf("%d", arrayBinarioDividido);
  38.  
  39. figure(1);
  40. subplot(3, 1, 1);
  41. plotargrafico(arrayBinarioDividido, "Palavra em binário", 1.1, -1.1, 32);
  42.  
  43.  
  44. # ---- PASSO 2 ----
  45. # Encoding por NRZ.
  46. arrayNRZ = arrayBinarioDividido;
  47.  
  48. for i = 1 : length(arrayNRZ)
  49.   if (arrayNRZ(i) == 0)
  50.     arrayNRZ(i) = -1;
  51.   endif
  52. endfor
  53.  
  54. printf("\nPalavra com encoding NRZ: ");
  55. printf("%d", arrayNRZ);
  56.  
  57. figure(1);
  58. subplot(3, 1, 2);
  59. plotargrafico(arrayNRZ, "Palavra com encoding NRZ", 1.1, -1.1, 32);
  60.  
  61.  
  62. # ---- PASSO 3 ----
  63. # Modulação usando ASK.
  64. askFrequencia = 30;
  65. askTempo = 0.000125;
  66. askFimTimeline = length(arrayBinarioDividido)/16;
  67.  
  68. askTimeframe = (0 : askTempo : askFimTimeline - askTempo)';
  69. onda = sin(2 * pi * askFrequencia * askTimeframe);
  70. ondaAux = onda;
  71.  
  72. # Divide o tamanho da onda pela quantidade de bits.
  73. # Cada bit equivale a um segmento na onda.
  74. tamanhoSeg = (length(onda) / length(arrayBinarioDividido));
  75.  
  76. # Pra cada bit da palavra, pega o segmento equivalente.
  77. # Se o bit for = -1, amplitude = 0.
  78. # Se o bit for =  1, amplitude > 0.
  79. # Pega sempre o inicio da senoide pra começar do 0.
  80. contPalavra = 1;
  81. contOnda = 1;
  82. while (contPalavra <= length(arrayNRZ))
  83.   contSegmento = 1;
  84.  
  85.   if (arrayNRZ(contPalavra) == -1)
  86.     while (contSegmento <= tamanhoSeg)
  87.       onda(contOnda) = 0;
  88.       contOnda++;
  89.       contSegmento++;
  90.     endwhile
  91.    
  92.   elseif (arrayNRZ(contPalavra) == 1)
  93.     while (contSegmento <= tamanhoSeg)
  94.       onda(contOnda) = ondaAux(contSegmento);
  95.       contOnda++;
  96.       contSegmento++;
  97.     endwhile
  98.   endif
  99.  
  100.   contPalavra++;
  101. endwhile
  102.  
  103. figure(1);
  104. subplot(3, 1, 3);
  105. plot(askTimeframe, onda);
  106. title("Onda modulada por ASK");
  107. axis([0 (askFimTimeline - askTempo) -1.2 1.2]);
  108. grid on;
  109.  
  110.  
  111. # ---- PASSO 4 ----
  112. # Passagem pro domínio do tempo com FFT.
  113. # Logo após, simulando o recebimento com IFFT.
  114. ondaFFT = fft(onda);
  115. ondaFFTReal = real(fft(onda));
  116. ondaIFFT = real(ifft(fft(onda)));
  117.  
  118. figure(2);
  119. subplot(3, 1, 1);
  120. plot(ondaFFT);
  121. title("Onda pós FFT");
  122.  
  123. figure(2);
  124. subplot(3, 1, 2);
  125. plot(ondaFFTReal);
  126. title("Onda pós FFT (real)");
  127.  
  128. figure(2);
  129. subplot(3, 1, 3);
  130. plot(ondaIFFT);
  131. title("Onda pós IFFT (recebimento)");
  132. axis([0 length(ondaIFFT) -1.1 1.1]);
  133.  
  134. printf("\nFFT. Onda enviada.");
  135. printf("\n\nOnda recebida. IFFT.");
  136.  
  137.  
  138. # ---- PASSO 5 ----
  139. # Processo inverso.
  140. # Pega um valor central pra cada segmento.
  141. # IFFT não deixa 0, então vê se está dentro de um intervalo.
  142. ondaNormalizada = [];
  143.  
  144. i = 1;
  145. k = 1;
  146. while(i <= length(ondaIFFT))
  147.   if (ondaIFFT(i) > -0.0001 && ondaIFFT(i) < 0.0001)
  148.     ondaNormalizada(k) = 0;
  149.   else
  150.     ondaNormalizada(k) = 1;
  151.   endif
  152.  
  153.   k++;
  154.   i = i + tamanhoSeg + 1;
  155. endwhile
  156.  
  157. printf("\nOnda IFFT Normalizada: ");
  158. printf("%d", ondaNormalizada);
  159.  
  160. figure(3);
  161. subplot(3, 1, 1);
  162. plotargrafico(ondaNormalizada, "Array Normalizado", 1.1, -1.1, 32);
  163.  
  164. # Concatena o binário como string.
  165. # Divide a ondaNormalizada em conjuntos de 8 bits pra traduzir pra ascii.
  166. # Já passa em decimal para o arrayASCII (bin2dec).
  167. arrayAscii = [];
  168. i = 1;
  169. while (i <= length(ondaNormalizada))
  170.   strBin = "";
  171.   j = 1;
  172.  
  173.   while (j <= 8)
  174.     if (i <= length(ondaNormalizada))
  175.       strBin = strcat(strBin, num2str(ondaNormalizada(i)));
  176.       i++;
  177.       j++;
  178.     else    
  179.       j++;
  180.     endif
  181.   endwhile
  182.  
  183.   arrayAscii = [arrayAscii, bin2dec(strBin)];
  184. endwhile
  185.  
  186. printf("\n\n--> A palavra entrada foi: %s", char(arrayAscii));
  187. printf("\n\n\n");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement