前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RTL-SDR&Matlab软件定义无线电(一)

RTL-SDR&Matlab软件定义无线电(一)

作者头像
yichen
发布2023-08-10 15:44:07
6890
发布2023-08-10 15:44:07
举报

看一下这本书:《Software Defined Radio using MATLAB Simulink and the RTL-SDR》,这篇文章主要说一下环境配置与测试

下载地址:https://ww2.mathworks.cn/campaigns/offers/download-rtl-sdr-ebook.html

很明显,用的 Matlab 和 RTL-SDR,Matlab 可以淘宝30多块钱买个账号

RTL-SDR 尽量买原装进口的,我试了两家不同的国内产的 RTL-SDR,在别的软件上都可以用,但是 Matlab 识别不了,最后狠心买了个贵的原装进口的一点阻碍都没有,很轻松的就识别了

Matlab 下好之后去附加功能中搜索 RTL SDR 安装就行,然后点击管理

如果没装过驱动应该会让你用 zadig 安装驱动。然后 Test Connection,能找到设备就行

或者直接在命令行敲命令:sdrinfo,检查能不能识别到

同时在 Simulink 中应该也有了 RTL SDR 的模块,选择 Simulink,然后随便创建一个

在 Library Browser 中就可以看到了,这是一个 RTL-SDR 的接收机,它是一个参数化的接口,可以实时的把 RTL-SDR 的采样值送入 Simulink

将附件中的 rtlsdr_book_library 添加到路径中

然后看一下 Simulink Library Browser,是不是有 RTL-SDR Book Library 这个库,没有的话刷新一下

打开附件的 intro\rtlsdr_rx_startup_simulink.slxc 之后,修改 Centre Frequency 的频率为 433.92MHz 就能收到 433.92MHz 的信号了

点击上面的 Run,运行起来,找个 443 的射频遥控器按一下就能看到频谱图出现了变化

然后来看一下 rtlsdr_rx_startup_matlab.m,这是 Matlab 的代码,里面先设置了一堆 RTL-SDR 的参数

代码语言:javascript
复制
rtlsdr_id           = '0';          % RTL-SDR ID
rtlsdr_tunerfreq    = 433.92e6;     % RTL-SDR tuner frequency in Hz
rtlsdr_gain         = 25;           % RTL-SDR tuner gain in dB
rtlsdr_fs           = 2.4e6;        % RTL-SDR sampling rate in Hz
rtlsdr_frmlen       = 4096;         % RTL-SDR output data frame size
rtlsdr_datatype     = 'single';     % RTL-SDR output data type
rtlsdr_ppm          = 0;            % RTL-SDR tuner parts per million correction
sim_time            = 60;           % simulation time in seconds

然后创建了一些对象

代码语言:javascript
复制
% rtl-sdr object            使用RTL-SDR对象,设置的参数是前面写好的
obj_rtlsdr = comm.SDRRTLReceiver(...
    rtlsdr_id,...
    'CenterFrequency', rtlsdr_tunerfreq,...
    'EnableTunerAGC', false,...
    'TunerGain', rtlsdr_gain,...
    'SampleRate', rtlsdr_fs, ...
    'SamplesPerFrame', rtlsdr_frmlen,...
    'OutputDataType', rtlsdr_datatype ,...
    'FrequencyCorrection', rtlsdr_ppm );

% spectrum analyzer objects  使用了两个频谱分析对象,一个设置为FFT格式,一个设置为瀑布流格式
obj_specfft = dsp.SpectrumAnalyzer(...
    'Name', 'Spectrum Analyzer FFT',...
    'Title', 'Spectrum Analyzer FFT',...
    'SpectrumType', 'Power density',...
    'FrequencySpan', 'Full',...
    'SampleRate', rtlsdr_fs);
obj_specwaterfall = dsp.SpectrumAnalyzer(...
    'Name', 'Spectrum Analyzer Waterfall',...
    'Title', 'Spectrum Analyzer Waterfall',...
    'SpectrumType', 'Spectrogram',...
    'FrequencySpan', 'Full',...
    'SampleRate', rtlsdr_fs);

通过一帧的数据量除以采样率,用来控制仿真运行的时间

代码语言:javascript
复制
rtlsdr_frmtime = rtlsdr_frmlen/rtlsdr_fs;

通过仿真,监听在对应的频率,实现的效果与 Simulink 是一致的

代码语言:javascript
复制
% check if RTL-SDR is active 先检查RTL-SDR设备是不是能用
if isempty(sdrinfo(obj_rtlsdr.RadioAddress))
    error(['RTL-SDR failure. Please check connection to ',...
        'MATLAB using the "sdrinfo" command.']);
end

% reset run_time to 0 (secs)  初始化时间
run_time = 0;

% run while run_time is less than sim_time   当前时间只要不超过设定的时间就会一直跑
while run_time < sim_time
    
    % fetch a frame from the rtlsdr     RTL-SDR获取到的数据帧存储在rtlsdr_data中
    rtlsdr_data = step(obj_rtlsdr);
    
    % update spectrum analyzer windows with new data
    % 将 rtlsdr_data 更新到 obj_specfft 和 obj_specwaterfall
    step(obj_specfft, rtlsdr_data);
    step(obj_specwaterfall, rtlsdr_data);
    
    % update run_time after processing another frame  运行时间
    run_time = run_time + rtlsdr_frmtime;
    
end

RTL-SDR 使用的 R820T 调谐器能够接收到 25MHz 到 1.75GHz,把工作目录切换到:spectrum,打开 exploring_the_spectrum.slx,通过这个例子可以观察各种信号的频谱图

中心频率是可以通过 GUI 界面进行调节的,当前这个设置 RTL-SDR 的中心频率是 99MHz,同时采样率被设置为了 2.8MHz,这样 RTL-SDR 采样的范围是:99-1.4 到 99+1.4,也就是在 97.6MHz 到 100.4MHz 都会被 RTL-SDR 捕捉到

调整好中心频率后点击 Start Simulation 就会开始解析射频信号,后面我们会分析这些信号,分析的前提是需要把这些信号调整到中心频率上,比如当前看到有两个比较明显的信号,都是 ±1 左右,因此把 Centre Frequency ±1 即可把其中一个信号频率设置为中心频率

当然还需要微调一下

另一个参数是增益(Gain),简而言之,增益就是放大倍数,需要注意提高增益可能导致噪声随着所需信号的增加而增加

书中通过这个例子介绍了一些常见信号的频谱特征(FM电台信号、2G、3G、4G蜂窝电话信号、433MHz的无线传感器信号、数字电视信号),但是因为教程是国外的,频段是有差距的,有些在国内对应的频率啥也没有

我从网上搜了搜国内的频率,观察到一些波形跟书中描述的很像的,但也不知道是不是,等后面解析信号的时候再看吧

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-05-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 陈冠男的游戏人生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档