Модуляция OFDM
Автор
using Pkg
using EngeeComms
using EngeeDSP
function rectpulse(x, Nsamp)
sizex = zeros(Int64, 2);
sizex[1] = size(x)[1];
if length(size(x)) == 1
sizex[2] = 1;
else sizex[2] = size(x)[2]
end
if ( (sizex[1] == 1) && (sizex[2]!=1) )
y = reshape(ones(Nsamp,1)*reshape(x, 1, sizex[1]*sizex[2]),sizex[1], sizex[2]*Nsamp);
else
y = reshape(ones(Nsamp,1)*reshape(x, 1, sizex[1]*sizex[2]),sizex[1]*Nsamp, sizex[2]);
end
return y;
end
function helperPlotMultipath()
msgLen = 32768;
fs = 1e7;
interpFactor = 2;
decimFactor = 32;
knownBits = [1 0 1 0]';
var_rand = RandomIntegerGenerator(SetSize=2,InitialSeed=1234,SampleTime=1.0,SamplesPerFrame=msgLen-length(knownBits));
hiRateMsg = rectpulse([knownBits; var_rand(0.0)],interpFactor) .- 0.5;
shortLen = length(hiRateMsg);
lowRateMsg = rectpulse(hiRateMsg[1:Int64(shortLen/decimFactor)],decimFactor);
mpChan = [0.8 zeros(1,interpFactor-1) -0.5 zeros(1,interpFactor-1) 0.34]';
fillLen = length(lowRateMsg)-length(mpChan);
mpChan = [mpChan; zeros(fillLen,1)];
mpChanSpecAn = 1e6*mpChan;
nSamp = 128;
time = 1e6 * (0:1/fs:(nSamp-1)/fs);
hrsig = plot(time,hiRateMsg[1:nSamp],linecolor = :green, label = "Высокоскоростной сигнал");
lrsig = plot!(time,lowRateMsg[1:nSamp],linecolor = :blue, label = "Низкоскоростной сигнал");
ylims!(-1,1);
#title!("Низкоскоростной сигнал,Высокоскоростной сигнал, и Импульсная характеристика канала");
xlabel!("Время (микросек.)");
ylabel!("Амплитуда");
# Построение спектра сигналов
var_fft = EngeeFFT();
var_fftshift = EngeeFFTshift();
freq = [-5e6:10e6/65535:5e6...];
spec_hiRateMsg = EngeeDSP.step!(var_fftshift,abs.(EngeeDSP.step!(var_fft, hiRateMsg)));
spec_mpChan = EngeeDSP.step!(var_fftshift,abs.(EngeeDSP.step!(var_fft, mpChan)));
spec_lowRateMsg = EngeeDSP.step!(var_fftshift,abs.(EngeeDSP.step!(var_fft, lowRateMsg)));
hrspec = plot(freq, 20log10.(abs.(spec_hiRateMsg./3e2)), linecolor = :green, label = "Высокоскоростной сигнал" );
lrspec = plot!(freq, 20log10.(abs.(spec_lowRateMsg./3e2)), linecolor = :blue, label = "Низкоскоростной сигнал");
freqresp = plot!(freq, 20log10.(abs.(spec_mpChan./1e2)), linecolor = :red, label = "Частотная характеристика канала");
ylims!(-55,20);
xlabel!("Частота (Гц)");
ylabel!("дБм");
display(hrsig), display(hrspec);
end