Descargar la presentación
La descarga está en progreso. Por favor, espere
1
Computación 2 - 8 Sergio Floody
2
AM-FM La Amplitud Modulada corresponde a la multiplicación de una señal por otra. En general en la música se refiere a ella como tremolo Frecuencia portadora Frecuencia moduladora
3
AM-FM La Frecuencia Modulada corresponde a la modificación de la fase de una señal por otra. En general en la música se refiere a ella como vibrato Frecuencia portadora Frecuencia moduladora
4
AM-FM
5
AM-FM //$$---- Form CPP ----
// #include <vcl.h> #pragma hdrstop #include "UnitAMFM.h" #include "math.h" #include "fstream.h" #pragma package(smart_init) #pragma resource "*.dfm"
6
AM-FM //estruc de encabezado wav struct TEncabezadoTipo {
char ID_bloque_riff[4]; //contiene los caracteres "RIFF" int tamano_bloque_riff; char formato_archivo_riff[4]; //contiene los caracteres WAVE, avi u otros char ID_bloque_fmt[4]; //"fmt " <--ojo con el espacio int tamano_bloque_fmt; //16 (largo de bloque de aquí en adelante) short formato; //1:PCM short canales; //1:mono 2:stereo int fs; // frecuencia de muestreo 44100, 48000, etc int bytes_por_segundo; //bytes por segundo short alineacion; //alineacion short bits_por_muestra; //8, 16, etc char ID_bloque_data[4]; //aqui es "data" int tamano_bloque_data; //tamano bloque data };
7
AM-FM TForm1 *Form1; TEncabezadoTipo enc; //encabezado
fstream F; //archivo short son01[749700]; //sonido sin procesar int NTx; // __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { }
8
AM-FM void __fastcall TForm1::btnAbrirClick(TObject *Sender) {
//variables locales //int es de 32 bits (4bytes) //short de 16 (2bytes) //unsigned char es de 8 bits (1byte) short d16b; //de 16 bits if (OpenDialog1->Execute()) //cierra culquier ejecucion anterior MediaPlayer1->Close(); //abre el archivo usando OpenDialog F.open(OpenDialog1->FileName.c_str(),ios::in|ios::binary); //lee las caracteristicas del archivo wav F.read((char *)&enc,sizeof(enc));
9
AM-FM //prepara para graficar Chart1->Series[0]->Clear();
//ajustalos ejes Chart1->LeftAxis->Maximum = ; Chart1->LeftAxis->Minimum = ; //inicializa el arreglo for(int i = 0; i <= ; i++) { son01[i] = 0; } //tamaño de los datos NTx = enc.tamano_bloque_data/(enc.bits_por_muestra/8);
10
AM-FM //lee el archivo de audio y lo grafica
for(int i = 1; i <=749700; i++) { F.read((char*)&d16b,2); Chart1->Series[0]->Add(d16b); son01[i-1] = d16b; } //cierra el archivo F.close(); //activa mediaplayer MediaPlayer1->FileName = OpenDialog1->FileName; MediaPlayer1->Open(); }//cierra el if
11
AM-FM void __fastcall TForm1::btnGenerarAMClick(TObject *Sender) {
short d16b; double fport; double fmod; double t; //tiempo double dt; //periodo de muestreo = 1/fs double amp; double prof; short Amax; //de 16 bits (2bytes) //primer subchunck //la funcion strcpy copia un string en otro strcpy(enc.ID_bloque_riff,"RIFF");
12
AM-FM //enc.tamano_bloque_riff = fs*(16cuantizacion/8)*1canal*17segundos + 36 de offset //36 de offset se refiere al tamaño de los subchuncks RIFF_chunck y fmt_chunck enc.tamano_bloque_riff = 44100*2*1*17+36; //la funcion strcpy copia un string en otro strcpy(enc.formato_archivo_riff,"WAVE"); //segundo subchunck strcpy(enc.ID_bloque_fmt,"fmt "); enc.tamano_bloque_fmt = 16; enc.formato = 1; enc.canales = 1; enc.fs = 44100; enc.bytes_por_segundo = 44100*2*1; //fs*(16cuantizacion/8)*1canales enc.alineacion = 2*1; //(16cuantizacion/8)*canales enc.bits_por_muestra = 16;
13
AM-FM //tercer subchunck strcpy(enc.ID_bloque_data,"data");
enc.tamano_bloque_data = 44100*2*1*17; // fs*(cuantizacion/8)*1canal*17segundos //lectura datos fport = StrToFloat(txtPortadora->Text); fmod = StrToFloat(txtModuladora->Text); amp = StrToFloat(txtAmplitudFinal->Text); prof = StrToFloat(txtProfMod->Text); Amax = 10000*amp; t = 0; dt = 1.0/44100; Amax = 10000;
14
AM-FM //crea y abre el archivo F.open("am.wav",ios::out|ios::binary);
//escribe el encabezado usa sizeof para determinar el tamaño F.write((char *)&enc,sizeof(enc)); //prepara para graficar Chart1->Series[0]->Clear(); //ajustalos ejes Chart1->LeftAxis->Minimum = ; Chart1->LeftAxis->Minimum = ;
15
AM-FM for (int i = 1; i <= 44100*17; i++) {
d16b = Amax*(1 - prof + prof*cos(2*M_PI*fmod*t) ) *sin(2*M_PI*fport*t); //crea una muestra a la vez F.write((char *)&d16b,2); //escribe una muestra a la vez t += dt; // t = t + dt Chart1->Series[0]->Add(d16b); } //cierra el archivo F.close();
16
AM-FM for (int i = 1; i <= 44100*17; i++) {
d16b = Amax*sin(2*M_PI*fport*t + prof*sin(2*M_PI*fmod*t) ); F.write((char *)&d16b,2); //escribe una muestra a la vez t += dt; Chart1->Series[0]->Add(d16b); } //cierra el archivo F.close(); El resto es igual!!!!!
17
Tareas Usar una señal de audio como una voz para realizar amplitud modulada en una onda senoidal. Usar una señal de audio como una voz para realizar frecuencia modulada en una onda senoidal. Desarrollar un chorus, su funcionamiento es similar al flanger pero los retardos de tiempo son generados por una señal aleatorea que ha sido filtrada por un pasa bajo. Desarrollar un filtro pasa banda cuya frecuencia central varie senoidalmente
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.