---
# System prepended metadata

title: 專題筆記

---

# 專題筆記


08/01
python的numpy之reshape轉置行為和matlab的reshape不同 
如果用pi以python將資料編譯再傳來matlab端 
有可能在計算BER的時候因為上述的轉置行為差異造成BER看似大幅提高 
但資料實際上沒有錯的情況 
08/03
把Arduino的針腳改了
11代表MOSI 12代表MISO 本來移除了11 現在兩個都有插線 
D11（MOSI）：傳送相位資料給 beamformer，移除後 → 無法控制波束
D13（SCK）：提供 SPI 時脈，移除後 → 資料無法解析
D12（MISO）：目前未用，移除沒影響，但將來若讀回資料會出錯
D10（SS）：非必要但建議設為 OUTPUT 並拉高
基本上四個都要插 尤其D11 不然會死
08/10
把專題的抗干擾方式改為子載波分離的方法 每台TX用的子載波群不一樣 所以在OFDM的正交性沒有被破壞的情況下 干擾會很小 前提是這樣對頻偏補償的要求會更高 目前我的想法是對每台TX分別做不同的CFO補償 要達到這點必須使用不同nID的RS 並且在補償的時候要把RX資料頻域中切分出想要的子載波群就好 不能全補 
8/17 已經做完了2TX 頻譜分配如下圖
![載波配置比較](https://hackmd.io/_uploads/S1sW0W7Yel.jpg)
8/20 我發現第三台TX的通道響應能量超小 所以我不能再讓TX1 TX2中間留那麼多guard band 頻譜得往旁邊擠才行 而頻譜超過正負fs/4之後就會被roll off factor影響並衰減 所以子載波配置要改成三台各100個左右



# rasberry Pi接Pluto設定小細節

1. Rasberry PI電供一定要是5V，不多不少，請檢察充電器上有沒有支援5V(電流則3A或以上)
2. 在terminal用`ifconfig`指令來查看裝置IP位置(wlan裡的inet)
3. 在透明有風扇外殼的pi3上，執行前由於pluto需要的adi函式庫在一個'myenv'的環境裡 所以要先進入環境再執行
4. 進入環境 `. myenv/bin/activate` 離開環境`deactivate` 
    怎麼在Pi的圖形顯示介面之IDE(Geany)改環境:
    於介面上方'組建'選取'設定組件命令' 進去找下面標題為'Execute'的一欄 
    將裡面命令那行從`python "%f"`改成`/home/user/環境名稱/bin/python "%f"`
    如此一來會改變此IDE按下執行時 IDE的行為

5. 於SSH連接時，執行python檔案需要在terminal輸入`python3 檔名.py` ex:`python3 Desktop/Pcode/TX_main.py`
6. 讓PC和Rasberry Pi連上同一個wifi就可以SSH遙控之，IP位置如下
user 密碼：ntou904904
可以用DHCP固定每次連上的IP，這樣就不會被重置
我的iPhone熱點對應IP:172.20.10.6
7. 關機`sudo shutdown`
8. 進入某資料夾`cd 路徑` 例如:`cd /home/user/Desktop/Pcode
9. 於windows cmd快速查找同網路上的其他IP位置 `arp -a`，但是這招只會顯示有交換過封包的裝置，對於沒有交換過的只能用ping一個一個位置測試
10. `vcgencmd measure_temp`查看CPU溫度 `echo "1" | sudo tee /sys/class/thermal/cooling_device0/cur_state`讓pi5的風扇開始轉
11. `vcgencmd get_throttled` 查看有無電壓不足 
回傳`0x50000` 表示曾經因電壓不足降頻` 0x50005 `表示現在正因電壓不足或過熱而限速
`vcgencmd get_throttled | cut -f2 -d=` 取得狀態
回傳值對應表如下 回傳數字大小如果比以下值大了16代表顯示的是曾經之狀態

|    0     |     1      |     2    |
| -------- | ---------- | -------- |
| 電壓不足  |     過熱    |    限頻   |
12. `iio_info -s` 輸入這行可以查看各USB裝置的明細 在裡面會看到pluto是以哪個usb孔接上pi的
以此資訊來用adi連接至pluto即可
例如: usb:1.8.5 那在python就應該要寫上`sdr = adi.Pluto("usb:1.8.5")`
以上適用於一台pi連接到多台pluto時使用 這時用ip去指定Pluto很容易失敗(我沒有成功過)
13. 可以用pi4或pi5的話 整個做專題的操作體驗會好很多 因為pi3容易過熱 要多個pluto連到同一個pi的話 請購買有獨立電源的usb集線器 讓pluto們自己用一個電源 這樣pi的電供可以全力支援他自己 不然他會變慢

# 怎麼用pi 5連線到pluto?

理論上辦不太到，最快的方法是使用adi公司自己出的kuiper kernel(已經裝好adi的Pi OS)映像檔直接在燒系統的時候燒到SD卡裡面，這樣就會有一個裝好adi的pi OS，但目前(2025)只有pi 4支援這個kernel，所以要用以下指令來安裝pi 5，運氣好的話會成功

```
#更新整個系統並下載cmake
sudo apt update 
sudo apt install -y build-essential cmake git libusb-1.0-0-dev
#一次在整個系統裝好所有adi所需套件
sudo apt-get -y install libglib2.0-dev libgtk-3-dev libgtkdatabox-dev libmatio-dev \
libfftw3-dev libxml2 libxml2-dev bison flex libavahi-common-dev libavahi-client-dev \
libcurl4-openssl-dev libjansson-dev cmake libiao-dev libserialport-dev
#更新libiio使pi可以跟Pluto交互通訊
sudo apt-get update
sudo apt-get install -y libusb-1.0-0 libusb-1.0-0-dev libiio0 libiio-utils
sudo udevadm control --reload
sudo udevadm trigger
```
到這裡是系統層級的安裝，而pyadi-iio套件如先前所說的得用虛擬環境的pip安裝，所以請創一個環境後(建議跟pluto程式碼同一個資料夾，不會創的話問GPT就好)貼上以下指令:
```
pip3 install --upgrade pip
pip3 install pyadi-iio
```

以上步驟是我好幾次試出來後才得以讓pi 5執行adi的方法，但隨著版本更新可能不支援這個方法了，所以你可以把以上指令分開執行，遇到錯誤就貼給ChatGPT。要買pi 5來試pluto的話建議查查當下kuiper kernel的pi 5版推出了沒，不然我建議用pi 4

## 密碼
32bit pi3
user 密碼：ntou904904
手機熱點對應：172.20.10.6（固定）

64bit pi3
pi密碼同上
手機熱點ip不固定

Pi5
密碼八個零
巴塞WiFi ip:192.168.68.110
手機熱點ip:172.20.10.2(不固定但有金鑰）