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. Основные задачи анализа¶
В рамках первого блока нужно:
- Загрузить IQ-файл.
- Преобразовать его в комплексный сигнал.
- Построить фрагмент временной формы.
- Построить спектр.
- Найти частоту основного пика.
- Оценить уровень тона.
- Сохранить результаты для отчёта.
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.