衰落信道知识
使用對象實現衰落信道
使用對象實現的多路徑傳播方案的基帶通道模型包括:
N離散衰落路徑, 每個都有自己的延遲和平均功率增益。一個信道,?N?= 1 稱為頻率平坦衰落通道。一個信道,?N?> 1 作為一個頻率選擇衰落信道?, 其信號具有足夠寬的帶寬。
每個路徑的瑞利或斯模型。
使用杰克斯多普勒頻譜的默認通道路徑建模, 可以指定最大多普勒頻移。其他類型的多普勒頻譜允許 (相同或不同的所有路徑) 包括: 扁平, 限制杰克斯, 不對稱杰克斯, 高斯, 雙高斯, 圓形, 和鐘。
如果在通道對象的構造過程中將最大多普勒頻移設置為0或省略, 則對象將信道建模為靜態。對于這種配置, 衰落不隨時間而變化, 并且所指定的多普勒頻譜對衰落過程沒有影響。
有關延遲和增益的典型值的一些附加信息在選擇實際信道屬性值.
使用塊實現衰落信道
信道塊庫包括可在移動通信中模擬真實世界現象的 MIMO 和單輸入衰落塊。這些現象包括多徑散射效應, 以及發射機和接收機之間的相對運動引起的多普勒位移。
提示
要對衰落和加法白高斯噪聲的信道進行建模, 請使用與 AWGN 信道塊串聯在一起的衰落信道塊, 其中衰落信道塊最先出現。
可以將 MIMO 信道和單輸出?衰落信道塊設置為模型的信道的瑞利或斯衰落分布。根據信號路徑的類型選擇要使用的衰落分布。
| 從發射機到接收機的直接視線路徑 | Rician |
| 從發射機到接收機的一個或多個主要反射路徑 | Rayleigh |
在多個主要反射路徑的情況下, 為瑞利衰落分布配置的衰落信道塊的單個實例可以同時對它們進行建模。
為您的情況選擇適當的塊參數是很重要的。有關更多信息, 請參見選擇實際信道屬性值, 以及?MIMO 衰落通道和單輸出衰落信道阻止參考頁。
可視化衰落信道
您可以使用通道可視化工具查看衰落信道的特征。有關更多信息, 請參見頻道可視化.
補償褪色響應
涉及衰落信道的通信系統通常需要組件 (s) 來補償衰落響應。彌補衰落的典型方法包括:
差分調制或單抽頭均衡器有助于補償頻率平坦衰落信道。有關實現差分調制的信息, 請參見?M-DPSK 調制器基帶塊引用頁。
帶有多個分路器的均衡器有助于補償頻率選擇性衰落信道。有關更多信息, 請參見均衡。
與自適應均衡的通信鏈接示例說明了為什么需要對衰落信道進行補償。
單輸出多徑衰落信道的仿真方法
通信系統中的瑞利和斯多徑衰落信道模擬器 Toolbox?在[1]中使用 9.1. 3.5. 2 的帶限制的離散多路徑信道模型。此實現假定延遲電源配置文件和信道的多普勒頻譜是可分離的[1]。因此, 多徑衰落信道被建模為線性有限沖激響應 (FIR) 濾波器。讓{s我}表示輸入到通道的樣本集。然后樣品{y我}通道的輸出與{s我}通過:
y我=n2?n=?n1s我?ngn
在{gn}是由以下值給定的分路權重集:
gn=k?k=1一個ksinc[τkts?n],??n1≤n≤n2
在上述方程式中:
ts為通道的輸入采樣周期。
{τk}, 在1≤k≤k, 是路徑延遲的集合。K是多路徑衰落信道中的路徑總數。
{一個k}, 在1≤k≤k, 是多徑衰落信道的復雜路徑增益集。這些路徑增益是相互不相關的。
n1和n2的選擇, 以便?gn?當n小于?n1或大于n2.
兩種技術, 過濾高斯噪聲和 sum-of-sinusoids, 被用來生成一組復雜的路徑增益,一個k.
每個路徑增益過程一個k由以下步驟生成:
濾波高斯噪聲技術
在離散時間內, 生成了具有零均值和單位方差的復雜不相關 (白) 高斯過程。
用多普勒濾波器對復高斯過程進行頻率響應濾波h(f)=gs(f), 在s(f)表示所需的多普勒功率譜。
對濾波的復高斯過程進行插值, 使其采樣周期與輸入信號相一致。使用線性和多相插值的組合。
Sum-of-sinusoids 技術
使用[2]中描述的方法生成相互不相關的瑞利衰落波形, 其中?i?= 1對應于相分量,?i?= 2對應于正交分量。
zk(t)μ(我)k(t)=μ(1)k(t)+jμ(2)k(t),?k=1,2,...,k=g2nknk?n=1因為(2πf(我)k,nt+θ(我)k,n),?我=1,2
在
nk指定用于對單個路徑建模的竇的數量。
f(我)k,n是離散多普勒頻率, 并計算在單個路徑中的每個正弦分量。
θ(我)k,n的階段是n屆成分的μ(我)k是一個分布的隨機變量, 在區間上具有均勻分布(0,2π].
t是淡入淡出的進程時間。
當建模一個杰克斯多普勒頻譜, 離散多普勒頻率,f(我)k,n, 最大移位f最大是由
f(我)k,n=f最大因為(α(我)k,n)=f最大因為[π2nk(n?12)+α(我)k,0]
在
α(我)k,0?(?1)我?1π4nk?kk+2,?我=1,?2??和??k=1,2,...,k
為了提前時間的衰落過程, 一個初始的時間參數,t初始, 介紹了。衰落波形成為
μ(我)k(t)=g2nknk?n=1因為(2πf(我)k,n(t+t我n我t)+θ(我)k,n),?我=1,2
當t初始= 0, 衰落過程從時間零開始。的正值t初始在保持它的連續性的同時, 推進衰落過程相對于時間零。
使用 GMEDS 生成信道衰落樣本1?[2]算法。
計算復雜系數
由任一技術造成的復雜過程,zk, 進行縮放以獲得正確的平均路徑增益。在瑞利信道的情況下, 衰落過程獲得如下:
一個k=gωkzk
在ωk=e[?一個k?2]
在斯通道的情況下, 衰落過程獲得如下:一個k=gωk[zkgk研發,k+1+gk研發,kk研發,k+1ej(2πfd,我i/os,kt+θ我i/os,k)]
在k研發,k是 k-th 路徑的斯 k 因子,fd,我i/os,k是 k 次路徑的視線分量的多普勒變換 (赫茲),θ我i/os,k是 k 次路徑的視線分量的初始相位 (在 rad 中)。在輸入到帶限制的多徑信道模型中, 傳輸的符號必須由至少等于脈沖整形引入的帶寬擴展因子的因子取樣。例如, 如果使用 sinc 脈沖整形, 其中脈沖形信號的帶寬等于符號速率, 則帶寬擴展因子為 1, 在輸入到通道時需要至少一個每個符號的采樣。如果使用超過1的因數的凸起余弦 (RC) 濾波器, 其脈沖形狀信號的帶寬等于符號速率的兩倍, 則帶寬擴展因子為 2, 在輸入到通道時, 每個符號至少需要兩個樣本。
有關其他信息, 請參見文章基于?matlab 的面向對象的多路徑衰落信道仿真方法, 位于 MATLABCentral。
引用
[1] Jeruchim,., 巴拉班, P., 并且 Shanmugan, k.s,通信系統的模仿, 再版, 紐約, Kluwer 學術或充滿, 2000。
[2] P?tzold, Matthias, 程湘王, 比 Olav Hogstand。"兩個新的基于 Sum-of-Sinusoids 的方法, 有效生成多不相關的瑞利衰落波形。無線通信的 IEEE 事務。Vol. 8, 數字 6, 2009, pp. 3122–3131。
指定衰落信道
通信系統工具箱將衰落信道建模為線性 FIR 濾波器。使用衰落通道篩選信號包括以下步驟:
創建一個用于描述要使用的信道的信道對象。信道對象是一種 MATLAB 變量, 它包含有關信道的信息, 如最大多普勒頻移。
調整通道對象的屬性 (如有必要), 以根據需要進行定制。例如, 您可以更改路徑延遲或平均路徑增益。
使用調用對象將信道對象應用于您的信號。
本節介紹如何定義、檢查和操作通道對象。這些主題是:
創建通道對象
復制和復制對象
顯示和更改對象屬性
通道對象屬性之間的關系
創建通道對象
選擇這些系統對象之一, 以創建適合您的建模情況的衰落通道對象。
comm.RayleighChannel | 瑞利衰落信道對象 | 一個或多個主要的反射路徑 |
comm.RicianChannel | 斯衰落信道對象 | 一個直接的視線路徑,可能與一個或多個主要的反射路徑結合 |
例如, 下面的命令創建一個信道對象, 它表示一個在 10萬 Hz 采樣的信號上作用的瑞利衰落信道。該通道的最大多普勒頻移是130赫茲。
rayChan1 = comm.RayleighChannel('SampleRate',1e5,...'MaximumDopplerShift',130); % Rayleigh fading channel object若要了解如何調用rayChan1淡入淡出通道對象以通過通道篩選傳輸的信號, 請參閱使用衰落通道.
復制和復制對象
創建對象的另一種方法是復制現有對象, 然后根據需要調整新對象的屬性。如果這樣做, 則使用copy命令很重要, 如
rayChan2 = copy(rayChan1); % Copy rayChan1 to create an independent rayChan2.而不是rayChan2 = rayChan1。copy命令創建一個獨立于rayChan1的rayChan1副本。相比之下, 命令rayChan2 = rayChan1只創建rayChan2作為對rayChan1的引用, 因此rayChan1和rayChan2始終具有無法區分的內容。
顯示和更改對象屬性
信道對象具有許多記錄有關信道模型的信息的屬性, 其中關于已篩選信號的信道的狀態, 以及有關信道對未來信號的操作。
可以通過下列方式查看屬性:
若要查看通道對象的所有屬性, 請在命令窗口中輸入對象的名稱。
若要查看信道對象的特定屬性或將該屬性的值賦給某個變量, 請輸入該對象的名稱, 后跟一個點 (句點), 后跟該屬性的名稱。
可以通過以下方式更改信道對象的可寫屬性:
若要更改信道對象屬性的默認值, 請在對象創建語法中輸入所需的值。
若要更改通道對象的可寫屬性的值, 請發出在信道對象上使用點表示法的分配語句。更具體地說, 點表示法是指由對象名稱組成的表達式, 后跟一個點, 后跟該屬性的名稱。
顯示瑞利通道對象屬性
在 MATLAB 中試用創建一個瑞利通道對象。顯示對象以顯示默認情況下初始化的屬性以及在創建對象時指定的特性。輸入rayChan將顯示通道對象的所有屬性。在創建對象時分配了某些屬性值, 而其他屬性具有默認值。有關特定信道屬性的詳細信息, 請參閱?comm.RayleighChannel?對象。
rayChan = comm.RayleighChannel('SampleRate',1e5,'MaximumDopplerShift',130); rayChan % View all the propertiesrayChan = comm.RayleighChannel with properties:SampleRate: 100000PathDelays: 0AveragePathGains: 0NormalizePathGains: trueMaximumDopplerShift: 130DopplerSpectrum: [1x1 struct]Show all propertiesg = rayChan.AveragePathGains % Retreive the AveragePathGains property of rayChang = 0調整斯通道對象屬性
在 MATLAB 中試用斯衰落信道對象具有一個不為瑞利衰落信道對象 (即標量KFactor屬性) 顯示的附加屬性。有關斯通道屬性的詳細信息, 請參閱?comm.RicianChannel?對象。
更改斯通道對象屬性
創建斯通道對象。Visualization屬性的默認設置為'Off'。將默認設置更改為'Impulse response'會在調用對象時生成輸出信號的脈沖響應圖。
ricChan= comm.RicianChannel; % Create object ricChan.Visualization = 'Impulse response' % Enables the impulse response channel visualizationricChan = comm.RicianChannel with properties:SampleRate: 1PathDelays: 0AveragePathGains: 0NormalizePathGains: trueKFactor: 3DirectPathDopplerShift: 0DirectPathInitialPhase: 0MaximumDopplerShift: 1.0000e-03DopplerSpectrum: [1x1 struct]Show all properties輸出顯示通道對象所有屬性的子集。選擇all properties可查看ricChan的完整屬性集.
通道對象屬性之間的關系
信道對象的某些屬性彼此相關, 這樣, 當一個屬性的值發生變化時, 另一個屬性的值必須以某種相應的方式更改, 以保持通道對象的一致性。例如, 如果更改PathDelays的向量長度, 則AveragePathGains的值必須更改, 以便其向量長度等于PathDelays的新值。這是因為兩個向量的長度等于信道的離散路徑數。有關鏈接屬性和示例的詳細信息, 請參見?comm.RayleighChannel?或?comm.RicianChannel?.
參考頁。
指定衰落信道的多普勒頻譜
信道對象的多普勒頻譜通過其DopplerSpectrum屬性指定。此屬性的值必須為:
多普勒物體。在這種情況下, 相同的多普勒頻譜適用于通道對象的每個路徑。
與PathDelays向量屬性長度相同的多普勒對象的單元格數組。在這種情況下, 每個路徑的多普勒頻譜是由相應的多普勒對象在矢量中給出的。
當 PathDelays 屬性的向量長度增加時, 通過附加杰克斯多普勒對象, DopplerSpectrum 的長度自動增加以匹配 PathDelays 的長度。
如果 PathDelays 矢量屬性的長度減小, 則通過刪除最后一個多普勒對象, DopplerSpectrum 的長度會自動減小以匹配 PathDelays 的長度。
多普勒對象包含用于表征多普勒頻譜的所有屬性, 但最大多普勒頻移除外, 這是信道對象的一個特性。本節介紹如何創建和操作多普勒對象, 以及如何將它們分配給信道對象的DopplerSpectrum屬性。
創建多普勒對象
要創建多普勒對象, 請使用doppler函數。doppler函數的唯一用途是創建用于指定信道對象的DopplerSpectrum屬性值的多普勒對象。
如果將單個多普勒頻譜結構分配給 DopplerSpectrum, 則所有路徑都具有相同的多普勒頻譜。如果 FadingTechnique 屬性是'Sum of sinusoids', 則 DopplerSpectrum 必須是doppler('Jakes');否則, 請從以下選項中進行選擇:
doppler('Jakes')
doppler('Flat')
doppler('Rounded', ...)
doppler('Bell', ...)
doppler('Asymmetric Jakes', ...)
doppler('Restricted Jakes', ...)
doppler('Gaussian', ...)
doppler('BiGaussian', ...)
如果為不同的多普勒頻譜結構 (可以從上一列表中的任何一個) 中選擇一個行單元格數組, 則每個路徑都有由單元格數組中相應結構指定的多普勒頻譜 DopplerSpectrum。在這種情況下, DopplerSpectrum 的長度必須等于PathDelays的長度.
若要生成 C 代碼, 請將此屬性指定給單個多普勒頻譜結構。
例如, 一個高斯譜與正常化 (由渠道的最大多普勒位移) 標準偏差 0.1, 可以被創造如下:
dopp1 = doppler('Gaussian',0.1);重復多普勒對象
與通道對象的情況一樣, 多普勒對象可以使用copy函數進行復制。該命令:
dopp2 = copy(dopp1);創建具有與dopp1相同屬性的多普勒對象dopp2?。dopp1和dopp2分別是多普勒對象的單獨實例, 因為修改二者中的一個不會影響另一個。如果使用dopp1 = dopp2?, 則會導致dopp1和dopp2引用多普勒對象的同一實例, 因為修改任何一個都將導致對另一項的相同修改。
查看和更改多普勒對象屬性
在 MATLAB 中試用查看和更改多普勒對象屬性的語法與通道對象的大小寫相同 (請參閱顯示和更改對象屬性).
創建、更改和查看多普勒對象
創建并顯示一個具有默認屬性的圓角多普勒對象, 并修改其Polynomial屬性的第三個元素。
doppRound = doppler('Rounded')doppRound = struct with fields:SpectrumType: 'Rounded'Polynomial: [1 -1.7200 0.7850]調整多項式的第三系數。
doppRound.Polynomial(3) = 0.825doppRound = struct with fields:SpectrumType: 'Rounded'Polynomial: [1 -1.7200 0.8250]所有多普勒對象共有的屬性SpectrumType是只讀的。它在對象構造中自動指定, 無法修改。如果你想使用不同的多普勒頻譜類型, 你需要創建一個新的多普勒對象的期望類型。
在通道對象中使用多普勒對象
信道對象的DopplerSpectrum屬性可以通過向它分配多普勒對象或多普勒對象的向量來更改。
用平坦多普勒頻譜創建瑞利信道
在 MATLAB 中試用此示例闡釋如何將構造的瑞利通道對象的默認杰克斯多普勒頻譜更改為平面多普勒頻譜:
創建瑞利通道對象
將采樣速率設置為 9600 hz, 最大多普勒 shfit 為100赫茲。
rayChan = comm.RayleighChannel('SampleRate',9600, 'MaximumDopplerShift',100)rayChan = comm.RayleighChannel with properties:SampleRate: 9600PathDelays: 0AveragePathGains: 0NormalizePathGains: trueMaximumDopplerShift: 100DopplerSpectrum: [1x1 struct]Show all propertiesrayChan.DopplerSpectrumans = struct with fields:SpectrumType: 'Jakes'修改多普勒頻譜
創建平面多普勒對象并將其分配到rayChan對象中
doppFlat = doppler('Flat')doppFlat = struct with fields:SpectrumType: 'Flat'rayChan.DopplerSpectrum = doppFlatrayChan = comm.RayleighChannel with properties:SampleRate: 9600PathDelays: 0AveragePathGains: 0NormalizePathGains: trueMaximumDopplerShift: 100DopplerSpectrum: [1x1 struct]Show all propertiesrayChan.DopplerSpectrumans = struct with fields:SpectrumType: 'Flat'利用高斯多普勒頻譜創建斯信道
在 MATLAB 中試用This example shows how to change the default Jakes Doppler spectrum of a constructed Rician channel object to a Gaussian Doppler spectrum with normalized standard deviation of 0.3, and subsequently display the DopplerSpectrum property, and change the value of the normalized standard deviation to 1.1:
Create a Rician channel object
Set the sample rate to 9600 Hz, the maximum Doppler shfit to 100 Hz, and K factor to 2.
ricChan = comm.RicianChannel('SampleRate',9600, 'MaximumDopplerShift',100, 'KFactor',2)ricChan = comm.RicianChannel with properties:SampleRate: 9600PathDelays: 0AveragePathGains: 0NormalizePathGains: trueKFactor: 2DirectPathDopplerShift: 0DirectPathInitialPhase: 0MaximumDopplerShift: 100DopplerSpectrum: [1x1 struct]Show all propertiesricChan.DopplerSpectrumans = struct with fields:SpectrumType: 'Jakes'Modify the Doppler spectrum
Create a Gaussian doppler object with normalized standard deviation of 0.3 and assign it in the?ricChan?object.
doppGaus = doppler('Gaussian',0.3)doppGaus = struct with fields:SpectrumType: 'Gaussian'NormalizedStandardDeviation: 0.3000ricChan.DopplerSpectrum = doppGausricChan = comm.RicianChannel with properties:SampleRate: 9600PathDelays: 0AveragePathGains: 0NormalizePathGains: trueKFactor: 2DirectPathDopplerShift: 0DirectPathInitialPhase: 0MaximumDopplerShift: 100DopplerSpectrum: [1x1 struct]Show all propertiesricChan.DopplerSpectrumans = struct with fields:SpectrumType: 'Gaussian'NormalizedStandardDeviation: 0.3000ricChan.DopplerSpectrum.NormalizedStandardDeviation = 1.1; ricChan.DopplerSpectrumans = struct with fields:SpectrumType: 'Gaussian'NormalizedStandardDeviation: 1.1000Create Rayleigh Channel Using Independent Doppler Spectrum
Try it in MATLABThis example illustrates how to change the default Jakes Doppler spectrum of a constructed three-path Rayleigh channel object to a cell array of different Doppler spectra, and then change the properties of the Doppler spectrum of the third path:
Create a Rayleigh channel object
Set the sample rate to 9600 Hz, the maximum Doppler shfit to 100 Hz, and specify path delays of?0,?1e-4, and?2.1e-4 seconds.
rayChan = comm.RayleighChannel('SampleRate',9600, 'MaximumDopplerShift',100, 'PathDelays',[0 1e-4 2.1e-4])rayChan = comm.RayleighChannel with properties:SampleRate: 9600PathDelays: [0 1.0000e-04 2.1000e-04]AveragePathGains: 0NormalizePathGains: trueMaximumDopplerShift: 100DopplerSpectrum: [1x1 struct]Show all propertiesrayChan.DopplerSpectrumans = struct with fields:SpectrumType: 'Jakes'Modify the Doppler spectrum
Specify the?DopplerSpectrum?property as a cell array with an independent Doppler spectrum for each path.
rayChan.DopplerSpectrum = {doppler('Flat') doppler('Flat') doppler('Rounded')}rayChan = comm.RayleighChannel with properties:SampleRate: 9600PathDelays: [0 1.0000e-04 2.1000e-04]AveragePathGains: 0NormalizePathGains: trueMaximumDopplerShift: 100DopplerSpectrum: {[1x1 struct] [1x1 struct] [1x1 struct]}Show all propertiesrayChan.DopplerSpectrum{:}ans = struct with fields:SpectrumType: 'Flat'ans = struct with fields:SpectrumType: 'Flat'ans = struct with fields:SpectrumType: 'Rounded'Polynomial: [1 -1.7200 0.7850]Change the?Polynomial?property for the third path.
rayChan.DopplerSpectrum{3}.Polynomial = [1 -1.21 0.7]rayChan = comm.RayleighChannel with properties:SampleRate: 9600PathDelays: [0 1.0000e-04 2.1000e-04]AveragePathGains: 0NormalizePathGains: trueMaximumDopplerShift: 100DopplerSpectrum: {[1x1 struct] [1x1 struct] [1x1 struct]}Show all propertiesrayChan.DopplerSpectrum{:}ans = struct with fields:SpectrumType: 'Flat'ans = struct with fields:SpectrumType: 'Flat'ans = struct with fields:SpectrumType: 'Rounded'Polynomial: [1 -1.2100 0.7000]Configure Channel Objects
Before you filter a signal using a channel object, make sure that the properties of the channel have suitable values for the situation you want to model. This section offers some guidelines to help you choose realistic values that are appropriate for your modeling needs. The topics are
Choose Realistic Channel Property Values
Configure Channel Objects Based on Simulation Needs
Store Channel State History
The syntaxes for viewing and changing values of properties of channel objects are described in?Specifying a Fading Channel.
Choose Realistic Channel Property Values
Here are some tips for choosing property values that describe realistic channels:
Path Delays
By convention, the first delay is typically set to zero. The first delay corresponds to the first arriving path.
For indoor environments, path delays after the first are typically between 1 ns and 100 ns (that is, between 1e-9 s and 1e-7 s).
For outdoor environments, path delays after the first are typically between 100 ns and 10 μs (that is, between 1e-7 s and 1e-5 s). Very large delays in this range might correspond, for example, to an area surrounded by mountains.
The ability of a signal to resolve discrete paths is related to its bandwidth. If the difference between the largest and smallest path delays is less than about 1% of the symbol period, then the signal experiences the channel as if it had only one discrete path.
平均路徑增益
通道對象中的平均路徑增益表示每個衰落路徑的平均功率增益。在實際中, 平均路徑增益值是一個大的負 dB 值。但是, 計算機模型通常使用-20 db 和 0 db 之間的平均路徑增益。
平均路徑增益向量中的 dB 值通常呈線性衰減, 但具體的時延分布取決于傳播環境。
為了確保路徑的期望值為 1, 可以通過通道對象的NormalizePathGains屬性規范化路徑增益。
最大多普勒位移
一些無線應用, 如標準 GSM (全球移動通信系統), 更喜歡在移動速度方面指定多普勒變化。如果移動速度為v?(米/秒), 那么最大多普勒頻移計算如下, 其中f是傳輸載波頻率赫茲和c是光速 (3e8 米/秒)。
fd=vfc
根據這個公式的速度的移動, 在高速公路上的移動汽車的信號可能會經歷最大多普勒位移約80赫茲, 而從一個移動的行人的信號可能會經歷一個最大的多普勒位移約4赫茲。這些數字假設一個傳輸載波頻率900兆赫。
0的最大多普勒位移對應于來自瑞利或斯分布的靜態通道。
斯衰落信道的 k-因子
斯 K 因子指定了直接視距路徑的 specular-to-diffuse 功率的比值。比率是線性表達的, 而不是 dB。
對于斯衰落, K 因子通常介于1和10之間。
一個 K 因子0對應于瑞利衰落。
多普勒頻譜參數
有關參數及其意義的說明, 請參見有關多普勒對象的doppler參考頁。
根據模擬需要配置通道對象
有關配置信道對象以自定義篩選過程的提示:
如果將數據分成一系列向量 (例如, 在循環中處理), 則可以多次調用該信道對象 (在循環中的每個迭代中)。在每次調用后更新和保存通道的狀態信息。通道輸出與數據的分區方式無關 (向量長度)。
如果希望通道輸出可重復, 請為通道對象的RandomStream屬性選擇種子選項。若要重復輸出, 請調用reset對象函數以重置內部篩選器和內部隨機數生成器。
如果要對連續傳輸的數據進行建模, 請將FadingTechnique屬性設置為'Sum of sinusoids'和InitialTimeSource屬性, 以便為通道對象'Input port'?。在調用對象時, 指定每個數據向量/幀的開始時間, 通過輸入來處理該通道。
如果要使衰落進程正常化, 以便路徑的預期值為 1 (通道不貢獻額外的電源增益或損耗), 請將通道對象的NormalizePathGains屬性設置為true.
存儲通道狀態歷史記錄
默認情況下, 通道對象的PathGains屬性存儲當前的復雜路徑增益向量。
將信道的StoreHistory屬性設置為 true 將使其存儲最后一個n路徑增益向量, 其中n是通過通道處理的向量的長度。下面的代碼闡釋此屬性
rayChan = comm.RayleighChannel('SampleRate',100000,'MaximumDopplerShift',130); % Rayleigh channel tx = randi([0 1],10,1); % Random bit stream hmod = comm.DBPSKModulator; % Create DBPSK Modulator dpskSig = step(hmod,tx); % Process data by calling the step method rayChan.StoreHistory = true; % Allow states to be stored y = filter(h, dpskSig); % Run signal through channel h.PathGains % Display the stored path gains data本示例生成類似于以下內容的輸出:
-0.7601 - 1.1853i-0.7540 - 1.1822i-0.7480 - 1.1791i-0.7419 - 1.1759i-0.7358 - 1.1728i-0.7298 - 1.1696i-0.7237 - 1.1665i-0.7177 - 1.1634i-0.7115 - 1.1599i-0.7053 - 1.1565ians =0.0788 - 0.5305i最后一個元素是通道的當前路徑增益。
將StoreHistory設置為 true 將大大降低信道的篩選器函數的執行速度。
使用淡入淡出的通道
按照指定衰落通道中的說明創建了通道對象后, 可以調用該對象通過信道傳遞信號。將信號作為輸入參數提供給通道對象。在篩選操作結束時, 通道對象將保留其狀態, 以便您可以通過調用 info 對象函數作為輸入參數來查找最終路徑增益或通道已處理的樣本總數。
有關演示基本語法和狀態保留的示例, 請參見褪色信號的電源.
要使通道的特征可視Visualization, 請將顯示屬性設置為'Impulse response'、'Frequency response'或'Doppler spectrum'。有關更多信息, 請參見頻道可視化.
可視化三路瑞利通道
在 MATLAB 中試用這個例子說明了如何可視化信道的脈沖響應。
創建通道對象
在創建通道對象時, 使用名稱-值對設置Visualization屬性
為'Impulse response'.
rayChan = comm.RayleighChannel('SampleRate',100000,'MaximumDopplerShift',130,...'PathDelays',[0 1.5e-5 3.2e-5],'AveragePathGains',[0, -3, -3],...'Visualization','Impulse response');生成一個比特流并創建一個調制器對象。調制比特流并通過
通過調用信道對象, 通過信道調制 DBPSK 信號。
tx = randi([0 1],500,1); dbspkMod = comm.DBPSKModulator; dpskSig = dbspkMod(tx); y = rayChan(dpskSig);當調用對象時, 會繪制脈沖響應。
rayChan = comm.RayleighChannel('SampleRate',10000,'MaximumDopplerShift',100); sig = j*ones(2000,1); % Signal out = rayChan(sig); % Pass signal through channel. rayChan % Display all properties of the channel object. rayChan = comm.RayleighChannel with properties:SampleRate: 10000PathDelays: 0AveragePathGains: 0NormalizePathGains: trueMaximumDopplerShift: 100DopplerSpectrum: [1x1 struct]Show all properties% Plot power of faded signal, versus sample number. plot(20*log10(abs(out)))
衰落條件下的 DBPSK 經驗與理論性能
在 MATLAB 中試用本示例創建一個頻率平坦的瑞利衰落信道對象, 并調用它來處理由單個矢量組成的 DBPSK 信號。對信噪比的不同值計算比特錯誤率。衰落信道過濾器在 AWGN 之前應用。這是在將淡入淡出與 AWGN 合并時使用的建議序列。
創建瑞利衰落信道、調制器和解調器對象
chan = comm.RayleighChannel('SampleRate',1e4,'MaximumDopplerShift',100);創建 DBPSK 調制器和解調對象, 其調制順序設置為2。生成 DBPSK 調制的數據并通過通道傳遞。
M = 2; % DBPSK modulation order tx = randi([0 M-1],50000,1); % Generate a random bit streammod = comm.DBPSKModulator; demod = comm.DBPSKDemodulator;dpskSig = mod(tx); fadedSig = chan(dpskSig); % Apply the channel effects創建一個 AWGN 的通道對象和 ErrorRate 計算器系統對象。
awgnChan = comm.AWGNChannel('NoiseMethod', 'Signal to noise ratio (SNR)'); errorCalc = comm.ErrorRate;計算信噪比的不同值的誤差率。
SNR = 0:2:20; % Range of SNR values, in dB. numSNR = length(SNR); berVec = zeros(3, numSNR); % Preallocate a vector for BER results for n = 1:numSNRawgnChan.SNR = SNR(n);rxSig = awgnChan(fadedSig); % Add Gaussian noiserx = demod(rxSig); % Demodulatereset(errorCalc)berVec(:,n) = errorCalc(tx,rx); % Compute error rate. end BER = berVec(1,:);計算理論性能結果, 進行比較。
BERtheory = berfading(SNR,'dpsk',M,1);繪制誤碼率結果。
semilogy(SNR,BERtheory,'b-',SNR,BER,'r*'); legend('Theoretical BER','Empirical BER'); xlabel('SNR (dB)'); ylabel('BER'); title('Binary DPSK over Rayleigh Fading Channel');使用通道過濾器延遲
在 MATLAB 中試用信道對象的 ChannelFilterDelay 屬性的值是信道輸出滯后于輸入的樣本數。如果直接比較輸入和輸出數據集, 則必須使用適當的截斷或填充操作來考慮延遲。
該示例說明了在計算位錯誤率之前對延遲進行解釋的方法。
創建 DBPSK 調制器和解調對象, 其調制順序設置為2。生成 DBPSK 調制的數據并通過通道傳遞。
bitRate = 50000; M = 2; % DQPSK modulation ordermod = comm.DBPSKModulator; demod = comm.DBPSKDemodulator;創建瑞利衰落信道對象。
rayChan = comm.RayleighChannel('SampleRate',bitRate,'MaximumDopplerShift',4,...'PathDelays',[0 0.5/bitRate],'AveragePathGains',[0 -10]); chInfo = info(rayChan); delay = chInfo.ChannelFilterDelay;生成隨機比特流數據。對數據進行調制, 通過衰落信道傳遞, 并解調。
tx = randi([0 M-1],50000,1);dpskSig = mod(tx); fadedSig = rayChan(dpskSig); rx = demod(fadedSig);計算比特錯誤率, 考慮到延遲。
errorCalc = comm.ErrorRate('ReceiveDelay', delay); berVec = step(errorCalc,tx,rx); ber = berVec(1)ber = 0.0152 num = berVec(2)num = 760總結
- 上一篇: 数字信号处理中各种频率关系
- 下一篇: FTP主动模式(passive)和被动模