Mientras no posteaba, trabajabe en esto, así que estoy seguro que a más de alguien le servirá este pequeño algoritmo en matlab.}

%MODULACION Y DEMODULACION AM

%PROGRAMA PARA REALIZAR LA MODULACION Y DEMODULACION DE UNA SENAL

close all

clear all

fm=input(’Introduzca frecuencia de muestreo: ‘);

fs=input(’Introduzca frecuencia de la señal: ‘);

fc=input(’Introduzca frecuencia de la señal portadora: ‘);

%MODULACION

t=0:1/fm:5; %definiendo el tiempo real

L=length(t); %sacando la longitud del vector tiempo

f1=sin(2*pi*fs*t); %senal de informacion

subplot(2,2,1); plot(t(1:500),f1(1:500),’r');title(’senal de entrada’),grid on,xlabel(’tiempo’),ylabel(’m(t)’)

f2=cos(2*pi*fc*t); %creando cosenoidal para lograr la modulacion

subplot(2,2,2); plot(t(1:100),f2(1:100));title(’señal portadora’),grid on,xlabel(’tiempo’),ylabel(’p(t)’)

f3=f1.*f2; %multiplicacion de las dos funciones

subplot(2,2,3:4); plot(t(1:500),f3(1:500));title(’señal modulada’),grid on,xlabel(’tiempo’),ylabel(’m(t)*p(t)’)

hold on

plot(t(1:500),f1(1:500),’r')

pause

g1=abs(fftshift(fft(f1)))/L; %transformando en frecuencia f1

k=[(-L/2)+1:L/2];

k1=(1/(0.795*2*pi))*k;

figure

subplot(3,1,1), plot(k1,g1),title(’espectro de magnitud de la senal de entrada’),grid on,xlabel(’frecuencia’),ylabel(’m(f)’)

g2=abs(fftshift(fft(f2)))/L; %transformando en frecuancia f2

subplot(3,1,2); plot(k1,g2), title(’espectro de magnitud de la senal portadora’),grid on,xlabel(’frecuencia’),ylabel(’p(f)’)

g3=abs(fftshift(fft(f3)))/L; %transformando en frecuencia f3

subplot(3,1,3); plot(k1,g3),title(’espectro de magnitud de la senal modulada’),grid on,xlabel(’frecuencia’),ylabel(’m(f) conv p(f)’)

pause

%DEMODULACION

%asumiendo cero perdidas en el medio

f4=f3.*f2; %demodulando

figure %figura 3

subplot(2,2,1:2);plot(t(1:500),f4(1:500)),title(’senal demodulada’),grid on,xlabel(’tiempo’),ylabel(’R(t)’)

g4=abs(fftshift(fft(f4)))/L; %transformando en frecuencia la senal demodulada

subplot(2,2,3:4);plot(k1,g4),title(’espectro de magnitud de la senal demodulada’),grid on,xlabel(’frecuencia’),ylabel(’R(f)= m(f) conv p(f)’)

pause

%FILTRO

[b,a]= butter(15,3*fs/(fc/2)); %se generan los parametros del filto

Fx=filtfilt(b,a,f4); %creando el filtro pasa banda

[H,W] = freqz(b,a,15);

figure

plot(abs(H),’r'),grid on,xlabel(’frecuencia’),ylabel(’magnitud’),title(’filtro’); %graficando el filtro

pause

figure

plot(t(1:1000),Fx(1:1000)),title(’comparacion entre la senal filtrada y original{m(t)}’), grid on,xlabel(’tiempo’),ylabel(’amplitud’)

hold on

plot(t(1:1000),f1(1:1000),’r'),legend(’senal filtrada’,’senal original’) %se grafican la senal original y la senal recuperda

%se ha modulado y demodulado una senal

Ejemplo de corrida

Introduzca frecuencia de muestreo: 1000

Introduzca frecuencia de la señal: 4

Introduzca frecuencia de la señal portadora: 100

matlab

Se muestran las gráficas de la señal que quiere ser transmitida, la portadora cosenoidal y el producto de ambas con su respectiva envolvente.

Se muestran los espectros de magnitud en frecuencia de las gráficas anteriores respectivamente.

Asumiendo cero pérdidas en el medio.

Aquí se inicia la demodulación multiplicando la señal modulada nuevamente por una cosenoidal idéntica a la portadora que además deben estar sincronizadas en fase.
También se muestra el espectro de magnitud en frecuencia de dicha señal. Este gráfico nos dice que ya tenemos nuevamente nuestra señal original y que es necesario filtrar esta señal para recuperarla.

matlab

Este es el filtro pasa banda que necesitamos por que nos dejará pasar sólo bajas frecuencias.

matlab

Podemos ver el resultado del proceso de modulación y demodulación.
Observaos que en efecto tenemos la señal original, sólo que la amplitud de dicha señal es ahora menor, pero al tener la forma tenemos toda la información, aquí la señal para ser utilizada físicamente tendría que pasar por una etapa de amplificación.


37 Comments on “Modulación y Demodulación AM de una señal, usando MATLAB”

You can track this conversation through its atom feed.

  1. David Morgan says:

    Estoy cursando la materia de comunicaciones analógicas y efectivamente tengo que hacer una práctica de modulación AM.
    corrí el algoritmo en MATLAB que hiciste, pero me marca un error, es este:
    ??? Error using ==> /
    Matrix dimensions must agree.

    ??? Error using ==> edit
    Can’t edit the directory ‘/’.

    No soy experto en MATLAB, así que te pido ayuda para solucionar esto!

    gracias!

  2. KS3 says:

    q raro que te aparezca un error….a lo mejor en el copiado y pegado algo se quedo, tampoco se que version de matlab estas ocupando, bueno q creo que no hay ninngun comando especial.

    mejor te voy a enviar el archivo .m a tu correo
    a lo mejor asi funciona
    por que a mi no me da ese error
    saludos

  3. KS3 says:

    ya te lo envia a romd_7@hotmail.com
    espero te funcione

  4. cristian BG says:

    Hola quisiera tener tu ayuda, estoy tratando de diseñar un filtro pasabajo de una modulacion con portadora= 100KHz y mensaje de 30Hz, el tema es que no puedo diseñarlo, no me funciona tengo errores…tu me podrias ayudar?? soy novato en esto de matlab

    agradeciendo tu disposicion

  5. KS3 says:

    @Cristian:
    Fijate especialmente en la funcion butter de matlab que te creara el orden del filtro dependiendo de tus frecuencias, acordata que en matlab es super importante(mas importante q las otras freqs) la frecuencia de muestreo de la senal.

    butter te creara los parametros del filtro, y se los hay funciones como filter, filtfilt que te filtran la senal con los parametros creados con butter.

    revisa bien las frecuencias que salen en este mismo algoritmo en la funcion butter que ahi esta la solucion al problema

  6. cristian BG says:

    mmmmm me complica un monton…como te decia soy novato…que es lo q debo ahcer para diseñarlo con estos datos?? mensaje 30Hz y portadora de 100KHz…please ayudame

    saludos desde chile

  7. KS3 says:

    fs=input(’Introduzca frecuencia de la señal: ‘);

    fc=input(’Introduzca frecuencia de la señal portadora: ‘);
    .
    .
    .
    [b,a]= butter(15,3*fs/(fc/2))

  8. Luis Carlos says:

    Hola!

    He probado el codigo de matlab para la modulacion AM con el ejemplo que has publicado y ha salido igualito, sin embargo no entiendo que es eso de frecuencia de muestreo y frecuencia de la señal. Por ejemplo si tengo una señal de voz que es de casi 4k, que debo introducir para modularla en AM?

    espero una pronta respuesta, muchas gracias

  9. maria fernanda says:

    hola estoy cursando comunicaciones I y me mandaron a hacer un modulador y un demodulador fm, ya tengo el modulador listo pero tengo problemas para generar el codigo de demodulacion fm en matlab, por favor agradeceria su pronta ayuda, si pueden enviarme un archivo en matlab a mi correo seria mejor, gracias!!

  10. KS3 says:

    @Luis carlos:
    la frecuencia de muestreo es mucho mas importante para matlab por q matlab no veria diferencia trabajar con un tiempo por ejemplo 1 segundo o 1000 segundos mientras el numero de muestras sea el mismo….
    la frecuencia de la senal en ese caso la definimos para una cosenoidal cos(2pi*f*t)….pero para una senal de musica ya no podemos hablar de frecuencia…..por q la senal no es periodica…..los 4kbps signifcan la compresion del archivo, una tasa de cambio de informacion por unidad de tiempo….entre mayor sea ese numero con mejor calidad sonara la cancion por que tendra mayor numero de muestras en funcion del tiempo…..

  11. KS3 says:

    @maria fernanda:
    con todo gusto te mando el archivo pero no se si te sirva por que vos queres hacer una modulacion fm y ese ya es otro rollo, aunque creo poder ayudarte.

    nota:
    esta es la modulacion am mas burda, o la que sale de las transformadas de frecuencia, existen muchos tipos de modulacion AM

  12. Altagraccia says:

    Hola.. Probé la simulación que que dejaste en esta página y me parece excelente.. No tuve ningún problema a la hora de la simulación.. Bueno solo que tuve que arreglar las comillas pero eso no nada del otro mundo.. Me gustaría que me mandaras a mi correo simulaciones en FM.. Por favor..

  13. william.mejia says:

    La realidad es que cuando se entiende a la perfección la teoría de lo que se quiere programar, hacerlo es sencillo, en este caso no hay nada que sea del otro mundo…casi que solo se esta graficando las señales….

    Matlab es una excelente herramienta y la modulación un tema muy grande, vamos a ver si nos ponemos las pilas para seguir haciendo librería sobre modulación AM y modulación FM

  14. william.mejia says:

    P.D.
    yo soy el mismo KS3….eso es cosa del pasado

  15. carlos says:

    estoy usando matlab 7 corri el codigo y me parece ??? Error using ==> mrdivide
    Matrix dimensions must agree.
    lo hice a mano para ver si era un error del cpy page y me aparece el mismo error me gustaria que me lo mandara al correo en .m para ver si me funciona que matlab utilizo para este codigo?

  16. Jiro Enrrique Tuta says:

    Hola…
    Estoy trabajando con el Matlab 6.1, corri tu algoritmo cambie las comillas y me genera error, no se que estoy haciendo mal.
    Te pido el favor si me puedes enviar el archivo para darle solucion a mi problema.
    Muchas gracias!!!

  17. Elizabeth says:

    puedes ayudarme con la simulacion de fm en matlab simulink (modulador y demodulador)

  18. Diego says:

    Que tal compañero,

    ayudame con la explicacion del codigo (modulacion y demodulacion) especialmente sobre la modulacion, y si puedo ponerle COS en vez de SEN,, en la señal modulante,,,

    recien lo copie y voy a analizarlo en casa, pero en todo caso acolitame con una explicacion mas detallada de cada linea de codigo… gracias de antemano

  19. Andrea says:

    holap,
    He probado el codigo de matlab para la modulacion AM con el ejemplo que has publicado pero me sale errores.. no se muy bien como utilizar el programa.
    Podrias ayudarme o mandarme el ejemplo q hiciste directo a mi mail por fa.. stoy en examenes y seria chevere ver este ejemplo simulado en matlab, me ayudaria para estudiar.

    GRACIAS

  20. william.mejia says:

    pues para el examen no creo que te quede tiempo de probar, pero te animo a que jugues un poco con matlab, asi se aprende mucho, aprender a corregirle los errores por que el mismo matlab te indica donde esta el error en el codigo del subprograma, la realidad no soy un experto aunque dentro de poco continuare subiendo algoritmos de este tipo, que sirva a entender estos temas que se ven en la universidad.

    saludos

  21. gaston chamba says:

    hola quisiera saber si tu trabajas con el software proteus combinado con matlab a traves de “virtual serial port” necesito ayuda

  22. william.mejia says:

    La combinacion proteus matlab nunca la he utilizado

  23. francisco fernandez says:

    Lo he probado hoy y sale muy bien..excelente!

  24. ebFIME says:

    HOLA! podrias enviarme el archivo a mi correo me urgue! y te lo agradeceria, muchas gracias mi correo es:

    ebfime@hotmail.com

  25. william.mejia says:

    al copiar y pegar deberia funcionar correctamente

  26. daren says:

    saludos cordiales
    amigo ayudame porfa
    a l mejor tu sabes tambien simukink necesito un sistema fm con ruido,
    de antemano gracias

  27. daren says:

    amigo porfa si puedes enviarme a mi correo t lo agradecere mucho…
    darenleo@hotmail.com

  28. natalia says:

    hola william queria preguntarte algo con que fin estas colocando el filtro??? gracias

  29. Juan Pablo says:

    Que tal, alguien sabe de algun programa igual a este pero con modlacion FM gracias.

  30. JORGE says:

    funciona perfecto gracias

  31. MANUEL says:

    disculpa me interesa mucho este programa lo corri y me marca errores, no se que pase, porfavor te pido si me puedes mandar el archivo te lo agradeceria mucho gracias

  32. MANUEL says:

    disculpa me interesa mucho este programa lo corri y me marca errores, no se que pase, porfavor te pido si me puedes mandar el archivo te lo agradeceria mucho gracias mi correo es jalvarian111@hotmail.com

  33. william.mejia says:

    creo que es importante tambien que aprendan a depurar los programas de matlab

  34. yesid jimenez says:

    Hola como estas, tengo un inconveniente y no me corre tu programa ¿sera que me lo puedes enviar? es para la version 6.1.0.
    Gracias…

  35. Juan Camilo says:

    holaestoy intentando correr el codigo en matlab 7.5 pero me sae el siguiente error me puedes colaborar???

    ??? Undefined function or method ‘modulacion’ for input arguments of type ‘char’.

  36. Oscar says:

    Hola! intenté utilizar tu código, pero no me corre, estoy utilizando la versión R2007a crees que sea por eso ?…de todos modos mandame el archivo m a mi correo si? porfas mi mail es knight_dakness@hotmail.com

    gracias bro!

  37. Javi says:

    Hola! estoy realizando un trabajo y necesito el codigo que aparece arriba pero no me funciona, podrias enviarme la modulacion y demodulacion AM, me seria muy util, MUCHAS GRACIAS, javirota18@hotmail.com

    Un saludo

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>