求高手指教,matlab下对直扩系统的仿真代码

求高手指教,matlab下对直扩系统的仿真代码,第1张

具体可去matlab中文论坛 搜索“直扩系统仿真代码”,有几个把

下面是直扩系统仿真程序,第一段是扩频和调制,第二段是m序列生成,求 第一段程序接着编扰配高写解扩和解调的程序~

(1)clc

clear

%.............................生成待传输信息,码元宽度为切普宽度的10倍...................

message=randint(1,4)%随机生卖唤成4个0 1码

code=[]

for i=1:length(message)

if message(1,i)==0

code1=zeros(1,10)

else

code1=ones(1,10)

end

code=[code,code1]

end

%...............................生成m序列......................................

a=[ 0 1 0 0 1 1 1 ] %m序列特缓尺征多项式

b=[0 0 0 0 0 0 1]%移位寄存器初始状态

c=length(code) %生成m序列长度

m_sequence=mseq(a,b,c)

dsss=code.*m_sequence%扩频

%.............................BPSK调制.......................................

f=20%载波频率,为码元速率二倍

t=0:1/(f-1):1

cp=[]

mod=[]

for j=1:length(dsss)

if dsss(j)==0

cp1=-ones(1,20)

else

cp1=ones(1,20)

end

c=cos(2*pi*f*t)

cp=[cp,cp1]

mod=[mod,c]

end

bpsk=cp.*mod

plot(bpsk,'linewidth',1.5)grid on

ylabel('bpsk modulation')

axis([0 20*length(dsss) -2 2])

(2)

function[seq]=mseq(connections,registers,len)

m=length(connections)

L=2^m-1%周期长度

if len==0

len=L

end

fan=0

for i=1:len

seq(i)=registers(m)

for j=1:m

fan=fan+connections(j)*registers(j)

fan=(mod(fan,2))

end

for t=m:-1:2%寄存器移位

registers(t)=registers(t-1)

end

registers(1)=fan

fan=0

end

1、如果仿真一个传递函羡高数的阶跃、脉冲等响应,可以直接使用matlab函数。

2、如果是一兄扰尺个复杂的系统,需要使用matlab中的Simulink工具箱。

3、仿真方法,仿真(s+1)/(2s^2+2s+1)的阶跃响应

num=[1

1]

den=[2

2

1]

f=tf(num,den)

Transfer

function:

 

 

s

+

1

2

s^2

+

2

s

+

1

>>

step(f)

这样就可以得到它的李核响应曲线。

clear

fs=1000%采样频率1000hz

N=500%采样点数

t=(0:1:N-1)/fs

f=10%正弦信号频率10hz

x=sin(2*pi*f*t)+randn(size(t))%被随机信号干扰的正弦信号

b = fir1(31,0.5) %由b = fir1(31,0.5)产生32阶滤波器系数

n = 0.1*randn(1,500)% 通过以上滤波系统所加入的噪声

d = filter(b,1,x)+n % 通过滤波器后的期望信号

delta = 0.005 % 设置自适应滤波器其中一个步长因子为0.005

ha = adaptfilt.lms(32,delta)%求出系统的滤波器系数

[y,e] = filter(ha,x,d)

delta0=0.001 %另一个步长因子为0.001作对比

ha=adaptfilt.lms(32,delta0)

[y0,e0]=filter(ha,x,d)

m=1:500

figure(1)

plot(m,x,'g')

figure(2)

plot(m,e,'r',m,e0)

legend('delta=0.001','delta=0.005')

% subplot(2,1,1)

% plot(m,e0)

%

以上是基本的LMS算法

% 滤波型LMS算法滤波

M = 20 % 运行次数

N = 1000 % 信号的长度祥和

n = 0:N-1

s = sin(2*pi*n/10)% 初始信号

u = s + 0.36*randn(1,N) % 叠加噪声后的信号

% 信号叠加噪声波形图

figure(1)

plot(n,u)

title('信号叠加噪声波形图')

xlabel('n')ylabel('u')

y = zeros(1,N)% 初始化经过自适应滤波器后的信号为零向量

w = zeros(1,N)% 初始化自适应滤波器的权向量为零向量

e = zeros(N) % 初始化误差e(n)的为零向量

a = zeros(1,N)% 初始化前向滤波器的权向量为零向量

vare = zeros(N) % 初始化误差的平方e(n)^2的为零向量

estd = zeros(N) % 初始化均方误差E{e(n)^2}的为零向量

vare1 = ones(1,N) % 初始化误差的平方e(n)^2的为1向量

estd1 = ones(1,N) % 初始化均方误差E{e(n)^2}的为1向量

k = 10% 自适应滤波器的阶数

e1 = zeros(1,N) % 初始化前向预测误差e1为零向量

e2 = zeros(1,N) % 初始化滤波向量e为零向量

y(1:k) = u(1:k)

mu0 = 0.0065 % 初始更新步长因子败宴岁

% 初始化前向滤波器的权向量

a(1:11) = [ 0.1642 , 0.1341 , 0.0529,-0.0624 , -0.1586 ,-0.1932 , -0.1555 , -0.0599 , 0.0584, 0.1229 , 0.1106]

% 滤波型LMS算法滤察睁波

for j = (k + 1):M

u = s + 0.36*randn(1,N) % 叠加噪声后的信号

for n=(k+2):N

mu = mu0/(1 + (n/100)) % 先搜索后收敛步长因子

e(j,n) = s(n) - w((n-1):(n+9)) * u(n:-1:(n-10))' % 误差

e1(n) = u(n) + a((n-10):n)*u((n-1):-1:(n-11))'% 前向预测误差

e2(n) = e(j,n) + a((n-10):n)*e(j,(n:-1:(n-10)))' % 滤波

w(n:(n+10)) = w((n-1):(n+9)) + mu*e1(n:-1:(n-10))*e2(n) % 更新自适应滤波器的权向量

y(n) = w((n):(n+10)) * u((n):-1:(n-10))' % 经过自适应滤波器后的信号

vare(j,n) =e(j,n)^2 % 误差的平方e(n)^2

estd(j,n) = vare(j,(1:n))*vare(j,(1:n))'/n% 均方误差E{e(n)^2}

end

end

vare1 = (vare1*vare)/M% 统计平均意义下e(n)^2

estd1 = (estd1*estd)/M% 统计平均意义下学习曲线

% 滤波型LMS自适应滤波输出

figure(2)

plot(y)

title('mu = 0.0065时滤波型LMS自适应滤波输出')

xlabel('n')ylabel('y')

% 滤波型LMS自适应滤波器的e(n)^2的曲线

figure(3)

plot(vare1)

title('滤波型LMS自适应滤波器的e(n)^2的曲线 ')

xlabel('n')ylabel('e(n)^2')

% 滤波型LMS自适应滤波器的学习曲线图

figure(4)

plot(estd1)

title('滤波型LMS自适应滤波器的学习曲线图 ')

xlabel('n')ylabel('E[e(n)^2]')

希望可以帮到你


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12459227.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存