超详细的8psk调制解调通信系统讲解与仿真
原文鏈接:(更多文章移步鏈接)
賊詳細的8PSK調(diào)制與解調(diào)詳細過程 - 子木的文章 - 知乎 https://zhuanlan.zhihu.com/p/47258287
一、關(guān)于
1.花了幾天寫了一個8PSK調(diào)制的MATLAB程序,從產(chǎn)生序列到最后解調(diào)出原始信號。
2.我在網(wǎng)上查資料的時候發(fā)現(xiàn)并沒有詳細的一個調(diào)制完整過程,于是我把寫的完整過程貼出來。
3.要想把通信專業(yè)學好的話,腦子里首先要有一個通信系統(tǒng)的全過程,從信源開始到信宿結(jié)束。但是在課本的系統(tǒng)框圖中,有些模塊在一般情況下并用不上。比如信道編碼、信源編碼、加密、解密等等。在本篇仿真過程中不涉及這幾個模塊,等有時間再額外寫。而且在實際中又會涉及到源信息頻率與發(fā)射設備所支持的頻率不一致,這又如何解決?
4.通信專業(yè)要學的真是太多了,想總結(jié)出來十分困難,在實現(xiàn)通信系統(tǒng)的每一步都涉及到很多技術(shù),如采樣、濾波、調(diào)制、同步(非常重要,但又十分難)、解調(diào)等等,而且還挺難,因為經(jīng)歷過這個過程,所以在本文中,盡量把涉及到的原理都解釋一下。
?
5.其實這個過程很簡單,主要是加深對通信系統(tǒng)的了解。
?
6.、、、、、、還不知道6寫啥
二、程序中未涉及到但是不得不知的一些知識點
1.?matlab信號處理工具規(guī)定單位頻率為奈圭斯特頻率(采樣頻率的一半),所以基本的濾波器設計函數(shù)的截止頻率參數(shù)均以奈圭斯特頻率為基準做歸一化。例如,對于一個采樣頻率為1000Hz的系統(tǒng),300Hz則對應300/500=0.6。若要將歸一化頻率轉(zhuǎn)換為單位圓上的弧度,則將歸一化值乘以π(pi)即可。
?
2.?盡量對基帶信號進行編碼(本文使用的格雷碼),對解決誤比特率問題效果很好,在仿真過程中未編碼之前百分之3左右,編碼后為0。
?
3.?數(shù)字通信系統(tǒng)中,由于總的傳輸特性不理想,會使傳輸波形產(chǎn)生畸變,會引起幅度失真和相位失真,表現(xiàn)為連續(xù)傳輸?shù)拿}沖波形會受到破壞,使得接收端前后脈沖不再能清晰的分開,也就是產(chǎn)生了碼間串擾。時域中,抽樣時刻無碼間串擾的條件為,抽樣時刻僅存在當前碼元的抽樣值,不存在歷史時刻碼元抽樣值的加權(quán)值。
在實際的傳輸系統(tǒng)中,很少利用方波作為基帶脈沖波形,因為基帶脈沖波形的功率譜形狀為 Sa(f)形狀,旁瓣功率大,容易對其他頻帶產(chǎn)生干擾, 也容易失真。這就需要對基帶脈沖進行成型,來壓縮帶寬,但是由于壓縮了帶寬必然會帶來時域信號的延長,這是無可避免的。 奎斯特第一準則告訴我們,理想成型濾波器是矩形成型濾波器,它是物理無法實現(xiàn)的,但我們并不為此感到失望,因為其頻率響應沒有過渡帶,這導致了其沖擊響應為 Sa(t)形式,拖尾嚴重,在位定時信息不精準的情況下,會引入較大的碼間串擾值。
在實際中最常用的成型濾波器為升余弦成型濾波器,它具有平滑的特性,拖尾幅度較小, 可以使得在對當前碼元抽樣時,免受碼元串擾值的影響,同時在位定時不精準的情況下,由抽樣引入的碼間串擾值減小,增加了系統(tǒng)的可靠性,但滾降因子越大,會造成調(diào)制之后的信噪比(SNR)降低。為了降低濾波器的設計復雜度,升余弦成型濾波器的設計通常設計為匹配濾波器,也就是在發(fā)射端設置一個均方根升余弦濾波器,接收端同樣地設置一個均方根升余弦濾波器,接收端的均方根升余弦濾波器的頻率響應為發(fā)射端的共軛。在基帶通信系統(tǒng)中,在滿足無碼間串擾的條件下,經(jīng)過理想成型的頻帶利用率和經(jīng)過升余弦程序的頻帶利用率的極值分別為: 2(Baud/Hz/s)和 2/(1+a)(Baud/Hz/s)。其中a為滾降因子。
?
4. 升余弦濾波器:
b = rcosdesign(beta,span,sps,shape)
beta: 滾降系數(shù),取值0~1之間,決定頻寬和陡峭程度。取值一般大于0.2。
span: 表示截斷的符號范圍。
sps: 單個符號范圍的采樣個數(shù)。
shape:可選參數(shù)。可不加,可加上'normal',可加上'sqrt'。
當選擇'sqrt'時,返回一個平方根升余弦濾波器。
使用示例:
d = 2 * randi([0 1], 20, 1) - 1; h = rcosdesign(rolloff,span,sps); x=conv(d,h,'same');?
5. 低通濾波器
fir1是用窗函數(shù)法設計線性相位FIRDF的工具箱函數(shù),以實現(xiàn)線性相位FIRDF的標準窗函數(shù)法設計。
b=fir1(n,wn);
b=fir1(n,wn,'ftype');
b=fir1(n,wn,'ftype',window);
%b為濾波器系數(shù),n為濾波器階數(shù),wn為截止頻率,當指定ftype時,可設計高通和帶阻濾波器。ftype=high時設計高通,低通和帶通無需輸入ftype。
程序中使用的是y_de7=fir1(127,1/10);
使用示例:
y_de7=fir1(127,1/10); sit_1600k_f=conv(sit_1600k,y_de7,'same');至于如何設計濾波器,這里不贅述,可以看看其他篇。
?
6.成形濾波、匹配濾波器、均衡濾波器
是什么呢?作用是干嘛的?
6.1 成形濾波:
1.作用是保證采樣點不失真。如果沒有它,那信號在經(jīng)過帶限信道后,眼圖張不開,ISI非常嚴重。
2.位置在基帶調(diào)制之后在載波調(diào)制之前,僅挨著載波調(diào)制
3.總之,一般是用的升余弦濾波器,就是在基帶信號產(chǎn)生后用,參考程序食用。
6.2 匹配濾波器
1.目標:在存在高斯白噪聲的條件下使已知信號的信噪比最大。
?
2.適用于具有任意參數(shù)(如振幅、到達時間)的已知信號,可以看作與信號的已知形狀匹配的模板。
?
3.一般濾波器的目標是盡量保持有用信號的時域或頻域結(jié)構(gòu),而匹配濾波器則通過集中與之相匹配的信號能量來改變信號的時間結(jié)構(gòu),并在輸出碼元的末端獲得振幅最大值。
?
4.實現(xiàn):用輸入信號與參考信號相關(guān),選出匹配程度最大的信號。
6.3 均衡濾波器
1.作用是保證采樣點不失真。如果沒有它,那信號在經(jīng)過帶限信道后,眼圖張不開,ISI非常嚴重。
?
2.位置在基帶調(diào)制之后在載波調(diào)制之前,僅挨著載波調(diào)制
6.4 帶通濾波器
6.5 低通濾波器
?
7. MATLAB提供了非常多的函數(shù),多了解了解,能省去不少事。具體看看程序中使用的。
?
三、通信系統(tǒng)框圖以及相應的原理
1.完整的通信系統(tǒng)框圖
一個完整的通信系統(tǒng)框圖,圓框中的一般用不上
2. 8PSK調(diào)制的框圖
8PSK調(diào)制的框圖
2.1 首先8PSK需要3bit來表示,按照格雷碼的順序,分別映射到坐標中的8個點,如下圖:
將每個碼元映射到8PSK星座圖的每一個相位點上,既得到對應的I路和Q路信號,即x、y軸坐標。如(0 0 0)對應的坐標就是(0.924 0.383)
然后坐標??可以寫成復數(shù)形式??。于是:
2.2 調(diào)制原理:
看出來了嗎,這樣就將載波函數(shù)利用上了,在調(diào)制過程中只要I路和Q路的信號分別去乘再相加就解決了。注意sin函數(shù)前面有個負號。
2.3 解調(diào)原理
只要把已調(diào)信號再乘一遍載波,得到上式,看到了嗎,如果在經(jīng)過一個低通濾波器,就可以把原信號濾出來了。不過要注意系數(shù)這里除以2 ,在程序中乘以2 就解決了。
四、 如何改變采樣頻率
在實際中可能涉及到源信號的頻率與發(fā)射設備不匹配的問題。比如我源信息的頻率是16k但是發(fā)射設備支持的頻率是250M,這就需要對信號的采樣率進行調(diào)整。即抽取和插值。
1.1 抽取
(為什么先濾波再抽取 ,先插值再濾波?時間有限,可看看書上這一部分)???????
1.1.1先濾波再抽取
時域中研究:
h(n)為一理想低通濾波器:
濾波后的輸出為:
對v(n)抽取后的序列為y(n) :
?
頻域中研究:
在(-π/M~π/M)內(nèi), 抽取后信號的頻譜與原信號頻譜只是幅度相差M倍。
1.1.2 畫圖理解
將x(n)中每M個點中抽取一個,依次組成一個新的序列y(n),即:
y(n)和x(n)的DTFT有如下關(guān)系:
含意:將信號x(n)作M倍的抽取后,所得信號y(n)的頻譜等于原信號x(n)的頻譜先作M倍的擴展,再在ω軸上每隔??作移位后再迭加。
抽樣之前,保證f(s)>2f(c);就可以保證信號不發(fā)生混疊!對于抽樣之后的系統(tǒng),只要保證f(s)>2Mf(c),同樣系統(tǒng)也不會發(fā)生混疊現(xiàn)象。
注意:若M是可變的,為防止抽取后在出現(xiàn)混迭,應對x(n)抽取前先作低通濾波,壓縮其頻帶。
1.2 插值(先插值再濾波)
1.2.1 畫圖理解插值
將x(n)中每兩個點之中補L-1個0,組成一個新的序列v(n),即:
插零后的信號及其頻譜:
插零后信號的頻譜V(jω)在(-π/L~π/L)內(nèi)等于X(ejω),相當于將X(ejω)作了周期壓縮。換句話說,就是V(jω)在(-π~π)內(nèi)包含了L個X(jω)的壓縮樣本。
1.2.2 先插值再濾波
頻域中研究:
實際實現(xiàn)插值的方法是用v(n)和一低通濾波器作卷積 :
所以應取c=L以保證y(n)=x(n/L) 。
時域中研究:
注意:插值時補進來的零,不再是零。此時再進行低通濾波,無非是想將我們的信號頻譜恢復出來!
3.3 抽取與插值相結(jié)合的抽樣率轉(zhuǎn)換
注意濾波器的使用和位置
該濾波器既去除了插值后的映像又防止了抽取后的混迭。
五、貼程序(具體看注釋,仿真圖就不放了,圖太多)
%% 8PSK 基本參數(shù)
clc clear all close all Fc=700e6;%Fc載波頻率%% 基帶信號
data_num=300; data = randint(1,data_num); %產(chǎn)生1行300列的矩陣,元數(shù)為0-1之間的隨機數(shù),包括0和1 figure(1) subplot(211) plot(data);title('原始基帶信號')%以data分量為縱坐標,以元素序號為橫坐標,用直線依次連接數(shù)據(jù)點,繪制曲線 ts=0:1:length(data)-1; subplot(212) stem(ts,data);title('原始基帶信號');%“有時間向量的話,序列是沖激”%% 8psk調(diào)制
fs_16k=16e3;%假設最開始采樣頻率是16e3 it=[];qt=[]; sit=[];sqt=[]; for i=1:3:length(data)I(i) = data(i); Q(i+1) = data(i+1);U(i+2) = data(i+2); if I(i)==0 && Q(i+1)==0 && U(i+2)==0it=0.924*ones(1,1);%1行1列的全為1的矩陣qt=0.383*ones(1,1);elseif I(i)==0 && Q(i+1)==0 && U(i+2)==1it=0.383*ones(1,1);qt=0.924*ones(1,1);elseif I(i)==0 && Q(i+1)==1 && U(i+2)==1it=-0.383*ones(1,1);qt=0.924*ones(1,1);elseif I(i)==0 && Q(i+1)==1 && U(i+2)==0it=-0.924*ones(1,1);qt=0.383*ones(1,1);elseif I(i)==1 && Q(i+1)==1 && U(i+2)==0it=-0.924*ones(1,1);qt=-0.383*ones(1,1);elseif I(i)==1 && Q(i+1)==1 && U(i+2)==1it=-0.383*ones(1,1);qt=-0.924*ones(1,1); elseif I(i)==1 && Q(i+1)==0 && U(i+2)==1 it=0.383*ones(1,1);qt=-0.924*ones(1,1);elseif I(i)==1 && Q(i+1)==0 && U(i+2)==0it=0.924*ones(1,1);qt=-0.383*ones(1,1);endsit=[sit it]; sqt=[sqt qt]; end %映射 figure(2) subplot(221) plot(sit);title('i路信號') subplot(222) plot(sqt);title('q路信號') subplot(223) plot(-fs_16k/2:fs_16k/length(sit):fs_16k/2-fs_16k/length(sit),fftshift(abs(fft(sit)))); xlabel('Frequency(Hz)'); ylabel('Amp'); title('I路頻譜圖') subplot(224) plot(-fs_16k/2:fs_16k/length(sqt):fs_16k/2-fs_16k/length(sqt),fftshift(abs(fft(sqt)))); xlabel('Frequency(Hz)'); title('Q路頻譜圖')figure(3) scatter(sit,sqt);%星座圖 grid on%% 提高采樣頻率16k-160k,(插值:先插后濾,抽取:先抽后濾)
fs_160k=160e3; sit_160k=upsample(sit,10); sqt_160k=upsample(sqt,10);beta=0.4;%r=0時是矩形 span=length(sit_160k); sps=10; h = rcosdesign(beta,span,sps); sit_160k_f=conv(sit_160k,h,'same'); sqt_160k_f=conv(sqt_160k,h,'same');figure(4) subplot(221) plot(sit_160k_f);title('10倍插值i路') subplot(222) plot(sqt_160k_f);title('10倍插值q路') subplot(223) plot(-fs_160k/2:fs_160k/length(sit_160k_f):fs_160k/2-fs_160k/length(sit_160k_f),fftshift(abs(fft(sit_160k_f)))); xlabel('Frequency(Hz)'); ylabel('Amp'); title('I路頻譜圖(升余弦)') subplot(224) plot(-fs_160k/2:fs_160k/length(sqt_160k_f):fs_160k/2-fs_160k/length(sqt_160k_f),fftshift(abs(fft(sqt_160k_f)))); xlabel('Frequency(Hz)'); title('Q路頻譜圖(升余弦)')%% 160k-1600k,插值:先插后濾,抽取:先抽后濾
fs_1600k=1600e3; sit_1600k=upsample(sit_160k_f,10); sqt_1600k=upsample(sqt_160k_f,10);y_de7=fir1(127,1/10); sit_1600k_f=conv(sit_1600k,y_de7,'same'); sqt_1600k_f=conv(sqt_1600k,y_de7,'same');figure(5) subplot(221) plot(sit_1600k_f);title('100倍插值i路') subplot(222) plot(sqt_1600k_f);title('100倍插值q路') subplot(223) plot(-fs_1600k/2:fs_1600k/length(sit_1600k_f):fs_1600k/2-fs_1600k/length(sit_1600k_f),fftshift(abs(fft(sit_1600k_f)))); xlabel('Frequency(Hz)'); ylabel('Amp'); title('I路頻譜圖(低通)') subplot(224) plot(-fs_1600k/2:fs_1600k/length(sqt_1600k_f):fs_1600k/2-fs_1600k/length(sqt_1600k_f),fftshift(abs(fft(sqt_1600k_f)))); xlabel('Frequency(Hz)'); title('Q路頻譜圖(低通)');%% 1600k-16M,插值:先插后濾,抽取:先抽后濾
fs_16M=16e6; sit_16M=upsample(sit_1600k_f,10); sqt_16M=upsample(sqt_1600k_f,10);y_de7=fir1(127,1/10); sit_16M_f=conv(sit_16M,y_de7,'same'); sqt_16M_f=conv(sqt_16M,y_de7,'same');figure(6) subplot(221) plot(sit_16M_f);title('1000倍插值i路') subplot(222) plot(sqt_16M_f);title('1000倍插值q路') subplot(223) plot(-fs_16M/2:fs_16M/length(sit_16M_f):fs_16M/2-fs_16M/length(sit_16M_f),fftshift(abs(fft(sit_16M_f)))); xlabel('Frequency(Hz)'); ylabel('Amp'); title('I路頻譜圖(低通)') subplot(224) plot(-fs_16M/2:fs_16M/length(sqt_16M_f):fs_16M/2-fs_16M/length(sqt_16M_f),fftshift(abs(fft(sqt_16M_f)))); xlabel('Frequency(Hz)'); title('Q路頻譜圖(低通)');%% 16M-25M,由于原始采樣頻率與信道傳輸需要的采樣頻率不一致,故需要變頻。
fs_25M=25e6; %resample為信號降采樣處理,理解如下:B=resample(x,90,250); % 采樣從250Hz降到90Hz,如果250在前,就是插值從90到250,可以看B的長度,250Hz采樣4000個數(shù)據(jù)等于90hz采樣1440個數(shù)據(jù),這就是降采樣。 sit_25M=resample(sit_16M_f,25,16); sqt_25M=resample(sqt_16M_f,25,16);figure(7) subplot(221) plot(sit_25M);title('25/16倍插值i路') subplot(222) plot(sqt_25M);title('25/16倍插值q路') subplot(223) plot(-fs_25M/2:fs_25M/length(sit_25M):fs_25M/2-fs_25M/length(sit_25M),fftshift(abs(fft(sit_25M)))); xlabel('Frequency(Hz)'); ylabel('Amp'); title('I路頻譜圖(低通)') subplot(224) plot(-fs_25M/2:fs_25M/length(sqt_25M):fs_25M/2-fs_25M/length(sqt_25M),fftshift(abs(fft(sqt_25M)))); xlabel('Frequency(Hz)'); title('Q路頻譜圖(低通)')%% 25M-250M
fs_250M=250e6; %resample為信號降采樣處理,理解如下:B=resample(x,90,250); % 采樣從250Hz降到90Hz,如果250在前,就是插值從90到250,可以看B的長度,250Hz采樣4000個數(shù)據(jù)等于90hz采樣1440個數(shù)據(jù),這就是降采樣。 sit_250M=upsample(sit_25M,10); sqt_250M=upsample(sqt_25M,10);y_de7=fir1(127,1/10); sit_250M_f=conv(sit_250M,y_de7,'same'); sqt_250M_f=conv(sqt_250M,y_de7,'same');figure(8) subplot(221) plot(sit_250M_f);title('10倍插值i路') subplot(222) plot(sqt_250M_f);title('10倍插值q路') subplot(223) plot(-fs_250M/2:fs_250M/length(sit_250M_f):fs_250M/2-fs_250M/length(sit_250M_f),fftshift(abs(fft(sit_250M_f)))); xlabel('Frequency(Hz)'); ylabel('Amp'); title('I路頻譜圖(低通)') subplot(224) plot(-fs_250M/2:fs_250M/length(sqt_250M_f):fs_250M/2-fs_250M/length(sqt_250M_f),fftshift(abs(fft(sqt_250M_f)))); xlabel('Frequency(Hz)'); title('Q路頻譜圖(低通)')%% 帶通調(diào)制
fs_250M=250e6; T=length(sqt_250M_f);%T= t=0 : 1/fs_250M :T/fs_250M - 1/fs_250M;%fs = 100 % c=exp(j*2*pi*Fc*t); %載波信號,Fc=70e6 c1=cos(2*pi*Fc*t); %同相載波 c2=-sin(2*pi*Fc*t); %正交載波 psk8 = sit_250M_f.*c1 + sqt_250M_f.*c2; figure(9), % subplot(221);plot(t,c);title('載波信號') subplot(221);plot(t,c1);title('同相載波') subplot(222);plot(t,c2);title('正交載波') subplot(223);plot(t,psk8); title('已調(diào)信號') subplot(224); plot(-fs_250M/2:fs_250M/length(psk8):fs_250M/2-fs_250M/length(psk8),fftshift(abs(fft(psk8)))); xlabel('Frequency(Hz)'); ylabel('Amp'); title('已調(diào)信號頻譜圖')%% 解調(diào)
fs_250M=250e6; rit_250M_de=2*psk8.*c1; rqt_250M_de=2*psk8.*c2; y_de7=fir1(127,1/10); rit_250M_f=conv(rit_250M_de,y_de7,'same'); rqt_250M_f=conv(rqt_250M_de,y_de7,'same'); figure(10) subplot(221) plot(rit_250M_f);title('I路解調(diào)信號') subplot(222) plot(rqt_250M_f);title('Q路解調(diào)信號') subplot(223) plot(-fs_250M/2:fs_250M/length(rit_250M_f):fs_250M/2-fs_250M/length(rit_250M_f),fftshift(abs(fft(rit_250M_f)))); xlabel('Frequency(Hz)'); ylabel('Amp'); title('I路解調(diào)信號頻譜圖(低通)') subplot(224) plot(-fs_250M/2:fs_250M/length(rqt_250M_f):fs_250M/2-fs_250M/length(rqt_250M_f),fftshift(abs(fft(rqt_250M_f)))); xlabel('Frequency(Hz)'); title('Q路解調(diào)信號頻譜圖(低通)')%% 250M-25M,插值:先插后濾,抽取:先濾后抽
fs_25M=25e6; %resample為信號降采樣處理,理解如下:B=resample(x,90,250); % 采樣從250Hz降到90Hz,如果250在前,就是插值從90到250,可以看B的長度,250Hz采樣4000個數(shù)據(jù)等于90hz采樣1440個數(shù)據(jù),這就是降采樣。 y_de7=fir1(127,1/10); rit_250M_f1=conv(rit_250M_f,y_de7,'same'); rqt_250M_f1=conv(rqt_250M_f,y_de7,'same');rit_25M=downsample(rit_250M_f1,10); rqt_25M=downsample(rqt_250M_f1,10);figure(11) subplot(221) plot(rit_25M);title('10倍抽取i路') subplot(222) plot(rqt_25M);title('10倍抽取q路') subplot(223) plot(-fs_25M/2:fs_25M/length(rit_25M):fs_25M/2-fs_25M/length(rit_25M),fftshift(abs(fft(rit_25M)))); xlabel('Frequency(Hz)'); ylabel('Amp'); title('I路頻譜圖(低通)') subplot(224) plot(-fs_25M/2:fs_25M/length(rqt_25M):fs_25M/2-fs_25M/length(rqt_25M),fftshift(abs(fft(rqt_25M)))); xlabel('Frequency(Hz)'); title('Q路頻譜圖(低通)')%% 25M-16M,插值:先插后濾,抽取:先濾后抽
fs_16M=16e6; %resample為信號降采樣處理,理解如下:B=resample(x,90,250); % 采樣從250Hz降到90Hz,如果250在前,就是插值從90到250,可以看B的長度,250Hz采樣4000個數(shù)據(jù)等于90hz采樣1440個數(shù)據(jù),這就是降采樣。 % y_de7=fir1(127,1/10); % rit_25M_f=conv(rit_25M,y_de7,'same'); % rqt_25M_f=conv(rqt_25M,y_de7,'same');rit_16M=resample(rit_25M,16,25); rqt_16M=resample(rqt_25M,16,25);figure(12) subplot(221) plot(rit_16M);title('10*25/16倍抽取i路') subplot(222) plot(rqt_16M);title('10*25/16倍抽取q路') subplot(223) plot(-fs_16M/2:fs_16M/length(rit_16M):fs_16M/2-fs_16M/length(rit_16M),fftshift(abs(fft(rit_16M)))); xlabel('Frequency(Hz)'); ylabel('Amp'); title('I路頻譜圖(低通)') subplot(224) plot(-fs_16M/2:fs_16M/length(rqt_16M):fs_16M/2-fs_16M/length(rqt_16M),fftshift(abs(fft(rqt_16M)))); xlabel('Frequency(Hz)'); title('Q路頻譜圖(低通)')%% 16M-1600k,插值:先插后濾,抽取:先濾后抽
fs_1600k=1600e3; %resample為信號降采樣處理,理解如下:B=resample(x,90,250); % 采樣從250Hz降到90Hz,如果250在前,就是插值從90到250,可以看B的長度,250Hz采樣4000個數(shù)據(jù)等于90hz采樣1440個數(shù)據(jù),這就是降采樣。 y_de7=fir1(127,1/10); rit_16M_f=conv(rit_16M,y_de7,'same'); rqt_16M_f=conv(rqt_16M,y_de7,'same');rit_1600k=downsample(rit_16M_f,10); rqt_1600k=downsample(rqt_16M_f,10);figure(13) subplot(221) plot(rit_1600k);title('10倍抽取i路') subplot(222) plot(rqt_1600k);title('10倍抽取q路') subplot(223) plot(-fs_1600k/2:fs_1600k/length(rit_1600k):fs_1600k/2-fs_1600k/length(rit_1600k),fftshift(abs(fft(rit_1600k)))); xlabel('Frequency(Hz)'); ylabel('Amp'); title('I路頻譜圖(低通)') subplot(224) plot(-fs_1600k/2:fs_1600k/length(rqt_1600k):fs_1600k/2-fs_1600k/length(rqt_1600k),fftshift(abs(fft(rqt_1600k)))); xlabel('Frequency(Hz)'); title('Q路頻譜圖(低通)')%% 1600k-160k,插值:先插后濾,抽取:先濾后抽
fs_160k=160e3; %resample為信號降采樣處理,理解如下:B=resample(x,90,250); % 采樣從250Hz降到90Hz,如果250在前,就是插值從90到250,可以看B的長度,250Hz采樣4000個數(shù)據(jù)等于90hz采樣1440個數(shù)據(jù),這就是降采樣。 y_de7=fir1(127,1/10); rit_160k_f=conv(rit_1600k,y_de7,'same'); rqt_160k_f=conv(rqt_1600k,y_de7,'same');rit_160k=downsample(rit_160k_f,10); rqt_160k=downsample(rqt_160k_f,10);figure(14) subplot(221) plot(rit_160k);title('10倍抽取i路') subplot(222) plot(rqt_160k);title('10倍抽取q路') subplot(223) plot(-fs_160k/2:fs_160k/length(rit_160k):fs_160k/2-fs_160k/length(rit_160k),fftshift(abs(fft(rit_160k)))); xlabel('Frequency(Hz)'); ylabel('Amp'); title('I路頻譜圖(低通)') subplot(224) plot(-fs_160k/2:fs_160k/length(rqt_160k):fs_160k/2-fs_160k/length(rqt_160k),fftshift(abs(fft(rqt_160k)))); xlabel('Frequency(Hz)'); title('Q路頻譜圖(低通)')%% 160k-16k,插值:先插后濾,抽取:先濾后抽
fs_16k=16e3; %resample為信號降采樣處理,理解如下:B=resample(x,90,250); % 采樣從250Hz降到90Hz,如果250在前,就是插值從90到250,可以看B的長度,250Hz采樣4000個數(shù)據(jù)等于90hz采樣1440個數(shù)據(jù),這就是降采樣。y_de7=fir1(127,1/10); rit_160k_f=conv(rit_160k,y_de7,'same'); rqt_160k_f=conv(rqt_160k,y_de7,'same');rit_16k=downsample(rit_160k_f,10); rqt_16k=downsample(rqt_160k_f,10);figure(15) subplot(221) plot(rit_16k);title('10倍抽取i路') subplot(222) plot(rqt_16k);title('10倍抽取q路') subplot(223) plot(-fs_16k/2:fs_16k/length(rit_16k):fs_16k/2-fs_16k/length(rit_16k),fftshift(abs(fft(rit_16k)))); xlabel('Frequency(Hz)'); ylabel('Amp'); title('I路頻譜圖(低通)') subplot(224) plot(-fs_16k/2:fs_16k/length(rqt_16k):fs_16k/2-fs_16k/length(rqt_16k),fftshift(abs(fft(rqt_16k)))); xlabel('Frequency(Hz)'); title('Q路頻譜圖(低通)')%% 星座圖
figure(16) scatter(rit_16k,rqt_16k); grid on%% 8psk解調(diào)
fs_16k=16e3; rt=[ ]; rt1=[ ]; for m=1:length(rit_16k)/100:length(rit_16k)II(m) = rit_16k(m); QQ(m) = rqt_16k(m);if II(m)<0 && QQ(m)<0 && QQ(m)<II(m)rt=[1 1 1];%7elseif II(m)<0 && QQ(m)<0 && QQ(m)>II(m)rt=[1 1 0];%6elseif II(m)>0 && QQ(m)<0 && abs(QQ(m))>II(m)rt=[1 0 1];%5elseif II(m)>0 && QQ(m)<0 && abs(QQ(m))<II(m)rt=[1 0 0];%4elseif II(m)<0 && QQ(m)>0 && abs(II(m))<QQ(m)rt=[0 1 1];%3elseif II(m)<0 && QQ(m)>0 && abs(II(m))>QQ(m)rt=[0 1 0];%2elseif II(m)>0 && QQ(m)>0 && II(m)>QQ(m)rt=[0 0 0];%0elseif II(m)>0 && QQ(m)>0 && II(m)<QQ(m)rt=[0 0 1];%1endrt1=[rt1 rt]; end figure(17), subplot(211) plot(rt1);title('解調(diào)出的基帶信號')%以data分量為縱坐標,以元素序號為橫坐標,用直線依次連接數(shù)據(jù)點,繪制曲線 subplot(212) ts=0:1:length(rt1)-1; stem(ts,rt1);title('解調(diào)出的基帶信號');%% 誤比特率
k=0; for i=1:length(data)if(data(i)==rt1(i))k=k;elsek=k+1;end end rate1=k/length(data); fprintf('誤比特率=%f',rate1);注:
1.在上面這段程序中是沒有經(jīng)過信道的,那么如何達到讓它經(jīng)過信道的效果呢,就是在已調(diào)信號上加上一個加性高斯白噪聲即可。就模擬了經(jīng)過信道受到干擾的過程。
2. 可以自己嘗試著去加上高斯白噪聲試試。需要那一段程序的就留言吧。我寫了兩份,有噪聲的那一份在優(yōu)盤里,忘帶了。
?
六、最后
1.如果本文對你有所幫助,就點個贊吧,給點動力,大家一起努力。
2.想著盡量寫清楚一點,但是深入進去,內(nèi)容很多,有些地方跳過了,如果哪里不清楚歡迎指出。
3.歡迎指正。
總結(jié)
以上是生活随笔為你收集整理的超详细的8psk调制解调通信系统讲解与仿真的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于FPGA的AM信号调制与解调详细步骤
- 下一篇: css就近原则_细品100道CSS知识点