日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > 循环神经网络 >内容正文

循环神经网络

gardner环 matlab,gardner 算法matlab实现

發布時間:2023/12/14 循环神经网络 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gardner环 matlab,gardner 算法matlab实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

% 仿真4比特原始數據與星座圖的編碼映射過程;

% 完成16QAM信號的調制解調;

% 基帶信號符號速率 ps =1Mbps;

% 成形濾波器的滾降因子 a=0.8;

% 載波信號頻率fc=2MHz ;

% 采樣頻率 Fs=8MHz ;

% 繪制16QAM信號的頻譜及時域波形;

% 采用相干解調法仿真其解調過程;

% 繪制解調前后的基帶信號時域波形;

% 將原始基帶數據、QAM已調數據、濾波器系數寫入相應的文本文件中。

clc;

close all;

ps=1*10^6; %碼速率為1MHz

a=0.8; %成形濾波器系數

Fs=8*10^6; %采樣速率

fc=2*10^6; %載波頻率

N=4000; %仿真數據的長度

t=0:1/Fs:(N*Fs/ps-1)/Fs;%產生長度為N,頻率為fs的時間序列

s=randint(N,1,16); %產生隨機16進制數據作為原始數據

Bs=dec2bin(s,4); %將十進制數據轉換成4比特的二進制數據

%對Bs的高2比特進行差分編碼

%取高2比特分別存放在A,B變量中

A=s>7;

B=(s-A*8)>3;

%差分編碼后的數據存放在C,D中

C=zeros(N,1);D=zeros(N,1);

for i=2:N

C(i)=mod(((~mod(A(i)+B(i),2))&mod(A(i)+C(i-1),2)) + (mod(A(i)+B(i),2)&mod(A(i)+D(i-1),2)),2);

D(i)=mod(((~mod(A(i)+B(i),2))&mod(B(i)+D(i-1),2)) + (mod(A(i)+B(i),2)&mod(B(i)+C(i-1),2)),2);

end

%差分編碼后的高2比特數據與原數據低2比特合成映射前的數據DBs

DBs=C*8+D*4+s-A*8-B*4;

%完成調制前的正交同相支路數據映射

I=zeros(1,N);Q=zeros(1,N);

for i=1:N

switch DBs(i)

case 0, I(i)=3; Q(i)=3;

case 1, I(i)=1; Q(i)=3;

case 2, I(i)=3; Q(i)=1;

case 3, I(i)=1; Q(i)=1;

case 4, I(i)=-3;Q(i)=3;

case 5, I(i)=-3;Q(i)=1;

case 6, I(i)=-1;Q(i)=3;

case 7, I(i)=-1;Q(i)=1;

case 8, I(i)=3; Q(i)=-3;

case 9, I(i)=3; Q(i)=-1;

case 10,I(i)=1; Q(i)=-3;

case 11,I(i)=1; Q(i)=-1;

case 12,I(i)=-3;Q(i)=-3;

case 13,I(i)=-1;Q(i)=-3;

case 14,I(i)=-3;Q(i)=-1;

otherwise,I(i)=-1;Q(i)=-1;

end

end

%對編碼數據以Fs頻率采樣

Ads_i=upsample(I,Fs/ps);

Ads_q=upsample(Q,Fs/ps);

%加噪聲

% SNR=30;

% Ads_i=awgn(Ads_i,SNR);

% Ads_q=awgn(Ads_q,SNR);

%設計平方根升余弦濾波器

n_T=[-2 2];

rate=Fs/ps;

T=1;

Shape_b = rcosfir(a,n_T,rate,T,'sqrt');

%對采樣后的數據進行升余弦濾波;

rcos_Ads_i=filter(Shape_b,1,Ads_i);

rcos_Ads_q=filter(Shape_b,1,Ads_q);

%產生同相正交兩路載頻信號

f0_i=cos(2*pi*fc*t);

f0_q=sin(2*pi*fc*t);

%產生16QAM已調信號

qam16=rcos_Ads_i.*f0_i+rcos_Ads_q.*f0_q;

figure;

plot(qam16);

srdata = rcos_Ads_i + rcos_Ads_q * 1i;

scatterplot(srdata(length(srdata)*0.9:2:length(srdata)));

%%%%% 仿真輸入測試的PSK基帶數據 %%%

bitstream=randint(1,N,2);

psk2=pskmod(bitstream,2);

xI=zeros(1,Ns);

xQ=zeros(1,Ns);

xI(1:8:8*N)=real(psk2);%8倍插值

xQ(1:8:8*N)=imag(psk2);

%截短后的根升余弦匹配濾波器

h1=rcosfir(0.8,[-8,8],4,1,'sqrt');

hw=kaiser(65,3.97);

hh=h1.*hw.';

aI1=conv(xI,hh);

bQ1=conv(xQ,hh);

L=length(aI1);

%仿真輸入數據

% aI=[aI1(22:2:L),0,0];%2倍抽取

% bQ=[bQ1(22:2:L),0,0];

%

% scatterplot(psk2(length(psk2)*0.5:length(psk2)));

aI=real(srdata(202:2:length(srdata)));%2倍抽取?為何先8倍插值,再2倍抽取?

bQ=imag(srdata(202:2:length(srdata)));

ma=max(abs(aI));mb=max(abs(bQ));

m=max(ma,mb);

aI=aI/m;bQ=bQ/m;

%

N=floor(length(aI)/4);

Ns=4*N; %總的采樣點數

bt=0.001;

c2=2^(-14);

c1=2^(-6);

% c1=8/3*bt;

% c2=32/9*bt*bt;

i=3; %用來表示Ts的時間序號,指示n,n_temp,nco,

w=[0.5,zeros(1,N-1)]; %環路濾波器輸出寄存器,初值設為0.5

n=[0.7 zeros(1,Ns-1)]; %NCO寄存器,初值設為0.9

n_temp=[n(1),zeros(1,Ns-1)];

u=[0.6,zeros(1,2*N-1)];%NCO輸出的定時分數間隔寄存器,初值設為0.6

yI=zeros(1,2*N); %I路內插后的輸出數據

yQ=zeros(1,2*N); %Q路內插后的輸出數據

time_error=zeros(1,N); %Gardner提取的時鐘誤差寄存器

ik=time_error;

qk=time_error;

k=1; %用來表示Ti時間序號,指示u,yI,yQ

ms=1; %用來指示T的時間序號,用來指示a,b以及w

strobe=zeros(1,Ns);

ns=length(aI)-2;

while(i

n_temp(i+1)=n(i)-w(ms);

% n_temp(i+1)=n(i)-0.5;

if(n_temp(i+1)>0)

n(i+1)=n_temp(i+1);

else

n(i+1)=mod(n_temp(i+1),1);

%內插濾波器模塊

FI1=0.5*aI(i+2)-0.5*aI(i+1)-0.5*aI(i)+0.5*aI(i-1);

FI2=1.5*aI(i+1)-0.5*aI(i+2)-0.5*aI(i)-0.5*aI(i-1);

FI3=aI(i);

yI(k)=(FI1*u(k)+FI2)*u(k)+FI3;

FQ1=0.5*bQ(i+2)-0.5*bQ(i+1)-0.5*bQ(i)+0.5*bQ(i-1);

FQ2=1.5*bQ(i+1)-0.5*bQ(i+2)-0.5*bQ(i)-0.5*bQ(i-1);

FQ3=bQ(i);

yQ(k)=(FQ1*u(k)+FQ2)*u(k)+FQ3;

strobe(k)=mod(k,2);

%時鐘誤差提取模塊,采用的是Gardner算法

if(strobe(k)==0)

%取出插值數據

ik(ms)=yI(k);

qk(ms)=yQ(k);

%每個數據符號計算一次時鐘誤差

if(k>2)

Ia=(yI(k)+yI(k-2))/2;

Qa=(yQ(k)+yQ(k-2))/2;

time_error(ms)=[yI(k-1)-Ia ] *(yI(k)-yI(k-2))+[yQ(k-1)-Qa] *(yQ(k)-yQ(k-2));

else

time_error(ms)=(yI(k-1)*yI(k)+yQ(k-1)*yQ(k));

end

%環路濾波器,每個數據符號計算一次環路濾波器輸出

if(ms>1)

w(ms+1)=w(ms)+c1*(time_error(ms)-time_error(ms-1))+c2*time_error(ms-1);

%w(ms+1)=w(ms)+c1*(time_error(ms)-time_error(ms-1));

else

w(ms+1)=w(ms)+c1*time_error(ms)+c2*time_error(ms);

end

ms=ms+1;

end

k=k+1;

% u(k)=n(i)/w(ms);

u(k) = 0.5* n(i);%%近視運算

end

i=i+1;

end

%

figure;

subplot(311);plot(u);xlabel('運算點數');ylabel('分數間隔');

subplot(312);plot(time_error);xlabel('運算點數');ylabel('定時誤差');

subplot(313);plot(w);xlabel('運算點數');ylabel('環路濾波器輸出');

%

%

%

iq=ik+qk*sqrt(-1);

L=length(iq)

% off=6;

scatterplot(iq(1:end));

scatterplot(iq(L*0.5:end));

scatterplot(iq(L*0.9:end));

總結

以上是生活随笔為你收集整理的gardner环 matlab,gardner 算法matlab实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。