rayleighchan/comm.RayleighChannel

通过多径瑞利衰落信道对输入信号进行滤波

感谢大佬文章:
https://blog.csdn.net/shenjun1992722/article/details/50193381

rayleighchan

chan = rayleighchan(ts,fd,tau,pdb)

ts-输入信号的采样周期;fd-多普勒频移,单位为hz;tau-输入的信道参数,向量,包含了各径的延时,单位为s;pdb-输入的信道参数,向量,包含各径的功率【均值,实际产生的能量都是以此为均值的随机量】单位dB
然后

y = filter(chan,x) % 将信道的影响加在输入的数据x上

rayleighchan函数生成信道的过程实际是设计一个多抽头的滤波器,而滤波器的系数计算是多个sinc函数加权、延时后的求和:
g(n)=\sum_k{ sinc( tau(k)/Ts-n) h(k) },-N1<=n<=N2
其中N1和N2的选取要使得在-N1<=n<=N2之外的g(n)很小可忽略

实现步骤

  1. h(k)看作是一串冲激函数,与sinc函数卷积,sinc函数的边瓣周期由输入参数采样时间Ts决定,如果看连续时间波形的话,整个信道响应就是多个不同时延、不同幅度的sinc函数的叠加;
  2. 对这个连续的信道响应进行采样得到信道滤波器的抽头系数,采样间隔为Ts,而采样点的个数是要保证舍弃位置的信道响应足够小可以忽略,如果采样率过小则Ts较大sinc函数衰减慢,需要保存较多个抽头系数,此时很可能在第一径位置之前出现若干个信道采样点,即h(n)~=0, n<0;
    3)输入信号(以Ts为间隔的采样点)与滤波器进行卷积输出(filter函数的作用)。【sinc(x)=sin(x)/x】
    注:输入信号和多径衰落信道的采样间隔必须相同。
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')

tau为延时向量,时域上的参数,时域采样后延迟的点数为fix(tau/Ts);fd为多普勒频偏,频域参数,看到信号频域发生偏移,不是简单的频率搬移,而是信号频率发生扩展,原来是单频信号,变为频率段信号。
经过数值的设定看到,在命令框下输入chan就能得到:
1) 如何设定chan所需的各径的多普勒谱?
多普勒谱的种类一共有7种:
doppler.ajakes;doppler.bigaussian;doppler.jakes;doppler.rjakes;doppler.flat;doppler.gaussian和doppler.rounded。
在rayleighchan函数中默认的是Jakes谱,即doppler.jakes。修改多普勒谱的方法是直接对chan.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,则是说明每次生成的信道增益的状态是不连续的,也就是信道发生了变化,我认为这在仿真时可以控制信道变化的快慢。
可读属性:
1) ChannelType
这个就没什么好说了,只是说明使用函数生成的信道是瑞利的还是莱斯的。
2) PathGains
信道各路径的真实增益,这个增益不是通过AvgPathGaindB换算过来的,AvgPathGaindB是平均增益,所以生成的各路径增益的功率值是围绕这个值生成的。
3) ChannelFilterDelay
这个值没有什么好说的,原因是这个值没有什么用,它一般是和信道的PathDelays的第一个值是对应的。
4) NumSamplesProcessed
这个值是说信道处理了多少个数据,如果输入信号矢量的长度是N,则这个值就是N。

comm.RayleighChannel

https://blog.csdn.net/lanluyug/article/details/82978606

1.创建comm.RayleighChannel对象并设置其属性
2.用参数调用对象,就当其为一个函数

创建

% 创建频率选择性或平坦多径瑞利衰落信道系统对象
rayleighchan = comm.RayleighChannel
% 创建一个多路径瑞利衰落信道,指定属性Name设置为指定的Value
rayleighchan = comm.RayleighChannel(Name,Value)

属性

1.SampleRate——输入信号采样速率(hz)
以hz为单位的输入信号采样率;正标量;数据类型:双精度;默认值为1.
2.pathDelays——多径的时延矢量(s)
指定为标量或行向量;当设置为标量时,信道是平坦的;当设置为向量时,信道时频率选择性的。默认值为0;双精度
PathDelays和AveragePathGain属性的长度必须相同。
3. AveragePathGains:多径的平均信道增益矢量(dB)。作为双精度,实数,标量或行向量。 默认值为0。
AveragePathGains必须与PathDelays具有相同的大小。)
4. NormalizePathGains:归一化平均路径增益。
(1)1(true):衰落过程被归一化,使得路径增益的总功率(随时间平均)为0dB。
(2)0(false):路径增益的总功率未归一化
AveragePathGains属性指定路径增益的平均功率。数据类型:逻辑
5. MaximumDopplerShift:所有信道的最大多普勒频移(Hz)。
最大多普勒频移限制适用于每个信道路径,此属性设置为0时,信道对整个输入保持静态。对于每个路径MaximumDopplerShift属性值必须小于SampleRate/10/fc,fc时路径的截止频率因子,对于多数多普勒频谱类型,fc的值为1,对于高斯和双高斯多普勒频谱类型,fc取决于多普勒频谱结构字段,(以赫兹为单位指定所有通道路径的最大多普勒频移,作为双精度,实数,非负标量。 默认值为0.001 Hz。
6. DopplerSpectrum:多普勒频谱对象(s)(为信道的路径指定多普勒频谱形状。指定为多普勒频谱结构或多普勒频谱结构的1*Np单元阵列。多普勒频谱结构必须是从多普勒函数返回的形式输出。Np是PathDelays属性指定的多径延迟路径数,MaximumDopplerShift属性定义了最大多普勒频移值,这个值就是指定多普勒频谱时DopplerSpectrum 属性运行的值。
当DopplerSpectrum 设置为单个多普勒频谱结构时,所有路径都具有相同的指定多普勒频谱。
当DopplerSpectrum 设置为多普勒频谱结构的单元阵列时,每个路径都具有单元阵列中响应结构指定的多普勒频谱。
使用多普勒函数的specType输入指定频谱类型的选项。如果你设置FadingTechnique属性为’sum of sinusoids’,你必须将DopplerSpectrum 设置为doppler(‘Jakes’)
要使用此属性,将MaximumDopplerShift属性设置为正标量。
7.ChannelFiltering:信道滤波
信道过滤,指定为以下逻辑值之一
(1)1(ture):信道接收输入信号并产生滤波输出信号。
(2)0(false):对象不接收输入信号,不产生滤波输出信号,仅输出信道路径增益。必须使用NumSamples属性指定渐变过程的持续时间。
数据类型:逻辑;
MaximumDopplerShift属性值大于0时,此属性适用。此属性的默认值为doppler(‘Jakes’)。数据类型:struct/cell
用的时候再看

猜你喜欢

转载自blog.csdn.net/qq_41175681/article/details/129398617
今日推荐