matlab的上下变频(ZC序列和余弦信号)

1.尝试原因

在使用X410和N321收发信号时发现发出的ZC序列中间会有一个裂痕。所以用matlab仿照上下变频进行尝试,之前的通信仿真一般只在基带操作,很少使用变频观察,所以也算做个记录。

2.参考

数字信号处理基础----信号下变频和解调_信号处理 上下变频-CSDN博客

Matlab使用fft画出信号频谱(详细注释)_matlabfft画频谱图-CSDN博客

3.实现原理

这里直接引用参考里的原理,不再赘述。

4.实现过程

分为两部分,b_trans为使用的序列,分别用ZC序列和余弦信号进行尝试,由于变频后的幅度降低一半,所以滑动相关的峰值也会降低一半。把代码放在一起如下。

fs=200000;
fc=3000000;
K=4111;%ZC长度
a_k = zadoffChuSeq(1,K);
GP = zeros(ceil((length(a_k))/4)+1,1);
%b_trans = cat(1,a_k,GP);%使用ZC序列 
b_trans = cos(2*pi*tt).'; %使用余弦信号
t_len=length(b_trans);
tt = 0:1/fs:(t_len-1)/fs ;   %时间
f=(0-fs/2:fs/t_len:fs-fs/2-fs/t_len);%频率   
f_200=(0-fs/2:fs/200/t_len:fs/2-fs/200/t_len)*200;%过采样后的频率

rx_match = resample((b_trans).',200,1);%采样到fs*200
b2=duc(fs*200,fc,rx_match);
b2_2=resample(b2,1,200);
b3=ddc(fs*200,fc,b2);
b4=lowpass(b3,200000,200000*200);
b4=resample(b3,1,200);
b5=repmat(b4,1,5);
b5_5=xcorr(b5,a_k);
b6=repmat(b_trans.',1,5);
b6_5=xcorr(b6,a_k);
% figure(1)
% plot(1:length(b5),(abs((b5))));
% figure(2)
% plot(1:length(b5_5),abs(b5_5));
% figure(3)
% plot(1:length(b6_5),abs(b6_5));

figure(1)
plot(f_200,fftshift(abs(fft(rx_match))));
figure(2)
plot(f_200,fftshift(abs(fft(b2))));
figure(3)
plot(f_200,fftshift(abs(fft(b3))));
figure(4)
plot(f,fftshift(abs(fft(b4))));

function duc_out = duc(fs,fc,duc_in)
    t_len = length(duc_in)                                                ;  % 取数据的长度
    t = 0:1/fs:(t_len-1)/fs                                               ;  % 以fs为周期产生时间序列
 
    %   产生正交的载波
    carrier_i = cos(2*pi*fc*t)                                            ;  % 载波频率的余弦波
    carrier_q = sin(2*pi*fc*t)   ;  % 载波频率的正弦波

    %   取上变频的数据实部和虚部
    rcos_data_i = real(duc_in)                                            ;
    rcos_data_q = imag(duc_in)                                            ;

    duc_out = carrier_i.*rcos_data_i - 1j*carrier_q.*rcos_data_q             ;   % 正交变频
end

function ddc_out = ddc(fs,fc,ddc_in)  
    tt_len = length(ddc_in)                                              ;
    tt = 0:1/fs:(tt_len-1)/fs                                            ;
      
    %   以fs采样率生成的中频信号
    carrier_i = cos(2*pi*fc*tt)                                          ;  
    carrier_q = sin(2*pi*fc*tt)                                          ;
    
    %   正交下变频
    ddc_data_i = carrier_i.*ddc_in                                       ;
    ddc_data_q = carrier_q.*ddc_in                                       ; 
    
    %   下变频数据输出
    ddc_out =  ddc_data_i-ddc_data_q                                        ;
end                                      

5.结果图

①ZC序列可以看出是上下变频导致的波形变化,同时对滑动峰有一些影响(仿真使用的滤波器也回有一些影响),总体误差可以接受。

②余弦信号

使用余弦信号主要是观察代码正确性,更直观一些。分别为未变频,上变频,上下变频,上下变频+低通滤波器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值