FFT_N_SAMPLES = 4096; Fs =31250; alpha = 3.9 %% input data % read data from file filename = 'ADC.CSV'; fid=fopen(filename','rt'); data_in = fscanf(fid, '%d,'); fclose(fid); %% windowing for i=1:FFT_N_SAMPLES %Gaussian: tmp_n = abs(i - (FFT_N_SAMPLES)/2); tmp = alpha * tmp_n / (FFT_N_SAMPLES/2); coeff = exp(-0.5 * tmp*tmp); data_win(i) = data_in(i) * coeff; end %% fft data_fft = fft (data_win,FFT_N_SAMPLES); %% magnitude for i=1:FFT_N_SAMPLES/2 data_fft_abs(i) = 2.0 * abs(data_fft(i)); end %% maximum searching max = data_fft_abs(1); n_bin_max = 1; for i=1:FFT_N_SAMPLES/2 if (max < data_fft_abs(i)) max = data_fft_abs(i); n_bin_max = i; end end %% Gaussian interpolation m1 = data_fft_abs(n_bin_max-1); m2 = data_fft_abs(n_bin_max); m3 = data_fft_abs(n_bin_max+1); top_part = log (m3/m1); bot_part = 2*log(m2*m2/(m3*m1)); d = top_part/bot_part; % f = ( i + d ) * ( sr / n ) n_bin_response = n_bin_max + d; Frequency_Response = (n_bin_response-1) * Fs / (FFT_N_SAMPLES)