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

歡迎訪問 生活随笔!

生活随笔

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

循环神经网络

Gardner定时同步的matlab实现

發(fā)布時間:2023/12/14 循环神经网络 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Gardner定时同步的matlab实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

網(wǎng)絡(luò)上似乎沒有直接開源的代碼,并且開源的代碼的實現(xiàn)效果也不好(沒有畫BER-EbN0曲線)
這里把我的放給大家,不知道為什么沒達(dá)到理想情況,歡迎交流改進(jìn)。

% BER_timing_syn_qyb % 需要提升采樣頻率,4-8倍? clear close all; Norder = 4; qpskmod = comm.PSKModulator('ModulationOrder',Norder,'PhaseOffset',pi/4,'BitInput',true); qpskdemod = comm.PSKDemodulator('ModulationOrder',Norder,'PhaseOffset',pi/4,'BitOutput',true); Ebn0_max = 12; % data_length sps = 16; Data_Len = 2000000; data = randi([0 1],Data_Len,1); N_ch = 10000;% waveform = bpskmodulator(data); % qpsk調(diào)制 data_map = qpskmod(data); % plot(data_map,'r*') % check = qpskdemod(data_map); % plot(real(data_map)); % 信號上采樣 data_upsp = upsample(data_map,sps); % t:transmitter 發(fā)射端濾波器 span_tx = 16; RolloffCoef = 0.22; % Roll Off Coeff. α設(shè)定 % sps = 4; h_tx = rcosdesign(RolloffCoef,span_tx,sps,'sqrt'); % r:receiver 接收端濾波器 span_rx = 16; RolloffCoef = 0.22; % Roll Off Coeff. α設(shè)定h_rx = rcosdesign(RolloffCoef,span_rx,sps,'sqrt');% 對信號進(jìn)行卷積計算, 此操作名為成型,經(jīng)過濾波處理掉上采樣帶來的誤差 data_shape1 = conv(data_upsp,h_tx,'same'); % figure; % plot(real(data_shape1(1:200)));% ++++++++++++++++++++++++++++++++++++++++++++ % Ebn0 = 10; Norder = 4;r_Sample_data = zeros(1,Data_Len); Rec_out = r_Sample_data; % filter % C_2 = inline('1/6*u^3-1/6*u'); % C_1 = inline('-0.5*u^3+0.5*u^2+1*u'); % C0 = inline('0.5*u^3 - 1*u^2 -0.5*u+1'); % C1 = inline('-1/6*u^3+0.5*u^2-1/3*u'); C_2 = @(u) 1/6*u^3-1/6*u; C_1 = @(u) -0.5*u^3+0.5*u^2+1*u; C0 = @(u) 0.5*u^3 - 1*u^2 -0.5*u+1; C1 = @(u) -1/6*u^3+0.5*u^2-1/3*u;ratio_err = zeros(1,Ebn0_max+1); for Ebn0 = 0:Ebn0_maxfprintf('Computing Ebn0 = %d\n',Ebn0)SNR = Ebn0 + 10*log10(2) - 10*log10(sps); % S/N Ratio for Chanel Simulatioin % E = mean(abs(data_shape1).^2)/log2(Norder); % SNR = E/(10^(Ebn0/10)) * sps;T_Gain = 0.0005; % TED Loop Gain% 初始化參數(shù)值timing_error = 0;displaysize = Data_Len;% ++++++++++channel------------- % data_received = awgn(data_shape1,SNR);E = mean(abs(data_shape1).^2)/log2(Norder);snr = E/(10^(Ebn0/10)) * sps;noise = sqrt(snr/2)*(randn(length(data_shape1),1)+1i*randn(length(data_shape1),1));data_received = data_shape1 + noise;data_r_shape = conv(data_received,h_rx,'same'); % plot(real(data_r_shape(1:200))) % hold onfor i = 1:2*Data_Len/2 % plot(2*i-1,real(data_r_shape(2*i-1)),'r*'); % 1000個symbol,因此2000個sample √r_Sample_data(i) = data_r_shape(8*i-6);endRec_out(1:3) = r_Sample_data(1:3);mk = 0;uk = 0;Interp_Pos = 1;count = 0;timing_error = 0;fprintf('Detection & Interpolation\n')TE_out = zeros(1,Data_Len/2);for i = 3:2:Data_Len-3count = count + 1;%++++++++++++++Gardner TED+++++++++++++++++++定時誤差檢測器% temp= ( ted_data1 - ted_data3 ) * ted_data2;%++++++++++++++++++++++++++++++++++++++++++++ted_data1 = Rec_out(i-2);ted_data2 = Rec_out(i-1);ted_data3 = Rec_out(i);if(real(ted_data1) * real(ted_data3) < 0)||(imag(ted_data1)*imag(ted_data3) < 0)temp = -( ted_data1 - ted_data3 ) * conj(ted_data2);timing_error = real(temp) * T_Gain;elsetiming_error = 0;endTE_out(count) = timing_error;% 更新插值位置Interp_Pos = Interp_Pos + 2 + timing_error;% +++++++++++++Interpolation_1+++++++++++++++++++插值% out = C_2 * in_i(4) + C_1 * in_i(3) + C0 * in_i(2) + C1 * in_i(1);%+++++++++++++++++++++++++++++++++++++++++++++mk = floor(Interp_Pos);uk = Interp_Pos-mk;C_2u = C_2(uk);C_1u = C_1(uk);C0u = C0(uk);C1u = C1(uk);% 3data_2 = r_Sample_data(i-2);data_1 = r_Sample_data(i-1);data0 = r_Sample_data(i);data1 = r_Sample_data(i+1);Interp_data = C_2u * data_2 + C_1u * data_1 + C0u * data0 + C1u * data1;Rec_out(i) = Interp_data;% 4data_2 = r_Sample_data(i-1);data_1 = r_Sample_data(i);data0 = r_Sample_data(i+1);data1 = r_Sample_data(i+2);Interp_data = C_2u * data_2 + C_1u * data_1 + C0u * data0 + C1u * data1;Rec_out(i+1) = Interp_data;% 5data_2 = r_Sample_data(i);data_1 = r_Sample_data(i+1);data0 = r_Sample_data(i+2);data1 = r_Sample_data(i+3);Interp_data = C_2u * data_2 + C_1u * data_1 + C0u * data0 + C1u * data1;Rec_out(i+2) = Interp_data;endr_Sample_show = zeros(1,Data_Len/2);Rec_out_show = zeros(1,Data_Len/2);for i = 1:Data_Len/2r_Sample_show(i) = r_Sample_data(2*i-1);Rec_out_show(i) = Rec_out(2*i-1); endData_BER = zeros(Data_Len/2,1);for i = 1:Data_Len/2if(real(r_Sample_show(i))>0)if(imag(r_Sample_show(i))>0)Data_BER(i) = exp(0.25*pi*1j);elseData_BER(i) = exp(-0.25*pi*1j);endelseif(imag(r_Sample_show(i))>0)Data_BER(i) = exp(0.75*pi*1j);elseData_BER(i) = exp(-0.75*pi*1j);endendend % data_downsp = downsample(data_r_shape,sps); % % plot(data_downsp,'r+'); % % grid on;data_get = qpskdemod(Data_BER);ratio_err(Ebn0 +1) = sum(data((N_ch+1):end) ~= data_get((N_ch+1):end))/(Data_Len-N_ch); endEbN0_dB = 0:Ebn0_max; figure;ber_Theory = berawgn(EbN0_dB, 'psk',4, 'nondiff'); semilogy(EbN0_dB,ratio_err,'-ro') hold on; semilogy(EbN0_dB,ber_Theory,'b') title('BER') ylabel('BER') xlabel('Ebn0')% figure; % plot(TE_out(1:50000))

總結(jié)

以上是生活随笔為你收集整理的Gardner定时同步的matlab实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。