Advertisement
Guest User

Untitled

a guest
Jul 6th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Octave 4.40 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. frequencia = input("--> Digite a frequencia desejada (30-60 sugerida): ");
  12. arrayASCII = toascii(palavra);
  13.  
  14. printf("\nPalavra inicial ASCII: ");
  15. printf("%d  ", arrayASCII);
  16.  
  17. # Dividindo arrayASCII em partes de 8 bits.
  18. # Então separando os números num mesmo array.
  19. arrayBinario = dec2bin(arrayASCII, 8);
  20.  
  21. arrayBinarioDividido = [];
  22. i = 1;
  23. while (i <= size(arrayBinario, 1))
  24.   j = 1;
  25.   arrayAux = [];
  26.  
  27.   while (j <= 8)
  28.     arrayAux = [arrayAux, sprintf("%s", arrayBinario(i, j)) - '0'];
  29.     j++;
  30.   endwhile
  31.  
  32.   arrayBinarioDividido = [arrayBinarioDividido, arrayAux];
  33.  
  34.   i++;
  35. endwhile
  36.  
  37. printf("\nPalavra inicial Binario: ");
  38. printf("%d", arrayBinarioDividido);
  39.  
  40. figure(1);
  41. subplot(3, 1, 1);
  42. plotargrafico(arrayBinarioDividido, "Palavra em binário", 1.1, -1.1, 32);
  43.  
  44.  
  45. # ---- PASSO 2 ----
  46. # Encoding por NRZ.
  47. arrayNRZ = arrayBinarioDividido;
  48.  
  49. for i = 1 : length(arrayNRZ)
  50.   if (arrayNRZ(i) == 0)
  51.     arrayNRZ(i) = -1;
  52.   endif
  53. endfor
  54.  
  55. printf("\nPalavra com encoding NRZ: ");
  56. printf("%d", arrayNRZ);
  57.  
  58. figure(1);
  59. subplot(3, 1, 2);
  60. plotargrafico(arrayNRZ, "Palavra com encoding NRZ", 1.1, -1.1, 32);
  61.  
  62.  
  63. # ---- PASSO 3 ----
  64. # Modulação usando ASK.
  65. #askFrequencia = 50;
  66. askTempo = 0.000125;
  67. askFimTimeline = length(arrayBinarioDividido)/16;
  68.  
  69. askTimeframe = (0 : askTempo : askFimTimeline - askTempo)';
  70. onda = sin(2 * pi * frequencia * askTimeframe);
  71. ondaAux = onda;
  72.  
  73. # Divide o tamanho da onda pela quantidade de bits.
  74. # Cada bit equivale a um segmento na onda.
  75. tamanhoSeg = (length(onda) / length(arrayBinarioDividido));
  76.  
  77. # Pra cada bit da palavra, pega o segmento equivalente.
  78. # Se o bit for = -1, amplitude = 0.
  79. # Se o bit for =  1, amplitude > 0.
  80. # Pega sempre o inicio da senoide pra começar do 0.
  81. contPalavra = 1;
  82. contOnda = 1;
  83. while (contPalavra <= length(arrayNRZ))
  84.   contSegmento = 1;
  85.  
  86.   if (arrayNRZ(contPalavra) == -1)
  87.     while (contSegmento <= tamanhoSeg)
  88.       onda(contOnda) = 0;
  89.       contOnda++;
  90.       contSegmento++;
  91.     endwhile
  92.    
  93.   elseif (arrayNRZ(contPalavra) == 1)
  94.     while (contSegmento <= tamanhoSeg)
  95.       onda(contOnda) = ondaAux(contSegmento);
  96.       contOnda++;
  97.       contSegmento++;
  98.     endwhile
  99.   endif
  100.  
  101.   contPalavra++;
  102. endwhile
  103.  
  104. figure(1);
  105. subplot(3, 1, 3);
  106. plot(askTimeframe, onda);
  107. title("Onda modulada por ASK");
  108. axis([0 (askFimTimeline - askTempo) -1.2 1.2]);
  109. grid on;
  110.  
  111.  
  112. # ---- PASSO 4 ----
  113. # Passagem pro domínio do tempo com FFT.
  114. # Logo após, simulando o recebimento com IFFT.
  115. ondaFFT = fft(onda);
  116. ondaFFTReal = real(fft(onda));
  117. ondaIFFT = real(ifft(fft(onda)));
  118.  
  119. figure(2);
  120. subplot(3, 1, 1);
  121. plot(ondaFFT);
  122. title("Onda pós FFT");
  123.  
  124. figure(2);
  125. subplot(3, 1, 2);
  126. plot(ondaFFTReal);
  127. title("Onda pós FFT (real)");
  128.  
  129. figure(2);
  130. subplot(3, 1, 3);
  131. plot(ondaIFFT);
  132. title("Onda pós IFFT (recebimento)");
  133. axis([0 length(ondaIFFT) -1.1 1.1]);
  134.  
  135. printf("\nFFT. Onda enviada.");
  136. printf("\n\nOnda recebida. IFFT.");
  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