受信器の検討
はじめに
400MHz付近で使えるRFICを調査している. 10kHz幅電力を測定出来れば良いのだが1ppmの周波数精度(誤差4kHz以内程)で測りたい. 今は1ppm局発と急峻なアナログLPFを使う方式か,アナログは簡素にして10sps以上のADCとDigital Filterで10kHz切り出すか どちらかにする予定で検討している
RFIC
VHF/UHFダイレクトコンバージョンIC SL6609
SL6609は 470MHzまでのダイレクトコンバージョン FSK復調器として利用できるIC.
SL6609を使ってみた方が少しいるようで21MHz CW受信はできているようです. SL6609
400MHz付近で使ってみたく,またGtrator Filterの幅が気になる所.
400MHz局発を入手次第,pin1 / pin15の周波数特性を測ってみたい.
R820T
R820TのSpecを載せる.
特徴として下記がある.
・ESD(Electic static discharge)保護機能付きノッチフィルタ
・20MHz程度のオシレータで動作
・Fc4MHz 6~8MHz幅のLow-IF FIlterを備える
Low-IF FIlterのFcとBW
RTLSDR RTL2832U V3
RTLSDR V3は0.5M-24MHzまでDIRECT SAMPLING出来たり,Expansion PORTSがあるので拡張ができそうだ.
RFM22B
源振や設定変更すれば400MHzで使えそうな感じがするのでとりあえず購入して試してみる. https://www.sparkfun.com/datasheets/Wireless/General/RFM22B.pdf
アンチエリアシングフィルタ
LPFも検討中.ArduinoやESP32のADCが数10kHz出せるなら良いが...
8次スイッチトキャパシタフィルタ MAX294
ESP32 ADC Speed
ESP32 ADC Speed | LabFruits によると 27.1739spsは達成できている.
ソースコードを拝借し貼り付けておく.
28 #include <chrono> #include <Arduino.h> #include <driver/adc.h> void setup() { Serial.begin(115200); adc1_config_width(ADC_WIDTH_BIT_12); adc1_config_channel_atten(ADC1_CHANNEL_0, ADC_ATTEN_DB_11); } void loop() { const uint16_t samples = 10000; auto t1 = std::chrono::system_clock::now(); for (uint32_t i=0; i<samples; i++) { adc1_get_raw(ADC1_CHANNEL_4); // GPIO32 } auto t2 = std::chrono::system_clock::now(); std::chrono::duration<double> diff = t2 - t1; auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(diff).count(); Serial.printf("Samples: %u\n", samples); Serial.printf("Duration: %llums\n", ms); Serial.printf("KSPS: %0.4f", static_cast<double>(samples) / ms); }