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

07. Анализ записанного сигнала в MATLAB

Цель раздела

Научиться загружать записанный IQ-файл в MATLAB, строить временное и спектральное представления сигнала и оценивать основные параметры тестового тона.

1. Зачем нужен анализ в MATLAB

После наблюдения сигнала в HDSDR важно перейти к офлайн-анализу. Это позволяет:

  • многократно работать с одной и той же записью;
  • повторять вычисления;
  • сравнивать методы анализа;
  • оценивать частоту и уровень;
  • готовиться к последующему моделированию в Simulink.

MATLAB особенно удобен для первого анализа, потому что позволяет быстро:

  • прочитать данные;
  • построить графики;
  • вычислить FFT;
  • автоматизировать простые измерения.

2. Что нужно знать о записанном файле

До начала анализа нужно зафиксировать:

  • имя файла;
  • формат отсчётов;
  • частоту дискретизации;
  • частоту настройки приёмника;
  • тип данных;
  • порядок отсчётов I и Q.

Распространённый формат:

  • чередующиеся I/Q (interleaved);
  • int8, int16 или float;
  • последовательность вида
    I0, Q0, I1, Q1, I2, Q2, ...

Тип отсчётов зависит от программы, записавшей файл, и чтение с неверным типом даёт бессмысленный спектр:

Источник Формат Как читать
утилита командной строки rtl_sdr (.bin, .cu8) беззнаковые 8 бит, смещение 127,5 fread(fid, 'uint8') - 127.5
baseband-запись HDSDR / SDR# / SDR++ (.wav) знаковые 16 бит внутри WAV-файла audioread(filename, 'native'): I это столбец 1, Q это столбец 2
записи курса и AD9363 (.ci16) знаковые 16 бит, чередующиеся fread(fid, 'int16')

WAV-файл начинается с заголовка; fread с начала файла прочитает заголовок как отсчёты.

3. Основные задачи анализа

В рамках первого блока нужно:

  1. Загрузить IQ-файл.
  2. Преобразовать его в комплексный сигнал.
  3. Построить фрагмент временной формы.
  4. Построить спектр.
  5. Найти частоту основного пика.
  6. Оценить уровень тона.
  7. Сохранить результаты для отчёта.

4. Общая последовательность работы

Шаг 1. Загрузить данные

Прочитать сырой файл в массив.

Шаг 2. Сформировать комплексный сигнал

Объединить I и Q в комплексный вектор:

  • I: действительная часть;
  • Q: мнимая часть.

Шаг 3. При необходимости нормировать

Привести значения к удобному диапазону.

Шаг 4. Анализ во временной области

Построить действительную часть, мнимую часть или модуль сигнала.

Шаг 5. Спектральный анализ

Вычислить FFT и получить спектральную картину.

Шаг 6. Оценка пика

Найти индекс максимума и пересчитать его в частоту.

5. Пример структуры скрипта MATLAB

filename = 'tone_capture_iq.bin';
fs = 2.4e6;

fid = fopen(filename, 'rb');
raw = fread(fid, 'int16');
fclose(fid);

i_data = raw(1:2:end);
q_data = raw(2:2:end);

x = double(i_data) + 1j * double(q_data);
% для rtl_sdr .bin/.cu8: raw = fread(fid, 'uint8') - 127.5;
% для .wav из HDSDR:    y = audioread(filename, 'native'); x = double(y(:,1)) + 1j*double(y(:,2));

Nview = min(length(x), 2000);
t = (0:Nview-1)/fs;

figure;
plot(t, real(x(1:Nview)));
xlabel('Time, s');
ylabel('Amplitude');
title('Real part of IQ signal');
grid on;

Nfft = 4096;
X = fftshift(fft(x(1:Nfft), Nfft));
f = (-Nfft/2:Nfft/2-1)*(fs/Nfft);

figure;
plot(f, 20*log10(abs(X)+1e-12));
xlabel('Frequency, Hz');
ylabel('Magnitude, dB');
title('Spectrum of recorded tone');
grid on;

[~, idx] = max(abs(X));
f_peak = f(idx);

disp(['Peak frequency = ', num2str(f_peak), ' Hz']);

f_peak это смещение от частоты настройки приёмника, а не радиочастота: тон находится на f_tune + f_peak. Тот же скрипт лежит в blocks/block_01_intro_sdr/matlab/iq_analysis_example.m, а его Python-аналог в python/iq_analysis_example.py.

6. Что должно быть видно на графиках

Во временной области

Студент должен увидеть:

  • регулярные колебания;
  • устойчивую форму сигнала;
  • отсутствие явных выбросов и сильных искажений.

В спектре

Студент должен увидеть:

  • выраженный узкий пик;
  • положение пика, соответствующее тону;
  • уровень шума;
  • возможно, слабые паразитные составляющие.

7. Какие параметры полезно оценить

При первом анализе полезно определить:

  • частоту максимального спектрального пика;
  • относительный уровень пика;
  • ширину пика;
  • уровень шума;
  • возможные зеркальные составляющие;
  • возможную постоянную составляющую около нулевой частоты.

8. На что обратить внимание

1. Формат данных

Если тип или порядок I/Q неверен, спектр будет неправильным.

2. Шкала частот

Частоту дискретизации и центральную частоту нужно интерпретировать правильно.

3. Окно анализа

Слишком короткий фрагмент ухудшает разрешение по частоте.

4. Перегрузка

Если приёмник был перегружен, это может проявиться как:

  • лишние пики;
  • широкий «грязный» спектр;
  • искажения во временной области.

9. Что включить в отчёт

Рекомендуется добавить:

  • краткое описание использованного файла;
  • параметры записи;
  • график во временной области;
  • график спектра;
  • оценённую частоту пика;
  • краткий комментарий о качестве сигнала.

10. Выводы

После этого этапа студент должен:

  • уметь загружать IQ-файл в MATLAB;
  • строить временную форму и спектр;
  • определять частоту основного тона;
  • понимать, как офлайн-анализ подтверждает наблюдение в HDSDR.