Перейти к содержанию

Лабораторная 2.1 — Частотная ось дискретизации и интерпретация

Цель

Понять, как одна и та же запись может выглядеть правдоподобно на FFT-графике, но приводить к неверному выводу, если неправильно интерпретировать Fs.

Что выполняется

В работе студент:

  1. строит временной preview комплексного сигнала;
  2. рассчитывает FFT с корректной и намеренно неправильной частотной осью;
  3. сравнивает measured peak для правильного и ошибочного Fs;
  4. фиксирует frequency error и проверяет влияние DC offset и шума.

Результат

После выполнения работы должны быть получены:

  • график временной формы I/Q;
  • сравнение корректной и ошибочной FFT-оси;
  • metrics JSON с expected tone и двумя вариантами интерпретации;
  • инженерный вывод о критичности metadata Fs.

Что приложить к отчёту

  • значение Fs, длину FFT и expected tone;
  • график lab21_sampling_time_domain.png;
  • график lab21_sampling_frequency_axis.png;
  • measured peak для correct/wrong interpretation;
  • краткий вывод о том, почему визуально похожий спектр не гарантирует правильный инженерный смысл.

Подробная техническая часть

Почему это важно

Спектр имеет смысл только вместе с правильным Fs. Если Fs указан неверно, каждый бин FFT отображается на неверную физическую частоту, даже когда форма графика по-прежнему выглядит правдоподобно.

Эксперимент

Скрипт генерирует комплексный тон со следующими параметрами:

  • корректная частота дискретизации Fs = 1,0 МГц;
  • намеренно неверная интерпретация Fs = 0,8 МГц;
  • ненулевое смещение DC;
  • аддитивный шум;
  • известный ожидаемый тон около 123,456 кГц.

Работа сравнивает:

  • временной предпросмотр I/Q;
  • модуль FFT с корректной частотной осью;
  • тот же модуль FFT с неверной частотной осью;
  • измеренную ошибку частоты пика для обеих интерпретаций.

Запуск

Из корня репозитория:

python blocks/block_02_signals_and_sampling/python/sampling_analysis.py

Или запустите представительный набор лабораторных:

python tools/run_all_labs.py

Ожидаемые артефакты

Артефакт Смысл
docs/assets/lab21_sampling_time_domain.png предпросмотр I/Q во временной области
docs/assets/lab21_sampling_frequency_axis.png верная и неверная интерпретация Fs на оси FFT
docs/assets/lab21_sampling_metrics.json ожидаемый тон, измеренные пики и ошибки интерпретации

Проверки интерпретации

  • Верная интерпретация должна помещать тон рядом с ожидаемыми 123,456 кГц.
  • Неверная интерпретация должна заметно сдвигать измеренный пик, хотя форма спектра по-прежнему выглядит разумной.
  • JSON с метриками должен показывать малую ошибку для верной оси и намного большую для неверной.
  • Временной предпросмотр также помогает выявить смещение DC и риск ограничения до перехода к выводам в частотной области.

Чего ожидать

Expected tone: 123456.000 Hz
Measured peak with correct Fs: 123474.121 Hz
Measured peak with wrong Fs: 98779.297 Hz
Correct interpretation error: 18.121 Hz
Wrong interpretation error: -24676.703 Hz
  • «Ошибка» 18 Гц при верной Fs, не ошибка. Это квантование по бинам FFT: пик читается в ближайшем центре бина. При 16 384 отсчётах и 1 МС/с бины отстоят на 61 Гц, поэтому ошибка остаётся меньше половины бина.
  • При неверной Fs каждая частота масштабируется в 0,8 раза: 123 474 × 0,8 = 98 779 Гц. Форма спектра идентична: именно поэтому ошибку легко пропустить.
  • Ошибка частоты дискретизации на 20 % дала частотную ошибку 24,7 кГц. Поэтому поле метаданных Fs так же важно, как сами отсчёты.

Упражнения

  1. Тот же файл по ошибке прочитан с Fs = 1,2 МГц. Предскажите сообщаемую частоту тона до запуска.
  2. Сколько отсчётов нужно, чтобы ошибка квантования по бинам была меньше 1 Гц при 1 МС/с?
  3. Известно, что тон на 200,0 кГц, а анализ сообщает 160,0 кГц. Какую частоту дискретизации принял анализ, если истинная: 1 МС/с?
Ответы (проверены запуском скрипта лабораторной)
  1. Все частоты масштабируются на 1,2 / 1,0: 123 474,1 × 1,2 ≈ 148 169 Гц, ошибка около +24,7 кГц.
  2. Пик читается в ближайшем бине, поэтому ошибка не больше половины бина, Fs / (2N). Чтобы получить меньше 1 Гц при 1 MS/s, нужно N > 500 000; ближайшая степень двойки: N = 524 288 (бин 1,9 Гц). Интерполяция между бинами даёт то же на гораздо меньшем числе отсчётов.
  3. Найденная частота масштабируется вместе с принятой частотой дискретизации: 160 / 200 × 1 MS/s = 0,8 MS/s это та же ошибка, что в этой лабораторной.

Чек-лист отчёта (расширенный)

  • Записаны принятые Fs, размер FFT и частота тона.
  • Объяснено, почему один и тот же модуль FFT может подтверждать и верный, и неверный вывод.
  • Приложены временной предпросмотр и график сравнения частотной оси.
  • Приведены ошибки частоты для верной и неверной интерпретации из JSON с метриками.
  • Указано, какое поле метаданных необходимо защищать в реальном процессе записи IQ.