В этом примере показано, как измерить и калибровать для перемещения частоты между передатчиком и приемником в приемнике с помощью MATLAB® и Communications Toolbox™. Можно или использовать записанные сигналы или получить сигналы в режиме реального времени с помощью Пакета поддержки Communications Toolbox для Радио RTL-SDR. Приемник контролирует полученный сигнал, вычисляет перемещение частоты между передатчиком и приемником и отображает его в командном окне MATLAB®.
Чтобы запустить этот пример с помощью записанных сигналов, вам нужно следующее программное обеспечение:
Чтобы получить сигналы в режиме реального времени, вам также нужно следующее оборудование:
Радио RTL-SDR
и следующее программное обеспечение
Для полного списка Communications Toolbox поддерживаемые платформы SDR обратитесь к разделу Supported Hardware страницы открытия Программно определяемого радио (SDR).
Если вы принимаете решение получить сигналы в режиме реального времени с помощью радио, необходимо настроиться на известного широковещательного пилота, настраивают или предоставляют источнику сигнала известную центральную частоту, чтобы установить базовую линию. Если вы не имеете генератор сигнала в наличии, можно использовать недорогую Сервисную портативную радиостанцию Радио Семейства в качестве источника. Обратите внимание на то, что источник сигнала должен быть узкополосной связью с синусоидой, являющейся идеальным источником.
Все радиоприемники показывают смещение частоты по сравнению с передатчиком. В некоторых случаях смещение частоты может быть больше, чем алгоритм приемника может обработать. Поэтому вы, возможно, должны калибровать свой приемник, чтобы минимизировать смещение частоты.
Пример предоставляет следующую информацию о линии связи:
Количественное значение смещения частоты в Гц и PPM
Графическое представление качественного уровня ОСШ полученного сигнала
Если у вас есть передатчик, можно использовать его, чтобы сгенерировать узкополосный сигнал, такой как тон.
Если у вас нет передатчика, можно смочь использовать широковещательный сигнал. Например, в США, сигналы цифрового телевидения ATSC включают узкополосный экспериментальный тон на несущей RF. Экспериментальный тон обычно на номинальной частоте на 309,440 кГц выше базового края канала. Если такой сигнал присутствует в вашей области, можно установить ожидаемое центральное значение частоты к частоте тона. Этот пример использует экспериментальный тон канала 29, который является приблизительно в 560e6 + 309.440e3 Гц. Для списка номера канала и значений частоты, смотрите североамериканские телевизионные частоты.
Если вы используете радио RTL-SDR в качестве приемника, задаете отображенное значение коррекции PPM как свойство FrequencyCorrection Системы Приемника RTL-SDR object™, чтобы компенсировать смещение частоты. Обязательно используйте знак смещения в вашей спецификации. Если вы сделали это, спектр, отображенный спектром приемника, Системный объект анализатора должен иметь свою максимальную амплитуду на уровне примерно 0 Гц.
Начните передавать со своим известным источником сигнала. Если вы находитесь в США, можно установить ожидаемую центральную частоту на экспериментальный тон соседнего передатчика цифрового телевидения. Затем введите FrequencyOffsetCalibrationForReceiversExample
в командном окне MATLAB или нажатии кнопки кнопка 'Open example', чтобы открыться и запустить пример.
Пример отображает спектр полученного сигнала на частотном диапазоне от-200 кГц до 200 кГц и распечатывает предполагаемое смещение частоты в Гц и PPM в командном окне. В случае, показанном ниже, частота максимальной принимаемой мощности сигнала составляет приблизительно-35 кГц.
Приемник просит ввод данных пользователем и инициализирует переменные. Затем это вызывает источник сигнала, блокировщик DC, крупное тональное средство оценки смещения частоты и спектр анализатор в цикле. Цикл также отслеживает радио-время с помощью длительности системы координат.
% Request user input from command-line for application parameters userInput = helperFrequencyCalibrationUserInput; % Calculate system parameters based on the user input [fcParam,sigSrc] = helperFrequencyCalibrationConfig(userInput); % Create a DC blocker system object to remove the DC component of the % received signal and increase accuracy of the frequency offset estimation. dcBlocker = dsp.DCBlocker('Algorithm', 'Subtract mean'); % Create a coarse frequency offset estimation System Object to calculate % the offset. The system object performs an FFT on its input signal and % finds the frequency of maximum power. This quantity is the frequency % offset. CFO = comm.CoarseFrequencyCompensator( ... 'FrequencyResolution', 25, ... 'SampleRate', fcParam.FrontEndSampleRate); % Create a spectrum analyzer scope to visualize the signal spectrum scope = dsp.SpectrumAnalyzer(... 'Name', 'Actual Frequency Offset',... 'Title', 'Actual Frequency Offset', ... 'SpectrumType', 'Power',... 'FrequencySpan', 'Full', ... 'SampleRate', fcParam.FrontEndSampleRate, ... 'YLimits', [-40,10],... 'SpectralAverages', 50, ... 'FrequencySpan', 'Start and stop frequencies', ... 'StartFrequency', -200e3, ... 'StopFrequency', 200e3,... 'Position', figposition([50 30 30 40]));
msgLength = 0; radioTime = 0; secondCounter = 1; while radioTime < userInput.Duration rxSig = sigSrc(); rxSig = dcBlocker(rxSig); [~, offset] = CFO(rxSig); freqCorrection = (-offset / fcParam.ExpectedFrequency) * fcParam.FrontEndSampleRate; % Visualize spectrum and print results scope(rxSig); if radioTime > secondCounter fprintf(repmat('\b', 1, msgLength)); msg = sprintf(['Frequency offset = %f Hz,\n' ... 'Frequency correction value (Hz) = %f \n' ... 'Frequency correction value (PPM) = %f \n'], ... offset, -offset, freqCorrection); fprintf(msg); msgLength = numel(msg); secondCounter = secondCounter + 1; end % Update radio time radioTime = radioTime + fcParam.FrameDuration; end % Release all System objects release(sigSrc); release(dcBlocker); release(CFO);
В этом примере вы использовали Системные объекты Communications Toolbox™, чтобы создать приемник, который вычисляет относительное перемещение частоты между передатчиком и приемником.