《C》C語言程式設計輸出“m序列”資料並通過gnuplot繪圖
阿新 • • 發佈:2018-11-12
一、怎麼構建m序列
m序列是一種基本的偽隨機序列,有優良的自相關函式,易於產生和複製,在擴頻技術中得到了廣泛的應用。長度為 位的m序列可以用n級線性移位暫存器來產生。如下圖所示:
將發生器寫成如下方程:
這方程成為特徵多項式。式中
僅指明其係數
的值(1或0),x本身的取值並無實際意義,也不需要去計算x的值。例如,若特徵方程為
則它僅表示 ,
的係數
,其餘為0。經嚴格證明:若反饋位移暫存器的特徵多項式為本原多項式,則位移寄出器能產生m序列。只要找到本原多項式,就可構成m序列發生器。
二、C語言程式設計實現“六階位移暫存器”m序列(即n=6)
1. 六階m序列分析
- 六階m序列的週期:
- 六階m序列的本原多項式:
- 六階m序列的序列發生器結構圖:
觀察上圖可知反饋量為:
2. 六階m序列源程式
【6msquence.c】
#include<stdio.h>
main()
{
int a[6] = {0,0,0,0,0,1}; //六級暫存器初始化[0 0 0 0 0 1]
int m[63];
int temp; //temp用於存放反饋量
float period = 0.0; //時間間隔
for(int i=0;i<63;i++)
{
m[i] = a[0];
temp = a[5]^a[0];
a[0] = a[1];
a[1] = a[2];
a[2] = a[3];
a[3] = a[4];
a[4] = a[5];
a[5] = temp;
}
for(int j=0;j<63;j++)
{
for(int k=0;k<101;k++){
period += 0.01;
printf("%f\t%d\n",period,m[j]);
}
}
}
三、gnuplot繪製圖像
關於gnuplot的詳細教程請點選 Java計算出三角函式的資料並通過gnuplot作出波形圖
1. 編譯C程式
博主使用TCC編譯器將.c
檔案編譯為.exe
檔案。
2. 執行程式
執行.exe
檔案,觀察輸出結果,第一列為時間,第二列為m序列資料。
3. 繪製序列圖
- 繪圖指令:
gnuplot>plot [0:80] [-1.5:1.5] "<6msquence.exe" u 1:2 w l title "6msquence"
- 繪圖演示:
四、驗證m序列
1. m序列特性驗證
改變源程式【6msquence.c】第22行至第28行的內容:
for(int j=0;j<63;j++)
{
printf("%d",m[j]);
}
執行後可以觀察到“1”和“0”的數量,執行結果如下圖:
程式計算結果符合m序列的特點:在一個週期63(
)內“1”為32(
)個,“0”為31(
)個,“1”比“0”多一個。
2. 序列圖驗證
為了驗證C語言程式設計實現的m序列是否正確,博主使用matlab構建了一個六階m序列發生器,生成的m序列圖如下:
C語言程式設計實現的m序列圖如下:
對比兩張圖我們發現圖形一模一樣。