#include using namespace std; vector readMFCC(const string &filename) { // This function reads MFCC feature values from file vector features; ifstream infile("mfcc_files/" + filename); if (!infile) { cerr << "Error opening file: " << filename << endl; return features; } double val; while (infile >> val) { features.push_back(val); } infile.close(); return features;// } double euclideanDistance(const vector& a, const vector& b) { double sum = 0; for (size_t i = 0; i < a.size(); i++) { sum += pow(a[i] - b[i], 2); } return sqrt(sum); } int main() { vector classes = {"AKAL", "AMAR", "ANEKO", "EDURO", "KANOK"}; vector> class_files = { {"AKAL00.mfc", "AKAL01.mfc", "AKAL02.mfc", "AKAL03.mfc", "AKAL04.mfc"}, {"AMAR00.mfc", "AMAR01.mfc", "AMAR02.mfc", "AMAR03.mfc", "AMAR04.mfc"}, {"ANEK00.mfc", "ANEK01.mfc", "ANEK02.mfc", "ANEK03.mfc", "ANEK04.mfc"}, {"EDUR00.mfc", "EDUR01.mfc", "EDUR02.mfc", "EDUR03.mfc", "EDUR04.mfc"}, {"KANOK00.mfc", "KANOK01.mfc", "KANOK02.mfc", "KANOK03.mfc", "KANOK04.mfc"} }; int numClasses = classes.size(); vector> distances(numClasses); vector avgError(numClasses, 0.0); for (int c = 0; c < numClasses; c++) { // Read seed (first file) vector seed = readMFCC(class_files[c][0]); double sum = 0; for (size_t f = 0; f < class_files[c].size(); f++) { vector sample = readMFCC(class_files[c][f]); double dist = euclideanDistance(seed, sample); distances[c].push_back(dist); sum += dist; } avgError[c] = sum / class_files[c].size(); } // Print Output cout << left << setw(10) << "Classes" << setw(45) << "Class Members (Distances)" << "Average Error" << endl; cout << string(80, '-') << endl; for (int c = 0; c < numClasses; c++) { cout << left << setw(10) << classes[c]; for (size_t d = 0; d < distances[c].size(); d++) { cout << fixed << setprecision(2) << distances[c][d]; if (d != distances[c].size() - 1) cout << ", "; } cout << setw(10) << " " << avgError[c] << endl; } return 0; }