Как добраться спектра аудо файл через мексиканскую шляпу
У меня есть звуковой файл с расширением wav. Я получил амплитудные значения этого файла. Затем я сгенерировал значения вейвлета мексиканской шляпы, используя y = (1-t*t)*exp(-1*t * t/2). Теперь мне нужно получить спектр этого аудиофайла. Как это сделать. Вот мой код
Что я уже пробовал:
#include <iostream> #include "WavData.cpp" #include <graphics.h> #include<stdio.h> #include<math.h> #define PI 3.141592653589793238462643383279502884197169399375105820974 using namespace std; using namespace yazz::audio; //drawing function void DrawSamples(const double* source, int dataLen, int start, int finish){ for(int i = start; i < finish; i++){ if(i == start) moveto((getmaxx()-30)*i/(finish - start)+10, getmaxy()/2 - source[i]); else lineto((getmaxx()-30)*i/(finish - start)+10, getmaxy()/2 - source[i]); } } /**************mexican hat(ricker) function*************************************/ double Mhat(double time, double a, double b) { double mhat; mhat = 200*(2/(sqrt(3)*pow(PI, 1./4)))*(1-pow((time-b)/a,2))*exp(-1*pow((time-b)/a,2)/2); return mhat; } /**************************************************/ int main(){ WavData* wavData = WavData::readFromFile("son.wav");//read aduio file const double *normalizedData = wavData->getNormalizedData();//to get values of audio file int dataLength = wavData->getNumberOfSamples();//to get length of audio file values /******************************************/ initwindow(1300, 600, "Mexican hat", 0, 0, false, true); setbkcolor(WHITE); cleardevice(); setcolor(CYAN); /******************ricker*************************/ //generate mexican hat double m = -5, n = 5, dt = 0.15625, a = 1, b = 0;//dt = 0.15625 int length = (n - m)/0.15625;//0.15625 double* time = new double[length]; //fill time[] for(int i = 0; i < length; i++) { time[i] = m; m = m + dt; } double* mhat = new double[length]; //here I get values of mexican hat wavelet for(int j = 0; j < length; j++){ mhat[j] = Mhat(time[j], a, b); } //now what need I to do delete[] normalizedData; delete[] time; delete[] mhat; getch(); return 0; }