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序列可以看出是上下变频导致的波形变化,同时对滑动峰有一些影响(仿真使用的滤波器也回有一些影响),总体误差可以接受。
②余弦信号
使用余弦信号主要是观察代码正确性,更直观一些。分别为未变频,上变频,上下变频,上下变频+低通滤波器。