Skip to content

Commit

Permalink
supporting plots for RADE V2 PAPR/bandwidth paper
Browse files Browse the repository at this point in the history
  • Loading branch information
drowe67 committed Jan 20, 2025
1 parent 0ffa3ff commit dce6360
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 27 deletions.
28 changes: 15 additions & 13 deletions compare_models.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@
function run_model() {
model=$1
dim=$2
epoch=$3
shift
shift
shift
python3 ./train.py --cuda-visible-devices 0 --sequence-length 400 --batch-size 512 --latent-dim ${dim} \
--epochs 1 --lr 0.003 --lr-decay-factor 0.0001 \
~/Downloads/tts_speech_16k_speexdsp.f32 tmp \
--range_EbNo --plot_EqNo ${model} --initial-checkpoint ${model}/checkpoints/checkpoint_epoch_100.pth $@
--range_EbNo --plot_EqNo ${model} --initial-checkpoint ${model}/checkpoints/checkpoint_epoch_${epoch}.pth $@
}

# TODO automate here; Makefile like behaivour to generate model${model}_loss_EqNodB.txt files if they don't exist
Expand All @@ -26,27 +28,27 @@ function run_model() {
#run_model model18 40 --bottleneck 3 # mixed rate Rs with tanh applied to |tx|
#run_model model17_check7 80 --range_EbNo_start -9 --bottleneck 3 # should be repeat of 17
#run_model ~/tmp/240607_radio_ae/model17_check3 80 --bottleneck 3 --range_EbNo_start -9 # 17 with aux emebdded 25 bits/s data
#run_model model19_check3 80 100 --bottleneck 3 --range_EbNo_start -9 --auxdata # RADE V1 model
#run_model 250117_test 80 200 --bottleneck 3 --range_EbNo_start -9 --auxdata --txbpf # 0dB PAPR, 99% power BW < 1.5Rq, 3 stage clip/filter

model_list='05 17_check7 19 19_check3'
model_dim=(80 80 80 80 80 80)
declare -a model_legend=("m5 1D" \
"m17_check7 2D PAPR opt" \
"m19 m17 + aux data 1" \
"m19_check3 m17 + aux data 2" )
model_list='model19_check3 250117_test'
model_dim=(80 80)
declare -a model_legend=("RADE V1" "Joint PAPR/BW")

loss_EqNo=""
loss_CNo="'loss_CNo_models',50,1"
loss_SNR3k="'loss_SNR3k_models',50,3000"
loss_CNo="50,1"
loss_SNR3k="50,3000"
i=0;
for model in $model_list
do
loss_EqNo="${loss_EqNo},'model${model}_loss_EqNodB.txt','${model_legend[i]}'"
CNo=",'model${model}_loss_EqNodB.txt',${model_dim[i]},'${model_legend[i]}'"
loss_EqNo="${loss_EqNo},'${model}_loss_EqNodB.txt','${model_legend[i]}'"
CNo=",'${model}_loss_EqNodB.txt',${model_dim[i]},'${model_legend[i]}'"
loss_CNo="${loss_CNo}${CNo}"
loss_SNR3k="${loss_SNR3k}${CNo}"
((i++))
done
echo "radae_plots; loss_EqNo_plot('loss_EqNo_models',''${loss_EqNo}); quit" | octave-cli -qf # PNG
echo "radae_plots; loss_EqNo_plot('','loss_EqNo_models'${loss_EqNo}); quit" | octave-cli -qf # EPS
echo "radae_plots; loss_CNo_plot(${loss_CNo}); quit" | octave-cli -qf
echo "radae_plots; loss_CNo_plot(${loss_SNR3k}); quit" | octave-cli -qf
echo "radae_plots; loss_CNo_plot('loss_CNo_models','',${loss_CNo}); quit" | octave-cli -qf # PNG
echo "radae_plots; loss_CNo_plot('loss_SNR3k_models','',${loss_SNR3k}); quit" | octave-cli -qf # PNG
echo "radae_plots; loss_CNo_plot('','radev2_loss_SNR3k_models',${loss_SNR3k}); quit" | octave-cli -qf # EPS
41 changes: 27 additions & 14 deletions radae_plots.m
Original file line number Diff line number Diff line change
Expand Up @@ -49,26 +49,32 @@ function do_plots(z_fn='l.f32',rx_fn='', png_fn='', epslatex='')
figure(6); clf; plot(real(rx)); xlabel('Time (samples)'); ylabel('rx');
figure(7); clf; plot_specgram(rx, Fs=8000, 0, 3000);

max(abs(rx).^2)
mean(abs(rx).^2)
peak = max(abs(rx).^2);
av = mean(abs(rx).^2);
PAPRdB = 10*log10(peak/av);
peak = max(abs(rx(1:160)).^2);
av = mean(abs(rx(1:160)).^2);
PilotPAPRdB = 10*log10(peak/av);
printf("Pav: %f PAPRdB: %5.2f PilotPAPRdB: %5.2f\n", av, PAPRdB, PilotPAPRdB);

fcentre = 1475;
bwHz = bandwidth(rx, fcentre)

% Spectrum plot
Fs = 8000; y = pwelch(rx,[],[],1024,Fs); y_dB = 10*log10(y);
mx = max(y_dB); mx = ceil(mx/10)*10
figure(8); clf;
plot((0:length(y)-1)*Fs/length(y),y_dB-mx);
hold on;
plot([fcentre-bwHz/2 fcentre-bwHz/2 fcentre+bwHz/2 fcentre+bwHz/2 fcentre-bwHz/2 ],[-35 -5 -5 -35 -35],'r-');
hold off;
axis([0 3000 -60 0]); grid; xlabel('Freq (Hz)'); ylabel('dB');
if length(epslatex)
print_eps_restore(sprintf("%s_psd.eps",epslatex),"-S300,200",textfontsize,linewidth);
end

max(abs(rx).^2)
mean(abs(rx).^2)
peak = max(abs(rx).^2);
av = mean(abs(rx).^2);
PAPRdB = 10*log10(peak/av);
peak = max(abs(rx(1:160)).^2);
av = mean(abs(rx(1:160)).^2);
PilotPAPRdB = 10*log10(peak/av);
printf("Pav: %f PAPRdB: %5.2f PilotPAPRdB: %5.2f\n", av, PAPRdB, PilotPAPRdB);
bandwidth(rx)
end
endfunction

Expand Down Expand Up @@ -97,21 +103,22 @@ function do_plots_bbfm(z1_fn, z2_fn="", png_fn='')
endfunction


function bandwidth(rx)
function bwHz = bandwidth(rx, fcentre)
Nfft = 1204;
Fs = 8000; y = pwelch(rx,[],[],Nfft,Fs); y_dB = 10*log10(y);
figure(1);
plot((0:length(y)-1)*Fs/Nfft,y_dB);

% 99% power bandwidth
total_power = sum(y);
centre = round(Nfft*1500/Fs);
centre = round(Nfft*fcentre/Fs);
bw = 1;
do
bw++;
p = spec_power(y, centre, bw);
until p > 0.99*total_power
printf("bandwidth (Hz): %f power/total_power: %f\n", bw*Fs/Nfft, p/total_power);
bwHz = bw*Fs/Nfft;
printf("bandwidth (Hz): %f power/total_power: %f\n", bwHz, p/total_power);

endfunction

Expand Down Expand Up @@ -151,7 +158,10 @@ function loss_EqNo_plot(png_fn, epslatex, varargin)
endfunction

% Plots loss v C/No curves from text files dumped by train.py, pass in EqNo_file.txt,dim,leg for each curve
function loss_CNo_plot(png_fn, Rs, B, varargin)
function loss_CNo_plot(png_fn, epslatex, Rs, B, varargin)
if length(epslatex)
[textfontsize linewidth] = set_fonts(20);
end
figure(1); clf; hold on;
i = 1;
while i <= length(varargin)
Expand All @@ -174,6 +184,9 @@ function loss_CNo_plot(png_fn, Rs, B, varargin)
if length(png_fn)
print("-dpng",png_fn);
end
if length(epslatex)
print_eps_restore(epslatex,"-S300,200",textfontsize,linewidth);
end
endfunction

% usage:
Expand Down

0 comments on commit dce6360

Please sign in to comment.