2015-02-12 4 views
3

Я пытаюсь использовать gnuplot для построения отклика от оси громкоговорителя в диапазоне +/- 90 градусов. Я это работает хорошо, почти полностью в результате Creating a microphone polar pattern plot in gnuplotКак ограничить полярность gnuplot до диапазона 180 градусов?

Я хотел бы выразить это так, она представляет вперед»180 диапазон только однако я не знаю, как это сделать & бы оценить некоторые указатели.

Это мой код до сих пор

gnuplot <<EOF 
set terminal pngcairo size ${WIDTH}/2,${HEIGHT}/2 font ',10' 

set polar 
set angle degrees 
set size ratio 1 
set tmargin 3 
set bmargin 3 

set style line 11 lc rgb 'gray80' lt -1 
set grid polar ls 11 

unset border 
unset xtics 
unset ytics 

set xrange [-30:30] 
set yrange [-30:30] 
set key 

r=1 
set rrange [0:r] 
set rtics 0.166 format '' scale 0 
set label '0°' center at first 0, first r*1.05 
set label '180°' center at first 0, first -r*1.05 
set label '-90°' right at first -r*1.05, 0 
set label '+90°' left at first r*1.05, 0 

set for [i=1:5] label at first r*0.02, first r*((i/6.0) + 0.03) sprintf("%d dB", -30+(i*5)) 
unset raxis 

set key outside top right 
set style line 11 lw 2 

set output '${PREFIX}_polar.png' 
set multiplot layout 1,2 title "Circular Polar Response" 
set title "Normalised" 
plot '${PREFIX}_norm_polar_1000.txt' t '1k' w lp ls 11 lt 1 pt -1 , \ 
    '${PREFIX}_norm_polar_2000.txt' t '2k' w lp ls 11 lt 2 pt -1 , \ 
    '${PREFIX}_norm_polar_4000.txt' t '4k' w lp ls 11 lt 3 pt -1 , \ 
    '${PREFIX}_norm_polar_8000.txt' t '8k' w lp ls 11 lt 4 pt -1 , \ 
    '${PREFIX}_norm_polar_16000.txt' t '16k' w lp ls 11 lt 5 pt -1 
set title "Unnormalised" 
plot '${PREFIX}_polar_1000.txt' t '1k' w lp ls 11 lt 1 pt -1 , \ 
    '${PREFIX}_polar_2000.txt' t '2k' w lp ls 11 lt 2 pt -1 , \ 
    '${PREFIX}_polar_4000.txt' t '4k' w lp ls 11 lt 3 pt -1 , \ 
    '${PREFIX}_polar_8000.txt' t '8k' w lp ls 11 lt 4 pt -1 , \ 
    '${PREFIX}_polar_16000.txt' t '16k' w lp ls 11 lt 5 pt -1 

EOF 

исход

polar

данных выглядит следующим образом (это 1k линия в примере изображения)

180 0.657067 
172.5 0.6832 
165 0.717767 
157.5 0.7461 
150 0.7747 
142.5 0.806167 
135 0.835633 
127.5 0.865167 
120 0.890533 
112.5 0.918133 
105 0.929633 
97.5 0.9566 
90 0.9632 
82.5 0.9566 
75 0.929633 
67.5 0.918133 
60 0.890533 
52.5 0.865167 
45 0.835633 
37.5 0.806167 
30 0.7747 
22.5 0.7461 
15 0.717767 
7.5 0.6832 
0 0.657067 
+0

Это то, что я думал, что будет работать, не оказывает никакого влияния на сюжет, хотя – Matt

ответ

5

Gnuplot запутается, если вы используете xrange и настройки YRange которые противоречат настройки rrange. Вероятно, почему параметры yrange игнорируются.

Затем вы также должны использовать set size ratio -1, чтобы получить такое же масштабирование в x и yrange. При построении только двух верхних квадрантов вы получите неправильное соотношение сторон с set size square.

set terminal pngcairo font ',10' 

set polar 
set angle degrees 
set size ratio 1 
set lmargin 8 
set style line 11 lc rgb 'gray80' lt -1 
set grid polar ls 11 

unset border 
unset tics 

set xrange [-1:1] 
set yrange [0:1] 
set size ratio -1 

r = 1 
set rtics 0.166 format '' scale 0 
set label '0°' center at first 0, first r*1.05 
set label '-90°' right at first -r*1.05, 0 
set label '+90°' left at first r*1.05, 0 

set for [i=1:5] label at first r*0.02, first r*((i/6.0) + 0.03) sprintf("%d dB", -30+(i*5)) 
unset raxis 

set key outside top right 

set output 'polar.png' 
plot 'norm_polar_1000.txt' w lp ls 1 t '1k' 

enter image description here