string TcpPacket::toString () { ostringstream out; Packet::PAYLOAD_BUFFER opts = getOptions (); out << "TCP packet" << std::endl << "\tsource port: \t" << getSourceport() << std::endl << "\tdest port: \t" << getDestport() << std::endl << "\tsequencenum: \t" << getSequencenum() << std::endl << "\tacknum: \t" << getAcknum() << std::endl << "\theaderlen: \t" << getHeaderlength() << " bytes" << std::endl << "\tflags: \t\t0x" << std::hex << std::setw(4) << std::setfill ('0') << getFlags () << std::endl << std::dec << "\twindowsize: \t" << getWindowsize() << std::endl << "\tchecksum: \t0x" << std::hex << std::setw(4) << std::setfill ('0') << getChecksum () << std::endl << std::dec << "\turgent pnt: \t" << getUrgentpointer() << std::endl << "\toptions len: \t" << opts.size << std::endl << "\toptions: \t" << opts.toString (); opts.destroy (); return out.str (); }
void ClusterMeltSegmenter::initialise(int fs) { samplerate = fs; if (featureType == FEATURE_TYPE_CONSTQ || featureType == FEATURE_TYPE_CHROMA) { // run internal processing at 11025 or thereabouts int internalRate = 11025; int decimationFactor = samplerate / internalRate; if (decimationFactor < 1) decimationFactor = 1; // must be a power of two while (decimationFactor & (decimationFactor - 1)) ++decimationFactor; if (decimationFactor > Decimator::getHighestSupportedFactor()) { decimationFactor = Decimator::getHighestSupportedFactor(); } if (decimationFactor > 1) { decimator = new Decimator(getWindowsize(), decimationFactor); } CQConfig config; config.FS = samplerate / decimationFactor; config.min = fmin; config.max = fmax; config.BPO = nbins; config.CQThresh = 0.0054; constq = new ConstantQ(config); constq->sparsekernel(); ncoeff = constq->getK(); fft = new FFTReal(constq->getfftlength()); } else if (featureType == FEATURE_TYPE_MFCC) { // run internal processing at 22050 or thereabouts int internalRate = 22050; int decimationFactor = samplerate / internalRate; if (decimationFactor < 1) decimationFactor = 1; // must be a power of two while (decimationFactor & (decimationFactor - 1)) ++decimationFactor; if (decimationFactor > Decimator::getHighestSupportedFactor()) { decimationFactor = Decimator::getHighestSupportedFactor(); } if (decimationFactor > 1) { decimator = new Decimator(getWindowsize(), decimationFactor); } MFCCConfig config(samplerate / decimationFactor); config.fftsize = 2048; config.nceps = 19; config.want_c0 = true; mfcc = new MFCC(config); ncoeff = config.nceps + 1; } }
void ClusterMeltSegmenter::extractFeaturesMFCC(const double* samples, int nsamples) { if (!mfcc) { std::cerr << "ERROR: ClusterMeltSegmenter::extractFeaturesMFCC: " << "No mfcc: initialise not called?" << std::endl; return; } if (nsamples < getWindowsize()) { std::cerr << "ERROR: ClusterMeltSegmenter::extractFeatures: nsamples < windowsize (" << nsamples << " < " << getWindowsize() << ")" << std::endl; return; } int fftsize = mfcc->getfftlength(); vector<double> cc(ncoeff); for (int i = 0; i < ncoeff; ++i) cc[i] = 0.0; const double *psource = samples; int pcount = nsamples; if (decimator) { pcount = nsamples / decimator->getFactor(); double *decout = new double[pcount]; decimator->process(samples, decout); psource = decout; } int origin = 0; int frames = 0; double *frame = new double[fftsize]; double *ccout = new double[ncoeff]; while (origin <= pcount) { // always need at least one fft window per block, but after // that we want to avoid having any incomplete ones if (origin > 0 && origin + fftsize >= pcount) break; for (int i = 0; i < fftsize; ++i) { if (origin + i < pcount) { frame[i] = psource[origin + i]; } else { frame[i] = 0.0; } } mfcc->process(frame, ccout); for (int i = 0; i < ncoeff; ++i) { cc[i] += ccout[i]; } ++frames; origin += fftsize/2; } delete [] ccout; delete [] frame; for (int i = 0; i < ncoeff; ++i) { cc[i] /= frames; } if (decimator) delete[] psource; features.push_back(cc); }
void ClusterMeltSegmenter::extractFeaturesConstQ(const double* samples, int nsamples) { if (!constq) { std::cerr << "ERROR: ClusterMeltSegmenter::extractFeaturesConstQ: " << "No const-q: initialise not called?" << std::endl; return; } if (nsamples < getWindowsize()) { std::cerr << "ERROR: ClusterMeltSegmenter::extractFeatures: nsamples < windowsize (" << nsamples << " < " << getWindowsize() << ")" << std::endl; return; } int fftsize = constq->getfftlength(); if (!window || window->getSize() != fftsize) { delete window; window = new Window<double>(HammingWindow, fftsize); } vector<double> cq(ncoeff); for (int i = 0; i < ncoeff; ++i) cq[i] = 0.0; const double *psource = samples; int pcount = nsamples; if (decimator) { pcount = nsamples / decimator->getFactor(); double *decout = new double[pcount]; decimator->process(samples, decout); psource = decout; } int origin = 0; // std::cerr << "nsamples = " << nsamples << ", pcount = " << pcount << std::endl; int frames = 0; double *frame = new double[fftsize]; double *real = new double[fftsize]; double *imag = new double[fftsize]; double *cqre = new double[ncoeff]; double *cqim = new double[ncoeff]; while (origin <= pcount) { // always need at least one fft window per block, but after // that we want to avoid having any incomplete ones if (origin > 0 && origin + fftsize >= pcount) break; for (int i = 0; i < fftsize; ++i) { if (origin + i < pcount) { frame[i] = psource[origin + i]; } else { frame[i] = 0.0; } } for (int i = 0; i < fftsize/2; ++i) { double value = frame[i]; frame[i] = frame[i + fftsize/2]; frame[i + fftsize/2] = value; } window->cut(frame); fft->process(false, frame, real, imag); constq->process(real, imag, cqre, cqim); for (int i = 0; i < ncoeff; ++i) { cq[i] += sqrt(cqre[i] * cqre[i] + cqim[i] * cqim[i]); } ++frames; origin += fftsize/2; } delete [] cqre; delete [] cqim; delete [] real; delete [] imag; delete [] frame; for (int i = 0; i < ncoeff; ++i) { cq[i] /= frames; } if (decimator) delete[] psource; features.push_back(cq); }