Hay que ver como cuestan las matemáticas.
Aqui os pongo un script en python para generar una "onda" serrada de 22 KHz con muestreo a 44.1 KHz y sin cuantización (números coma flotante):
#! /usr/bin/env python
import math
import os
# Ancho de banda en Hz
bw=20000
# frecuencia de la onda a muestrear
freq = 1.1025*bw
# frecuencia angular de la onda a muestrear
w = math.pi*freq
# frecuencia de muestreo inicial (44.1 KHz)
sampl1 = 44100.
# frecuencia angular del filtro de Shannon
w1 = math.pi*sampl1
# numero de muestras a tomar
m1 = 100
# instante en que tomamos el primer muestreo.
ini_p = 0.06/freq
# frecuencia de remuestreo. Multiplo de la frecuencia de muestreo
sampl2 = sampl1 * 10
# numero de muestras en remuestreo. Son sampl2/sampl1 veces mas
m2 = m1 *int(sampl2 /sampl1)
# Ventana del filtro (terminos del sumatorio de "Shannon")
ventana1 = 10
# ventana en remuestreo
ventana2 = ventana1 *int(sampl2 /sampl1)
# lista donde anadir los puntos del muestreo en pares (tiempo, amplitud)
muestra = []
# lista donde anadir los puntos del remuestreo en pares (tiempo, amplitud)
remuestra = []
# fichero de salida con el muestreo de la onda de prueba sin error de cuantizacion
# se llama onda.dat
f = open('onda.dat','w')
# anadir ceros que desplazan el muestreo. Retardo para poder "meter el filtro".
for i in range(0,ventana1*2):
tiempo = ini_p+(-ventana1*2+i)/sampl1
muestra.append([tiempo,0.0])
f.write(str(tiempo)+' '+ str(0.0)+'\n')
# Muestreo de la onda
for i in range(0,m1):
tiempo = ini_p + i/sampl1
valor = math.sin(w*tiempo)
muestra.append([tiempo,valor])
f.write(str(tiempo)+' '+ str(valor)+'\n')
f.close()
No hay más que copiar y pegar en un editor de texto. Guardar con nombre "sampleo.py", instalar python (www.python.org), ejecutar con doble click si habeís asociado correctamente los archivos y en el fichero onda.dat teneís esto:
Una onda bien serrada, de la que tanto os gustan.
Si jugaís con los parámetros del script podeís pintar todo tipo de barbaridades.