42 #include "EST_error.h"
43 #include "EST_Track.h"
45 #include "sigpr/EST_Window.h"
46 #include "EST_Option.h"
47 #include "sigpr/EST_fft.h"
48 #include "sigpr/EST_spectrogram.h"
49 #include "sigpr/EST_misc_sigpr.h"
56 EST_pre_emphasis(sig, psig, op.
F(
"preemph"));
59 raw_spectrogram(sp, psig, op.
F(
"frame_length"), op.
F(
"frame_shift"),
60 op.
I(
"frame_order"), op.
present(
"slow_fft"));
64 cout <<
"no scaling\n";
72 op.
set(
"sp_range", 1.0);
75 op.
set(
"sp_wcut", 1.0);
78 op.
set(
"sp_bcut", 0.0);
79 scale_spectrogram(sp, op.
F(
"sp_range"),op.
F(
"sp_wcut"),op.
F(
"sp_bcut"));
83 void scale_spectrogram(
EST_Track &sp,
float range,
float wcut,
float bcut)
85 float max, min, scale, v;
111 float mag = (float)range / (
float)(bcut - wcut);
115 v = (((sp.
a_no_check(i, j) - min) / scale) - wcut) * mag;
116 if (v > range) v = range;
117 if (v < 0.0) v = 0.0;
128 int frame_length = (int) (length * (
float) sig.
sample_rate() +0.5);
129 int frame_shift = (int) (shift * (
float) sig.
sample_rate() +0.5);
134 if (frame_length > order)
136 EST_warning(
"frame_length reduced to %f (%d samples) to fit order\n",
142 int num_frames= (int)ceil(sig.
num_samples()/(float)frame_shift);
146 sp.
resize(num_frames, order/2, FALSE);
153 make_window(frame_length, window_vals,-1);
155 for (
int k = 0 ; k < num_frames ; k++)
157 int pos = frame_shift * k;
158 int window_start = pos - frame_length/2;
172 int state = slow?power_spectrum_slow(real, imag):power_spectrum(real, imag);
175 fprintf(stderr,
"FFT Failed for frame %d\n", k);
176 for (
int i = 0; i < order /2; ++i)