rayleighchan實現瑞利多徑衰落信


rayleighchan實現瑞利多徑衰落信道

1.命令格式: 
chan = rayleighchan(ts,fd,tau,pdb) 
其中: 
ts—為輸入信號的采樣周期, 
fd—就是Doppler頻偏,以Hz為單位,與速率的換算關系為v×fc/c,fc是載頻 
tau—輸入的信道參數,一個向量,包含了各徑的延時,以s為單位 
pdb—輸入的信道參數,一個向量,包含了各徑的功率(當然是均值啦,實際產生的能量都是以此為均值的隨機量),以dB為單位。 
然后y = filter(chan,x),即可將信道的影響加在輸入的數據x上。

2.原理: 
rayleighchan函數生成信道的過程實際是設計一個多抽頭的濾波器,而濾波器的系數計算是多個sinc函數加權、延時后的求和: 
g(n)=\sum_k{ sinc( tau(k)/Ts-n) h(k) },-N1<=n<=N2 
其中N1和N2的選取要使得在-N1<=n<=N2之外的g(n)很小可忽略。

rayleighchan函數的實現步驟是這樣的: 
1) h(k)看作是一串沖激函數,與sinc函數卷積,sinc函數的邊瓣周期由輸入參數采樣時間Ts決定,如果看連續時間波形的話,整個信道響應就是多個不同時延、不同幅度的sinc函數的疊加; 
2) 對這個連續的信道響應進行采樣得到信道濾波器的抽頭系數,采樣間隔為Ts,而采樣點的個數是要保證舍棄位置的信道響應足夠小可以忽略,如果采樣率過小則Ts較大sinc函數衰減慢,需要保存較多個抽頭系數,此時很可能在第一徑位置之前出現若干個信道采樣點,即h(n)~=0, n<0; 
3)輸入信號(以Ts為間隔的采樣點)與濾波器進行卷積輸出(filter函數的作用)。

 注:輸入信號和多徑衰落信道的采樣間隔必須相同。

3.補充:

          sinc函數定義:sinc(x)=sin(x)/x

4.舉例:

程序:

clear all
close all
clc
%-----------------------------升余弦濾波器 Fs=9600; %采樣頻率 Ts=1/Fs; %采樣間隔 Fd=960; %Doppler頻偏,以Hz為單位 tau=[0,0.002]; %多徑延時,以s為單位 pdf=[0,0]; %各徑功率,以dB位單位 h=rayleighchan(Ts,Fd,tau,pdf); %-------------------------------通過信道 data1=[1,zeros(1,100)];%數據1 fc=96; t=0:1/Fs:999*(1/Fs); data2=cos(2*pi*fc*t); %數據2 data2_fft=fft(data2,100); data2_abs=abs(data2_fft); y1=filter(h,data1); y11=abs(y1); y2=filter(h,data2); y22=fft(y2,100); y222=abs(y22); subplot(2,2,1); x1=1:length(data1); h1=stem(x1,data1); set(h1,'MarkerFaceColor','red') subplot(2,2,3); x3=1:length(y11); h3=stem(x3,y11); set(h3,'MarkerFaceColor','red') subplot(2,2,2); x2=1:length(data2_abs); h2=stem(x2,data2_abs); set(h2,'MarkerFaceColor','blue') subplot(2,2,4); x4=1:length(y222); h4=stem(x4,y222); set(h4,'MarkerFaceColor','blue')

 

分析: 
1.tau延時向量,時域上的參數,時域采樣后延遲的點數為fix(tau/Ts). 
2.Fd:多普勒頻偏,頻域上的參數,可以看到信號頻域發生偏移,但是並不是簡單的頻率搬移,而是信號頻率發生擴展,原來是單頻信號,變為頻率段信號。


經過數值的設定可以看到,在command history框下輸入chan得到:

chan的writeable properties

1) 如何設定chan所需的各徑的多普勒譜? 
多普勒譜的種類一共有7種: 
doppler.ajakes;doppler.bigaussian;doppler.jakes;doppler.rjakes;doppler.flat;doppler.gaussian和doppler.rounded。 
      在rayleighchan函數中默認的是Jakes譜,即doppler.jakes。修改多普勒譜的方法是直接對chan.DopplerSpectrum進行設置。

      這里默認了各徑都是按照gaussian譜來生成的,如果需要各徑的Doppler譜不同則可以通過設置 ,即可得到對應於PathDelays的各徑DopplerSpectrum。

2) InputSamplePeriod 
直接設置即可,無線信道傳輸的基帶信號的符號周期

3) PathDelays 
每條徑的延時,單位是seconds

4) MaxDopplerShift 
最大多普勒頻移:對於rayleighchan函數的使用方法研究

5) AvgPathGaindB 
每條路徑增益的平均功率,單位是分貝。

6) StoreHistory 
將chan.StoreHistory設置為1時,可以把信道的信息記錄下來,並可以通過Plot(chan)畫出當前的信道的時域IR,頻域相應等各種圖。

7) NormalizePathGains 
將chan.NormalizePathGains設置為1時,每條路徑增益絕對值的平方和(即功率和)的平均值為1。這個可以通過多次使用rayleighchan生成信道,求取信道各路徑增益絕對值的平方和即可看到其平均值為1。

8) StorePathGains 
將chan.StorePathGains設置為1時,各路徑的增益將會被記錄下來,但是不能使用Plot(chan)畫圖。

  • 在這里額外說一點,信道的StorePathGains設為1時,查看chan.PathGains可以發現這個值是一個N×M的矩陣,在這里N是信道處理的數據長(也就是輸入信號的長度),M是多徑數。這里的chan.PathGains每列是線性變化的,原因是在處理每個數據時信道由於受到多普勒譜的影響是時變的,但信道的狀態是連續的。

9) ResetBeforeFiltering 
將chan.ResetBeforeFiltering在使用filter函數前設置為0時,可以看到信道各路徑的斜率會是一個值,也就是無論處理多少數據信道的實際狀態都是連續的,無論其他的條件(比如噪聲和輸入信號)發生怎樣的變化,信道的狀態是連續的,但不是說信道的增益值是恆定的數值,只是信道增益的實際值線性增長的,信道的狀態時連續的。(每次使用filter函數一次,信道增益的實際數值都是會發生變化的。)只要信道的狀態不變就相當於信道沒有發生質的變化,在仿真時我們可以認為使用的是同一個信道。

如果設置為1,則是說明每次生成的信道增益的狀態是不連續的,也就是信道發生了變化,我認為這在仿真時可以控制信道變化的快慢。

chan2的read-only properties

1) ChannelType 
這個就沒什么好說了,只是說明使用函數生成的信道是瑞利的還是萊斯的。

2) PathGains 
信道各路徑的真實增益,這個增益不是通過AvgPathGaindB換算過來的,AvgPathGaindB是平均增益,所以生成的各路徑增益的功率值是圍繞這個值生成的。

3) ChannelFilterDelay 
這個值沒有什么好說的,原因是這個值沒有什么用,它一般是和信道的PathDelays的第一個值是對應的。

4) NumSamplesProcessed 
這個值是說信道處理了多少個數據,如果輸入信號矢量的長度是N,則這個值就是N。

文章轉自於: 
http://blog.sina.com.cn/s/blog_ab9e9fc30101ejf5.html 
http://blog.sina.com.cn/s/blog_8d3179bd01015jm8.html

http://blog.csdn.net/shenjun1992722/article/details/50193381


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM