Этот пример показывает, как измерить и калибровать смещение частоты между передатчиком и приемником в получателе с помощью MATLAB ® и Communications Toolbox™. Можно использовать записанные сигналы или принимать сигналы в режиме реального времени, используя Пакет поддержки Communications Toolbox для Радио RTL-SDR. Приемник контролирует принятый сигнал, вычисляет смещение частоты между передатчиком и получателем и отображает его в командном окне MATLAB ®.
Чтобы запустить этот пример с помощью записанных сигналов, вам нужно следующее программное обеспечение:
Чтобы принимать сигналы в режиме реального времени, вам также нужно следующее оборудование:
Радио RTL-SDR
и следующее программное обеспечение
Полный список платформ SDR, поддерживаемых Communications Toolbox, см. в разделе «Поддерживаемые аппаратные средства» страницы Программно определяемого радио (SDR).
Если вы принимаете решение принимать сигналы в реальном времени с помощью радио, вам нужно настроить на известный широковещательный тональный сигнал пилот-сигнала или предоставить источник сигнала с известной центральной частотой, чтобы установить базовую линию. Если у вас нет доступного генератора сигналов, можно использовать недорогую рацию Family Radio Service в качестве источника. Обратите внимание, что источник сигнала должен быть узкополосным, причем синусоида является идеальным источником.
Все радио приемников показывают смещение частоты по сравнению с передатчиком. В некоторых случаях смещение частоты может быть больше, чем может обработать алгоритм приемника. Поэтому вам может потребоваться калибровать приемник, чтобы минимизировать смещение частоты.
Пример предоставляет следующую информацию о ссылке связи:
Количественное значение смещения частоты в Гц и PPM
Графическое представление качественного уровня ОСШ принимаемого сигнала
Если у вас есть передатчик, можно использовать его, чтобы сгенерировать узкополосный сигнал, такой как тональный сигнал.
Если у вас нет передатчика, вы можете использовать широковещательный сигнал. Для примера в США цифровые телевизионные сигналы ATSC включают в себя узкополосный пилот-тон на несущей RF. Тон управления обычно находится на номинальной частоте 309,440 кГц над нижним ребром канала. Если такой сигнал присутствует в вашей области, можно задать ожидаемое значение центральной частоты на частоту тонального сигнала. Этот пример использует тональный сигнал управления канала 29, который находится приблизительно на 560e6 + 309,440e3 Гц. Список количества каналов и значений частоты см. в североамериканских телевизионных частотах.
Если в качестве приемника используется радио RTL-SDR, укажите отображаемое значение коррекции PPM в качестве свойства FrequencyCorrection object™ RTL-SDR Приемник System, чтобы компенсировать смещение частоты. Обязательно используйте знак смещения в вашей спецификации. Как только вы это сделали, спектр, отображаемый системным объектом анализатора спектра приемника, должен иметь максимальную амплитуду приблизительно 0 Гц.
Начните передачу с вашего известного источника сигнала. Если вы находитесь в США, можно задать ожидаемую центральную частоту в пилотный тон ближнего цифрового ТВ-передатчика. Затем введите FrequencyCalibrationExample в Командном окне MATLAB или щелкните ссылку, чтобы запустить пример.
Пример отображает спектр полученного сигнала на частотной области значений от -200 кГц до 200 кГц и печатает предполагаемое смещение частоты в Гц и PPM в командном окне. В случае, показанном ниже, частота максимальной степени принимаемого сигнала составляет около -35 кГц.
Приемник запрашивает вход пользователя и инициализирует переменные. Затем он вызывает источник сигнала, блокатор постоянного тока, оценку смещения тонального сигнала и анализатор спектра в цикле. Цикл также отслеживает время радиосвязи, используя длительность системы координат.
% 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™ System, чтобы создать приемник, который вычисляет относительное смещение частоты между передатчиком и получателем.