Ver Mensaje Individual
  #5 (permalink)  
Antiguo 29/03/2010, 13:10
yomismo138
 
Fecha de Ingreso: marzo-2010
Mensajes: 13
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Mi programa no llega al main

Perdonad ha sido un despiste jajja bueno aquí pego el código, se trata de un programa en el que leo un fichero wave, lo filtro en 3 bandas y escribo cada banda y la señal reconstruida en un fichero nuevo. Como veis al principio del main he colocado una traza a la cual no llega..

Un saludo a todos!Muchas gracias por el interés prestado!!

#include <iostream>
#include <cstdlib>
#include <fstream>

using namespace std;

//Declaración de Constantes
const long MAXMUE = 500000;
const unsigned short MAXCAD= 20;
const unsigned short MAXMEMIIR=2; //Coloco el numero de elementos
const unsigned short MAXCOEFIIR=3;

//Declaración de Estructura de Datos
typedef char TCadena[MAXCAD];

struct TCabWAV{
char RIFF[4];
int tamano;
char WAVE [4];
char fmt [4];
int tamfmt;
short fmtPCM;
short nCanales;
int mueseg;
int bytSeg;
short bytBlq;
short bytMue;
char DATA [4];
int bytData;
};

typedef short TInfo;
typedef float TCoef;

typedef TCoef TMemoriaFiltIIR[MAXMEMIIR];
typedef TCoef TCoefFiltIIR[MAXCOEFIIR];
typedef TInfo TVectorMuestras[MAXMUE];

struct TFileWAV{
TCabWAV cab;
TVectorMuestras datos;
};

//Declaración de Cabeceras de Procedimientos
void LeerFichWave(fstream &mfi, TFileWAV &wave);
void EscribirFichWave(fstream &mfo, TFileWAV &waveout);
void VisualizarCab(const TCabWAV cab);
void InicializacionMemFiltIIR(TMemoriaFiltIIR &mem_in,TMemoriaFiltIIR &mem_out);
void FiltradoIIR(TFileWAV &wave, TFileWAV &wave_out, TMemoriaFiltIIR &mem_in, TMemoriaFiltIIR &mem_out, TCoefFiltIIR &coef_A, TCoefFiltIIR &coef_B);

int main()
{

cout<<"empieza el main.."<<endl;
system("pause");

TCadena nombreout,nombreoutB1, nombreoutB2, nombreoutB3;
TFileWAV wave,waveout,wave_outB1,wave_outB2,wave_outB3;
fstream mfi, mfo,mfoB1, mfoB2, mfoB3;
long i, tamano;
float muestra;
TMemoriaFiltIIR mem_inB1,mem_outB1,mem_inB2,mem_outB2,mem_inB3,mem _outB3;
TCoefFiltIIR coefB1_A, coefB1_B, coefB2_A, coefB2_B, coefB3_A, coefB3_B;

//Abro y Creo el fichero de salida
cout<<"-------- SOFTWARE CRD POR BANDAS ----------"<<endl;
mfi.open("sultans.wav", ios::in |ios::binary);
if(!mfi.is_open()) {
cout<<"Error al abrir el fichero"<<endl;
system("pause");
}else{
cout<<"Por favor, inserte nombre de fichero que desea crear: ";
cin>>nombreout;
mfo.open(nombreout, ios::out|ios::binary);
cout<<"Por favor, inserte nombre de fichero que desea crear Banda1: ";
cin>>nombreoutB1;
mfoB1.open(nombreoutB1, ios::out|ios::binary);
cout<<"Por favor, inserte nombre de fichero que desea crear Banda2: ";
cin>>nombreoutB2;
mfoB2.open(nombreoutB2, ios::out|ios::binary);
cout<<"Por favor, inserte nombre de fichero que desea crear Banda3: ";
cin>>nombreoutB3;
mfoB3.open(nombreoutB3, ios::out|ios::binary);
}

//Leo Fichero de Entrada

LeerFichWave(mfi, wave);

//Visualizo Cabecera
VisualizarCab(wave.cab);

//Inicialización Constantes
InicializacionMemFiltIIR(mem_inB1,mem_outB1);
InicializacionMemFiltIIR(mem_inB2,mem_outB2);
InicializacionMemFiltIIR(mem_inB3,mem_outB3);

coefB1_A[0]=1 ;coefB1_A[1]=-1.9288 ;coefB1_A[2]=0.9313 ; coefB1_B[0]=0.0006 ;coefB1_B[1]=0.0012 ;coefB1_B[2]=0.0006;
coefB2_A[0]=1 ;coefB2_A[1]=-1.6833 ;coefB2_A[2]=0.7006 ; coefB2_B[0]=0.1497 ;coefB2_B[1]=0 ;coefB2_B[2]=-0.1497 ;
coefB3_A[0]=1 ;coefB3_A[1]=-1.4458 ;coefB3_A[2]=0.5690 ; coefB3_B[0]=0.7537 ;coefB3_B[1]=-1.5074 ;coefB3_B[2]=0.7537 ;

//Filtrado IIR 3 Bandas
wave_outB1.cab=wave.cab;
wave_outB2.cab=wave.cab;
wave_outB3.cab=wave.cab;

void FiltradoIIR(TFileWAV &wave, TFileWAV &wave_outB1, TMemoriaFiltIIR &mem_inB1, TMemoriaFiltIIR &mem_outB1, TCoefFiltIIR &coefB1_A, TCoefFiltIIR &coefB1_B);
void FiltradoIIR(TFileWAV &wave, TFileWAV &wave_outB2, TMemoriaFiltIIR &mem_inB2, TMemoriaFiltIIR &mem_outB2, TCoefFiltIIR &coefB2_A, TCoefFiltIIR &coefB2_B);
void FiltradoIIR(TFileWAV &wave, TFileWAV &wave_outB3, TMemoriaFiltIIR &mem_inB3, TMemoriaFiltIIR &mem_outB3, TCoefFiltIIR &coefB3_A, TCoefFiltIIR &coefB3_B);

//Proceso
waveout.cab=wave.cab;
tamano=wave.cab.bytData/2;

for(i=0;i<tamano;i++){
muestra=float(wave_outB1.datos[i]+wave_outB2.datos[i]+wave_outB3.datos[i]);
waveout.datos[i]=short(muestra);
}

//Escribo Fichero de Salida
EscribirFichWave(mfo, waveout);
EscribirFichWave(mfoB1, wave_outB1);
EscribirFichWave(mfoB2, wave_outB2);
EscribirFichWave(mfoB3, wave_outB3);

mfi.close();
mfo.close();
mfoB1.close();
mfoB2.close();
mfoB3.close();

system("pause");
return 0;
}

//Procedimientos Utilizados
void LeerFichWave(fstream &mfi, TFileWAV &wave){
long i,tamano;
TInfo datos;

mfi.read((char *)&wave.cab, sizeof(TCabWAV));

tamano=wave.cab.bytData/2;
for (i=0;i<tamano;i++){
mfi.read((char *)&datos, sizeof(TInfo));
wave.datos[i]=datos;
}

}

void EscribirFichWave( fstream &mfo, TFileWAV &waveout){
long i,tamano;
TInfo dato;

mfo.write((char *)&waveout.cab, sizeof(TCabWAV));

tamano=waveout.cab.bytData/2;
for(i=0;i<tamano;i++){
dato=waveout.datos[i];
mfo.write((char *)&dato, sizeof(TInfo));
}

}

void FiltradoIIR(TFileWAV &wave, TFileWAV &wave_out, TMemoriaFiltIIR &mem_in, TMemoriaFiltIIR &mem_out, TCoefFiltIIR &coef_A, TCoefFiltIIR &coef_B){

long i, tamano;
float muestra_in,muestra_out;

//wave_out.cab=wave.cab;

tamano=wave.cab.bytData/2;
for (i=0;i<tamano;i++){
muestra_in=float(wave.datos[i]);
muestra_out=muestra_in*coef_B[0]+mem_in[0]*coef_B[1]+mem_in[1]*coef_B[2]-mem_out[0]*coef_A[1]-mem_out[1]*coef_A[2];
wave_out.datos[i]=short(muestra_out);
if (i==0){
mem_in[1]=0.0;
mem_out[1]=0.0;
}else{
mem_in[1]=mem_in[0];
mem_out[1]=mem_out[0];
}
mem_in[0]=muestra_in;
mem_out[0]=muestra_out;
}
}

void InicializacionMemFiltIIR(TMemoriaFiltIIR &mem_in,TMemoriaFiltIIR &mem_out){

mem_in[0]=0.0;
mem_in[1]=0.0;
mem_out[0]=0.0;
mem_out[1]=0.0;

}

void VisualizarCab(const TCabWAV cab){

cout<<"CABECERA DEL FICHERO WAV"<<endl;
cout<<endl;
cout<<"Identificador RIFF: "<<cab.RIFF<<endl;
cout<<"Tamano fichero: "<<cab.tamano<<endl;
cout<<"Identificador WAVE: "<<cab.WAVE<<endl;
cout<<"Identificador del formato fmt: "<<cab.fmt<<endl;
cout<<"Tamano del bloque de formato: "<<cab.tamfmt<<endl;
cout<<"Formato PCM: "<<cab.fmtPCM<<endl;
cout<<"Numero de Canales: "<<cab.nCanales<<endl;
cout<<"Muestra por segundo: "<<cab.mueseg<<endl;
cout<<"Bytes por segundo: "<<cab.bytSeg<<endl;
cout<<"Bytes por bloque: "<<cab.bytBlq<<endl;
cout<<"Bytes por muestra: "<<cab.bytMue<<endl;
cout<<"Data: "<<cab.DATA<<endl;
cout<<"Numero de bytes de datos: "<<cab.bytData<<endl;

}