1.ADALM PLUTO的官方资源算不得少,FM解调就是其中最简单的一个例子
FM 的MATLAB SIMULINK官方链接如下:
https://ww2.mathworks.cn/help/supportpkg/plutoradio/examples/fm-broadcast-receiver-1.html?s_tid=srchtitle
2.自己来一个MATLAB写的,参考
花昀, 侯立军. 几种FM数字解调算法比较[J]. 山西电子技术, 2007(5):72-74.
也可以用其他方法做,但是这个简单粗暴
3.用网上的代码修修补补凑活用,不知道是没加滤波还是其他原因,听起来有杂音。有有效办法解决的请分享哈经验。
% Initialize
clc,clear;
clear(‘scope’);
% Initialize SDR device
deviceNameSDR = ‘Pluto’; % Set SDR Device
radio = sdrdev(deviceNameSDR); % Create SDR device object
% Set Receiver Parameters
Fs = 180000; % Baseband Sample Rate 1000~384000
Fc = 102.6e6; % Center frequency (Hz)
len = Fs*1; % samples per frame
%% Configure Pluto SDR Receiver
rxPluto = sdrrx(‘Pluto’,…
‘RadioID’,‘usb:0’,…
‘CenterFrequency’,Fc,…
‘BasebandSampleRate’,Fs,…
‘OutputDataType’,‘double’,…
‘SamplesPerFrame’,len,…
‘GainSource’,‘AGC Slow Attack’);
% Set up Spectrum Analyzer
scope = dsp.SpectrumAnalyzer;
scope.SampleRate = Fs;
scope.SpectralAverages = 1;
scope.PlotAsTwoSidedSpectrum = true;
scope.FrequencyOffset = Fc;
scope.ReferenceLoad = 100;
scope.RBWSource = ‘Auto’;
scope.PowerUnits = ‘dBm’;
for counter = 1:100
tic
[data,datavalid,overflow] = rxPluto();
audio=func_fmdemod(data*1000,len);
sound(audio,Fs);
scope(abs(data*10).^2);
scope.FrequencyOffset = Fc;
% power_watts = abs(data).^2;
% power_dBm = 10log(10(abs(data).^2));
%
% % Plot Spectrum
% scope(power_watts)
%
% % Adjust center frequency for next sweep
% Fcvar = Fc + counter*Fs;
% scope.FrequencyOffset = Fcvar;
% release(rxPluto);
% rxPluto = sdrrx(‘Pluto’,‘CenterFrequency’,Fcvar);
% release(rxPluto);
% rxPluto = sdrrx(‘Pluto’,‘OutputDataType’,‘double’);
% release(scope);
toc
end
release(rxPluto);
test=reshape(data,[],1);
plot(real(test));
note:记录用,免得下次要用找不到