⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timng_test.m

📁 通信中位同步的gardner算法的matlab仿真
💻 M
字号:
clear
clc
close all

dt = 1/88;
pi2 = 2*pi;

fid = fopen('rand_data.m','r');
source =  fread(fid)';
fclose(fid);
source1 = [source zeros(1,100)];

Qpsk_sig(1,:) = 2*source1(1:2:end)-1;
Qpsk_sig(2,:) = 2*source1(2:2:end)-1;

Expand_sig = zeros(2,size(Qpsk_sig,2)*8);
Expand_sig(1,1:8:end) = Qpsk_sig(1,:);
Expand_sig(2,1:8:end) = Qpsk_sig(2,:);

coeff_5 = firrcos(28,5.5,0.25,88,'rolloff','sqrt');

Filter_sig(1,:) = conv(Expand_sig(1,:),coeff_5);
Filter_sig(2,:) = conv(Expand_sig(2,:),coeff_5);

t = [0:dt:(size(Filter_sig,2)-1)*dt];
Md_sig_c =  Filter_sig(1,:).*cos(pi2*22*t) + Filter_sig(2,:).*sin(pi2*22*t);
Md_sig_s = -Filter_sig(1,:).*sin(pi2*22*t) + Filter_sig(2,:).*cos(pi2*22*t);   % 与希尔伯特变换等效,

clear Filter_sig;
clear Expand_sig;
clear Qpsk_sig;

sig_stor_c = resample(Md_sig_c,8802,8800);
sig_stor_s = resample(Md_sig_s,8802,8800);
dt1 = 1/88.02;
t = [0:dt1:(length(sig_stor_s)-1)*dt1];

sig_ave_pow = (norm(sig_stor_c)^2+norm(sig_stor_s)^2)/(length(sig_stor_s));
dc_rig = zeros(1,29);
ds_rig = zeros(1,29);
decode = zeros(2,2);
count = -28;
count1 = 0;
decode_out = [];
store = [];
for i = 1:length(sig_stor_c)  
    count = count+1;
    Md_sig_c = sig_stor_c ;
    Md_sig_s = sig_stor_s;
    Md_sig = Md_sig_c + Md_sig_s;
    
    dc = Md_sig_c(i)*cos(pi2*22*t(i)) - Md_sig_s(i)*sin(pi2*22*t(i));
    ds = Md_sig_c(i)*sin(pi2*22*t(i)) + Md_sig_s(i)*cos(pi2*22*t(i));
    dc_rig(2:end) = dc_rig(1:end-1);
    ds_rig(2:end) = ds_rig(1:end-1);
    dc_rig(1) = dc;
    ds_rig(1) = ds;
    
    d_convert_c = dc_rig*coeff_5';
    d_convert_s = ds_rig*coeff_5';
    
    if mod(count,4)==1  & count>0 
        count1 = count1+1;
        decode(1,2) = decode(1,1);
        decode(2,2) = decode(2,1);
        decode(1,1) = d_convert_c;
        decode(2,1) = d_convert_s;
        
        if mod(count1,2)==0
            store = [store decode(1,1)];
            tempt1 = decode(1,1) + decode(1,2);
            tempt2 = decode(2,1) + decode(2,2);
            
            if tempt1>0 & tempt2>0
                decode_out = [decode_out 1 1];
            elseif tempt1>0 & tempt2<0
                decode_out = [decode_out 1 0];
            elseif tempt1<0 & tempt2>0
                decode_out = [decode_out 0 1];
            else 
                decode_out = [decode_out 0 0];
            end
        end
        
    end
    
end

err_num = 0;
err_bit = zeros(1,length(source));
for i = 1:length(source)
    if decode_out(i)~=source(i)
        err_num = err_num+1;
        err_bit(i) = 1;
    end
end
err_rate = err_num/length(source)














⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -