Hann48 is OK now that the aliasing problem is gone

pull/5/head
Oona 2013-01-20 11:10:06 +02:00
rodzic 336c01849f
commit 06748fe211
1 zmienionych plików z 12 dodań i 11 usunięć

23
video.c
Wyświetl plik

@ -40,8 +40,8 @@ gboolean GetVideo(guchar Mode, double Rate, int Skip, gboolean Redraw) {
guchar Channel = 0, WinIdx = 0;
// Initialize Hann windows of different lengths
gushort HannLens[6] = { 64, 96, 128, 256, 512, 1024 };
for (j = 0; j < 6; j++)
gushort HannLens[7] = { 48, 64, 96, 128, 256, 512, 1024 };
for (j = 0; j < 7; j++)
for (i = 0; i < HannLens[j]; i++)
Hann[j][i] = 0.5 * (1 - cos( (2 * M_PI * i) / (HannLens[j] - 1)) );
@ -125,7 +125,7 @@ gboolean GetVideo(guchar Mode, double Rate, int Skip, gboolean Redraw) {
memset(out, 0, sizeof(out[0])*FFTLen);
// Hann window
for (i = 0; i < 64; i++) in[i] = pcm.Buffer[pcm.WindowPtr+i-32] / 32768.0 * Hann[0][i];
for (i = 0; i < 64; i++) in[i] = pcm.Buffer[pcm.WindowPtr+i-32] / 32768.0 * Hann[1][i];
fftw_execute(Plan1024);
@ -156,7 +156,7 @@ gboolean GetVideo(guchar Mode, double Rate, int Skip, gboolean Redraw) {
if (t >= NextSNRtime) {
// Apply Hann window
for (i = 0; i < FFTLen; i++) in[i] = pcm.Buffer[pcm.WindowPtr + i - FFTLen/2] / 32768.0 * Hann[5][i];
for (i = 0; i < FFTLen; i++) in[i] = pcm.Buffer[pcm.WindowPtr + i - FFTLen/2] / 32768.0 * Hann[6][i];
// FFT
fftw_execute(Plan1024);
@ -205,15 +205,16 @@ gboolean GetVideo(guchar Mode, double Rate, int Skip, gboolean Redraw) {
if (!Adaptive) WinIdx = 0;
else if (SNR >= 10) WinIdx = 0;
else if (SNR >= 9) WinIdx = 1;
else if (SNR >= 3) WinIdx = 2;
else if (SNR >= -5) WinIdx = 3;
else if (SNR >= -10) WinIdx = 4;
else WinIdx = 5;
else if (SNR >= 30) WinIdx = 0;
else if (SNR >= 10) WinIdx = 1;
else if (SNR >= 9) WinIdx = 2;
else if (SNR >= 3) WinIdx = 3;
else if (SNR >= -5) WinIdx = 4;
else if (SNR >= -10) WinIdx = 5;
else WinIdx = 6;
// Minimum winlength can be doubled for Scottie DX
if (Mode == SDX && WinIdx < 5) WinIdx++;
if (Mode == SDX && WinIdx < 6) WinIdx++;
WinLength = HannLens[WinIdx];