0% encontró este documento útil (0 votos)
40 vistas10 páginas

Proy 02

Este documento describe el desarrollo de un proyecto para generar una melodía musical mediante el uso de un oscilador IIR. Explica conceptos como la transformada Z, las frecuencias de las notas musicales, y detalla el código utilizado para definir las duraciones y frecuencias de las notas, generar las señales de sonido de cada nota usando un oscilador, y concatenarlas para reproducir la melodía completa. El resultado es una reproducción continua de más de 30 segundos de la melodía, y una gráfica de las frec
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descargue como PDF, TXT o lea en línea desde Scribd
Descargar como pdf o txt
0% encontró este documento útil (0 votos)
40 vistas10 páginas

Proy 02

Este documento describe el desarrollo de un proyecto para generar una melodía musical mediante el uso de un oscilador IIR. Explica conceptos como la transformada Z, las frecuencias de las notas musicales, y detalla el código utilizado para definir las duraciones y frecuencias de las notas, generar las señales de sonido de cada nota usando un oscilador, y concatenarlas para reproducir la melodía completa. El resultado es una reproducción continua de más de 30 segundos de la melodía, y una gráfica de las frec
Derechos de autor
© © All Rights Reserved
Formatos disponibles
Descargue como PDF, TXT o lea en línea desde Scribd
Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1/ 10

Procesamiento digital de señales

Proyecto 02

Generación de una melodía

Semestre 2023-1
Índice

Índice 1
Objetivo 2
Introducción 2
Transformada Z 2
Oscilador IIR 3
Frecuencias de las notas musicales 4
Material 5
Desarrollo 5
Resultados 7
Conclusiones 8
Bibliografía 8
Anexos 8
Código 8

1
Objetivo
Entender las diferentes formas de obtener un oscilador donde la transformada Z
juega un papel importante para uno de los métodos, además de comprobar que las
frecuencias son importantes en diversos temas, en este caso en el muestreo y la
escucha de las notas musicales de la melodía.

Introducción

Transformada Z
La transformada Z es una herramienta matemática que se utiliza para analizar y
diseñar sistemas discretos, como sistemas de control, filtros digitales, sistemas de
comunicaciones y otros. Es una generalización de la transformada Laplace para
sistemas continuos a sistemas discretos, donde la variable independiente es el
tiempo continuo y se cambia por una variable discreta llamada tiempo muestral.

La Transformada Z se representa como una función de una variable compleja Z,


cuyo valor se calcula para una serie de puntos específicos en el plano complejo. La
función se define como:


−𝑛
𝑋(𝑍) = ∑ 𝑥(𝑛)𝑍
𝑛=−∞

donde 𝑋(𝑍) es la transformada Z, 𝑥(𝑛) es una función discreta de tiempo y z es


una variable compleja.

La Transformada Z tiene una serie de propiedades similares a la transformada


Laplace, y se puede utilizar para analizar y diseñar sistemas discretos de la misma
manera que se utiliza la transformada Laplace para sistemas continuos.

Propiedades de la TZ
● Linealidad
● Retardo en el tiempo
𝑛
● Multiplicación por 𝑎
● Derivada en 𝑍
● Convolución

entre otras, además de que hay tablas que relacionan las funciones más
importantes en 𝑥(𝑛) con su transformada z 𝑋(𝑍).

2
Oscilador IIR
Un oscilador IIR (Infinite Impulse Response) es un tipo de oscilador que utiliza una
serie de polinomios y retroalimentación para generar una señal de onda periódica.
Estos osciladores son llamados "IIR" debido a que el efecto de la retroalimentación
no tiene fin, es decir, la respuesta al impulso es infinita en el tiempo. Son utilizados
en diferentes aplicaciones como en sintetizadores de audio, filtros, control de
procesos, etc.

Hay tres métodos para poder generar un oscilador:


- Con una tabla de datos con una secuencia de un ciclo en “N” puntos y otra
para frecuencias submuestreadas
- Programando las función senoidal desarrolladas por series de Taylor.
- Programando una ecuación en diferencias de un SLITD tipo IIR.

Para esta última, contendrá dos polos conjugados complejos con magnitud 1
ubicados en el círculo unitario que tendrán una frecuencia de oscilación.

2π𝑓𝑎𝑛 2π #𝑐𝑖𝑐𝑙𝑜𝑠
ω0 = 𝐹𝑠
= 𝑁𝑝𝑢𝑛𝑡𝑜𝑠

Círculo unitario

Donde la función transferencia de un oscilador con dos polos complejos queda de la


siguiente forma:
1 𝑏0
𝐻(𝑧) = −1 −1 = −1 −2
(1−𝑃1𝑍 ) (1−𝑃2𝑍 ) 1+𝑎1𝑍 +𝑎2𝑍

Donde aplicando las propiedades de la transformada Z se obtiene la respuesta al


impulso del sistema, si hacemos que las constantes tengan los valores

𝑎1 =− 2 𝑐𝑜𝑠(ω0)

3
𝑎2 = 1
𝑏0 = 𝑠𝑒𝑛 (ω0)

se tiene la respuesta al impulso de la siguiente forma

ℎ(𝑛) = 𝑠𝑒𝑛((𝑛 + 1)ω0)𝑈(𝑛)

si queremos que la salida 𝑦(𝑛) sea igual a la respuesta al impulso anteriormente


expresada, la entrada tiene que ser un impulso δ(𝑛) y la ecuación en diferencias
con condiciones iniciales

𝑦(− 2) = 0
𝑦(− 1) = 𝐴 𝑠𝑒𝑛 ω0

queda de la siguiente manera:

𝑦(𝑛) =𝑏0𝑥(𝑛) + 𝑎1𝑦(𝑛 − 1) − 𝑎2𝑦(𝑛 − 2)

Frecuencias de las notas musicales


La frecuencia es una medida de la cantidad de veces que un evento se repite por
unidad de tiempo. En el contexto de la música, la frecuencia se refiere a la cantidad
de veces que una onda sonora se repite en un segundo, y se mide en Hertz (Hz).

Cada nota musical se asocia con una frecuencia específica. Por ejemplo, la nota
musical "La" a 440 Hz ,y es una de las frecuencias de referencia para la afinación de
instrumentos musicales. A continuación se muestran las frecuencias de cada nota
que se utilizó en este trabajo.

Do 261 Hz
Re 293 Hz
Mi 329 Hz
Fa 349 Hz
Sol 392 Hz
La 440 Hz
Si 493 Hz

4
Material
Computadora con Matlab que tenga por lo menos las siguientes características
● Sistema operativo Windows 10 o superior
● Mínimo de procesador Intel o AMD x86-64
● Mínimo 4 GB de memoria ram

Desarrollo

Para el desarrollo de este trabajo se usó el entorno de Matlab donde se realizó la


codificación para poder generar una melodía a base de un oscilador que se
encuentra en una función quedando de la siguiente manera.

function x = genera_sonido(N, t, f)

% Generación de la señal del oscilador


x = sin(2*pi*f*(1:N)/N);

end

Donde la función "genera_sonido" genera una señal de sonido utilizando un


oscilador de función seno. Recibe tres parámetros de entrada: N, t y f.
N es el número de muestras de la señal generada, t es el tiempo y f es la frecuencia
de la señal. La función devuelve un vector llamado x que contiene las muestras de
la señal generada. La señal se genera usando la fórmula "sin(2pif*(1:N)/N)" eso
genera una señal de una onda senoidal.

En seguida declaramos dos vectores donde el primero define un vector llamado


“duraciones” que contiene la duración de cada nota de la melodía, la segunda línea
llamada “frecuencias” definimos las notas en frecuencias (en Hz) que queremos
escuchar, en este caso se usaron las notas de la melodía “Pin pon” estas
frecuencias se pueden relacionar con las notas como se muestra a continuación:

Notas de la melodía “Pin pon”

Sol Do Sol Mi Fa Sol Sol

5
392 262 392 329 349 392 392

Sol Do Sol Mi Fa Sol


392 262 392 329 349 392

Sol Do Re Mi Fa Sol Sol


392 262 293 329 349 392 392

La Sol Fa Mi Re Do
440 392 349 329 293 262

Sol Do Sol Mi Fa Sol Sol


392 262 392 329 349 392 392

Donde los vectores quedan de la siguiente forma

% Duración de cada nota


duraciones = [0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5];

% Frecuencias de las notas de la melodía


frecuencias = [392 262 392 324 349 392 324 392 262 392 324 349 392 392 262
293 324 349 392 324 440 392 349 329 293 261 392 262 392 324 349 392 324];

Generamos otro vector llamado “melodia”, este se utilizara para almacenar las
señales de sonido de cada nota de la melodía.

Además colocamos un bucle “for” el cual se encarga de iterar sobre el número de


notas del vector de “frecuencias”, en cada iteración del bucle, se genera una señal
de sonido para cada nota específica usando la función “genera_sonido” que se
describió previamente, la función recibe como argumentos al número de muestras
(8000),la duración de la nota “duraciones(i)” y la frecuencia de la nota
“frecuencias(i)”. la señal generada se almacena en la variable llamada “nota”.
Finalmente concatenamos las señales de la variable “nota” con la variable “melodia”

% Inicialización de la señal de la melodía


melodia = [];

% Generación de la señal de la melodía


for i = 1:length(frecuencias)

% Generación de la señal del oscilador para una nota


nota = genera_sonido(8000, duraciones(i), frecuencias(i));

% Concatenación de la señal de la nota a la melodía


melodia = [melodia nota];

6
end

Para poder escuchar la melodía tenemos que mandar a llamar a la variable


“melodia” usando el comando “soundsc” con 8000 y podemos hacer que se
grafiquen los puntos de las notas en frecuencia de la melodía.

% Reproducción de la melodía
soundsc(melodia, 8000);

% Grafica de las notas en Frecuencias


plot (frecuencias,'-*')

Resultados
Al colocar el código empezará a sonar la melodía de manera continua, sin hacer
pausas por lo que la melodía no se reconocerá, pero sí se diferencia el sonido de
cada una de las notas, se resalta que en donde una nota se repite el sonido se
escucha por más tiempo, en total se escuchan más de 30 segundos.

En la gráfica que se muestra a continuación son las notas en frecuencias que


sonaron con respecto al tiempo.

7
Conclusiones

Sandoval Martinez Crystian Alberto:


Con el desarrollo de este trabajo se comprendió que hay diversas formas de crear
un oscilador en este caso para poder generar las notas de una melodía, donde en
un vector se colocan las frecuencias de cada nota y usando el entorno de Matlab se
pudo reproducir y graficar las notas.

El método que se enfoca más a los temas del curso es programando una ecuación
en diferencias de un SLITD tipo IIR. Ya que este tiene a la transformada Z como
antecedente al igual que los términos de estabilidad del círculo unitario, porque se
nos pide que tenga dos polos conjugados de magnitud uno, ya que si los polos se
encuentran fuera del círculo unitario el sistema será inestable

Bibliografía
Conceptos básicos de procesamiento digital de señales - Larry Hipólito Escobar
Salguero - Facultada de Ingenieria UNAM - 2008
http://www.itq.edu.mx/carreras/IngElectronica/archivos_contenido/Apuntes%20de%2
0materias/CDF1202_Comm_Digitales/1_Proc_conversion_AD.pdf

Anexos

Código
Codificado en Matlab una función que genera sonido al indicarle la frecuencia del
tono que se desea escuchar.

function x = genera_sonido(N, t, f)

% Generación de la señal del oscilador


x = sin(2*pi*f*(1:N)/N);

end

% Duración de cada nota


duraciones = [0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5
0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5];

% Frecuencias de las notas de la melodía

8
frecuencias = [392 262 392 329 349 392 392 392 262 392 329 349
392 392 262 293 329 349 392 392 440 392 349 329 293 262 392 262 392 329 349
392 392];

% Inicialización de la señal de la melodía


melodia = [];

% Generación de la señal de la melodía


for i = 1:length(frecuencias)

% Generación de la señal del oscilador para una nota


nota = genera_sonido(8000, duraciones(i), frecuencias(i));

% Concatenación de la señal de la nota a la melodía


melodia = [melodia nota];

end

% Reproducción de la melodía
soundsc(melodia, 8000);

% Grafica de las notas en Frecuencias


plot (frecuencias,'-*')
title('Notas de melodía')
xlabel('Tiempo (s)')
ylabel('Notas en frecuencias Hz')

También podría gustarte