Фильтрация фурье-преобразований аудиосигналов - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть массив, содержащий преобразование Фурье входного аудиосигнала (амплитуды, соответствующие различным частотам).Я хочу выбрать определенные диапазоны сигнала без использования встроенных функций .Я выполнил следующие простые операции для одного и того же:

[audio_in,audio_freq_sampl]=audioread('F:\Signals and Systems\Take Me Home Country Roads (John Denver Cover).wav');
Length_audio=length(audio_in);
df=audio_freq_sampl/Length_audio;
frequency_audio=-audio_freq_sampl/2:df:audio_freq_sampl/2-df;
figure
FFT_audio_in=fft(audio_in);

n = length(FFT_audio_in);
init = 30000;
fin = 40000;  
conji= mod((n-init+2),n) ;
conjf= mod((n-fin+2),n) ;
fs_1(1:n) = 0.0 ;
fs_1(init:fin) = FFT_audio_in(init:fin);
fs_1(conji:conjf) = FFT_audio_in(conji:conjf);

plot(frequency_audio,abs(fs_1));

enter image description here

Как мы видим здесь, есть только один пик.другой должен быть виден на другом конце графика в диапазоне.

Песню можно найти здесь - https://www.youtube.com/watch?v=WF046Z5tPJE

Песня должна быть преобразована в файл .wav перед ее чтением.

Приведенный выше код должен дать мнеГрафик, содержащий два небольших пика, соответствующих диапазонам частот - (init , fin) и (conji , conjf).Однако, я получаю пик, соответствующий только 1-му диапазону. Оба этих диапазона находятся в пределах размера массива - FFT_audio_in.

1 Ответ

0 голосов
/ 08 февраля 2019

Ошибка заключается в следующих строках кода:

n = length(FFT_audio_in);
init = 30000;
fin = 40000;  
conji= mod((n-init+2),n) ;
conjf= mod((n-fin+2),n) ;
fs_1(1:n) = 0.0 ;
fs_1(init:fin) = FFT_audio_in(init:fin);
fs_1(conji:conjf) = FFT_audio_in(conji:conjf);

Оказывается, что в приведенных выше строках кода conji

n = length(FFT_audio_in);
init = n/4;
fin = n/4 + 10000;  
conji= mod((n-init+2),n) ;
conjf= mod((n-fin+2),n) ;
init_2 = min(conji , conjf);
fin_2 = max(conji , conjf);
fs_1(1:n) = 0.0 ;
fs_1(init:fin) = FFT_audio_in(init:fin);
fs_1(init_2:fin_2) = FFT_audio_in(init_2:fin_2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...