Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- printf("\n");
- clear;
- # ----------------------------------------------------
- # Trabalho por Gabriel Ferreira e Vinícius Santiago.
- # Matrículas 78218 e 78208.
- # ----------------------------------------------------
- # ---- PASSO 1 ----
- # Entrada de qualquer caracter.
- palavra = input ("--> Digite uma palavra: ", "s");
- arrayASCII = toascii(palavra);
- printf("\nPalavra inicial ASCII: ");
- printf("%d ", arrayASCII);
- # Dividindo arrayASCII em partes de 8 bits.
- # Então separando os números num mesmo array.
- arrayBinario = dec2bin(arrayASCII, 8);
- arrayBinarioDividido = [];
- i = 1;
- while (i <= size(arrayBinario, 1))
- j = 1;
- arrayAux = [];
- while (j <= 8)
- arrayAux = [arrayAux, sprintf("%s", arrayBinario(i, j)) - '0'];
- j++;
- endwhile
- arrayBinarioDividido = [arrayBinarioDividido, arrayAux];
- i++;
- endwhile
- printf("\nPalavra inicial Binario: ");
- printf("%d", arrayBinarioDividido);
- figure(1);
- subplot(3, 1, 1);
- plotargrafico(arrayBinarioDividido, "Palavra em binário", 1.1, -1.1, 32);
- # ---- PASSO 2 ----
- # Encoding por NRZ.
- arrayNRZ = arrayBinarioDividido;
- for i = 1 : length(arrayNRZ)
- if (arrayNRZ(i) == 0)
- arrayNRZ(i) = -1;
- endif
- endfor
- printf("\nPalavra com encoding NRZ: ");
- printf("%d", arrayNRZ);
- figure(1);
- subplot(3, 1, 2);
- plotargrafico(arrayNRZ, "Palavra com encoding NRZ", 1.1, -1.1, 32);
- # ---- PASSO 3 ----
- # Modulação usando ASK.
- askFrequencia = 30;
- askTempo = 0.000125;
- askFimTimeline = length(arrayBinarioDividido)/16;
- askTimeframe = (0 : askTempo : askFimTimeline - askTempo)';
- onda = sin(2 * pi * askFrequencia * askTimeframe);
- ondaAux = onda;
- # Divide o tamanho da onda pela quantidade de bits.
- # Cada bit equivale a um segmento na onda.
- tamanhoSeg = (length(onda) / length(arrayBinarioDividido));
- # Pra cada bit da palavra, pega o segmento equivalente.
- # Se o bit for = -1, amplitude = 0.
- # Se o bit for = 1, amplitude > 0.
- # Pega sempre o inicio da senoide pra começar do 0.
- contPalavra = 1;
- contOnda = 1;
- while (contPalavra <= length(arrayNRZ))
- contSegmento = 1;
- if (arrayNRZ(contPalavra) == -1)
- while (contSegmento <= tamanhoSeg)
- onda(contOnda) = 0;
- contOnda++;
- contSegmento++;
- endwhile
- elseif (arrayNRZ(contPalavra) == 1)
- while (contSegmento <= tamanhoSeg)
- onda(contOnda) = ondaAux(contSegmento);
- contOnda++;
- contSegmento++;
- endwhile
- endif
- contPalavra++;
- endwhile
- figure(1);
- subplot(3, 1, 3);
- plot(askTimeframe, onda);
- title("Onda modulada por ASK");
- axis([0 (askFimTimeline - askTempo) -1.2 1.2]);
- grid on;
- # ---- PASSO 4 ----
- # Passagem pro domínio do tempo com FFT.
- # Logo após, simulando o recebimento com IFFT.
- ondaFFT = fft(onda);
- ondaFFTReal = real(fft(onda));
- ondaIFFT = real(ifft(fft(onda)));
- figure(2);
- subplot(3, 1, 1);
- plot(ondaFFT);
- title("Onda pós FFT");
- figure(2);
- subplot(3, 1, 2);
- plot(ondaFFTReal);
- title("Onda pós FFT (real)");
- figure(2);
- subplot(3, 1, 3);
- plot(ondaIFFT);
- title("Onda pós IFFT (recebimento)");
- axis([0 length(ondaIFFT) -1.1 1.1]);
- printf("\nFFT. Onda enviada.");
- printf("\n\nOnda recebida. IFFT.");
- # ---- PASSO 5 ----
- # Processo inverso.
- # Pega um valor central pra cada segmento.
- # IFFT não deixa 0, então vê se está dentro de um intervalo.
- ondaNormalizada = [];
- i = 1;
- k = 1;
- while(i <= length(ondaIFFT))
- if (ondaIFFT(i) > -0.0001 && ondaIFFT(i) < 0.0001)
- ondaNormalizada(k) = 0;
- else
- ondaNormalizada(k) = 1;
- endif
- k++;
- i = i + tamanhoSeg + 1;
- endwhile
- printf("\nOnda IFFT Normalizada: ");
- printf("%d", ondaNormalizada);
- figure(3);
- subplot(3, 1, 1);
- plotargrafico(ondaNormalizada, "Array Normalizado", 1.1, -1.1, 32);
- # Concatena o binário como string.
- # Divide a ondaNormalizada em conjuntos de 8 bits pra traduzir pra ascii.
- # Já passa em decimal para o arrayASCII (bin2dec).
- arrayAscii = [];
- i = 1;
- while (i <= length(ondaNormalizada))
- strBin = "";
- j = 1;
- while (j <= 8)
- if (i <= length(ondaNormalizada))
- strBin = strcat(strBin, num2str(ondaNormalizada(i)));
- i++;
- j++;
- else
- j++;
- endif
- endwhile
- arrayAscii = [arrayAscii, bin2dec(strBin)];
- endwhile
- printf("\n\n--> A palavra entrada foi: %s", char(arrayAscii));
- printf("\n\n\n");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement