Функция FIR-фильтра для Wavefile в C
Я пытался создать функцию, которая реализует FIR-фильтр, который читает входной волновой файл и выводит отфильтрованный волновой файл в отдельный файл. У меня уже есть рабочие функции, которые считывают число и значения коэффициентов из файла двоичного фильтра, а также функции, которые читают волновой файл и сохраняют данные в заголовок и данные, а также записывают новую функцию волнового файла. Я попытался отфильтровать волновой файл и вывести новый файл, однако он не звучит так, как должен. Вот что я попробовал:
int filter(char *filter_filename, char *input_wavefilename, char *output_wavefilename)
{
// Variables
int coeff_num, // Number of coefficients in filter file
i, // Loop variable
j; // Loop variable
double *coeff_values; // Value of coefficient in filter file
char *data, // data of wavefile
*output_data, // New data to be writen the the filtered wavefile
*output_path = "output/question3/"; // Where the output file will be written to
pcm_wavefile_header_type header; // Header of the wavefile
// Reading & Error checking the coefficients
if(read_coefficients(&coeff_num, &coeff_values, filter_filename) != 0)
{
return -1;
}
// Reading & Error checking the wavefiles
if (read_pcm_wavefile(&header, &data, input_wavefilename)!=0)
{
return -1;
}
// Variables
int number_of_samples = header.Subchunk2Size/header.BlockAlign;
char data_sample[number_of_samples];
// Creating output data
for(j = 0; j < number_of_samples; j++)
{
output_data[j] = 0;
for(i = 0; i < coeff_num; i++)
{
output_data[j] += (char)coeff_values[i]*data[j-i];
}
}
// Write wavefile
write_pcm_wavefile(&header, output_data, output_wavefilename, output_path);
// Freeing the data
free(data);
free(output_data);
return 0; // Successful
}
Кто-нибудь может увидеть, что я делаю не так?
Спасибо!