Выпрямление графика АЧХ после БПФ - PullRequest
0 голосов
/ 17 октября 2011

Я загрузил логарифмический развернутый синус (с небольшим увеличением / исчезновением) в Matlab, запустил его через функцию fft и построил график, используя полулог.

Амплитуда входного сигнала практически постоянна в диапазоне 10 ... 20000 Гц. Поэтому для более точного представления происходящего я хотел бы видеть график почти горизонтальной линией.

Какую формулу следует применять, чтобы график AFR был горизонтальным?

Сценарий Matlab, который я использовал для построения графика:

fid = fopen('sweepfaded.raw','rb');   %open file
data = fread(fid, inf, 'float32');  %read in the data
fclose(fid);   %close file

n = size(data,1);

n = 2^nextpow2(n); % Next power of 2 from length of audio - 2-powers are faster to calculate

p = fft(data, n); % take the fourier transform 

nUniquePts = ceil((n+1)/2); 
p = p(1:nUniquePts); % select just the first half since the second half 
                       % is a mirror image of the first
p = abs(p); % take the absolute value, or the magnitude 
p = p/n; % scale by the number of points so that
           % the magnitude does not depend on the length 
           % of the signal or on its sampling frequency  
p = p.^2;  % square it to get the power 

sampFreq = 44100;
freqArray = (0:nUniquePts-1) * (sampFreq / n); % create the frequency array 
semilogx(freqArray, 10*log10(p)) 

xlabel('Frequency (Hz)') 
ylabel('Power (dB)') 

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

Data from FFT

P.S. Я не очень хорош в обработке аудиосигналов, я просто программист, поэтому не тратьте свое время, пытаясь объяснить, что происходит (хотя, думаю, когда-нибудь мне все равно придется прочитать хорошую книгу о DSP). Достаточно правильной формулы для вставки в мой скрипт Matlab.

Ответы [ 2 ]

2 голосов
/ 17 октября 2011

Ваш спектр будет ровным только в том случае, если у вас есть одинаковое количество энергии в каждом частотном интервале - это означает, что ваша синусоидальная волна должна проходить с постоянной (линейной) частотой в течение всего времени окна выборки БПФ.

В идеале вы также должны применять оконную функцию перед БПФ, чтобы уменьшить эффект спектральной утечки , однако это повлияет на результирующие величины развернутого синуса, и вы бынужно компенсировать это.

0 голосов
/ 18 октября 2011

Коэффициент коррекции отклика будет зависеть от точной скорости логарифмической развертки.Некоторые из гребешков в низкочастотном углу могут быть уменьшены путем использования подходящей оконной функции перед БПФ.

...