随机共振基于随机共振的高灵敏度GPS信号捕获算法
Posted fpga和matlab
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了随机共振基于随机共振的高灵敏度GPS信号捕获算法相关的知识,希望对你有一定的参考价值。
算法结构图
首先input输入到SR
这个语句意思就是每次输入一段数据进行处理,因为这个系统是实时反馈的系统,所以在处理的时候,必须是一段段处理,而不能和原来一样一次性进行处理,所以我们每次处理的数据长度为FLEN。
这个是FFT的频率反馈。
第一次迭代,由于没有得到FFT,所以设置为0,然后后面的根据反馈结果对新输入的数据进行修正。
51~66行,是采用龙哥库塔算法计算SR系统,龙哥库塔算法在具体公式:即
然后开始稀疏处理,大概流程如下所示:
根据上述的过程,结合我们的程序,具体如下
首先初始化字典,不过这里,其中DCT矩阵使用cos表示。
第二、
这里,step为稀疏度,我设置的4,相当于用原来的step*step分之一来表示信号,这样就稀疏了。
具体你可以参考
中的
比较类似。
第三
我的代码就是
这个就是OMP过程。就不做介绍了。
第四
就是更新原子字典的过程。
对应程序是:
对应程序是:
然后,我这里更新的过程和他稍微不一样。
残差得到之后,下一次迭代的时候,使用Resd这个残差作为后一次迭代使用。
这里开始FFT变换
然后频谱特征的获得
最后是频率参数的获得
将估计得到的Fest反馈给前面的fd,进行多普勒频偏的修正
clc;
clear;
close all;
warning off;
LEN = 10000;
% load awgnsignal2.mat
% time2 = ans.Time;
% for i = 1:length(time2)
% Xawgn(i,1) = ans.Data(1,1,i);
% end
% save input.mat Xawgn time2
%以下数据从你的simulink中保存,2为-5db,3为-15db,4为-20db,5为-25db,6为-39db
% load input2.mat
% load input3.mat
% load input4.mat
% load input5.mat
load input6.mat
figure;
plot(time2(1:LEN),Xawgn(1:LEN));
title('噪声信号');
xlim([0,time2(LEN)]);
xlabel('t/s');
ylabel('Amplitude');
%信号的采样率
Fs = 2.046e8;
%循环迭代过程中,每次输入的数据长度
FLEN = 8192;
Xsave1= [];
Xsave2= [];
for jj = 1:30
jj
Inputs= Xawgn(FLEN*(jj-1)+1:FLEN*jj);
%求解使用四阶Runge-Kutta方法
%尺度变换SR
%这里fd为反馈调整频率,用来修正多普勒频谱,初始输入阶段,fd设置为0.
if jj == 1
fd = 0;
x1 = real(Inputs(1:length(Inputs))*exp(-sqrt(-1)*2*pi*fd/Fs));
else%fd为后端FFT之后从其频率谱中提取的特征
fd = Fest;
x1 = real(Inputs(1:length(Inputs))*exp(-sqrt(-1)*2*pi*fd/Fs));
end
%自适应调整参数a和h
a0 = 1.8;
a1 = 1.2;
b = 0.05;%参数b固定,调整a和h
h0 = 0.1;
h1 = 0.08;
x = zeros(1,length(x1));
for i=1:length(x1)-1
%计算a changed
a = a0 + (a1-a0)/length(x1);
h = h0 + (h1-h0)/length(x1);
k1 = h*(a*x(i)-b*x(i).^3+x1(i));
k2 = h*(a*(x(i)+k1/2)-b*(x(i)+k1/2).^3+x1(i));
k3 = h*(a*(x(i)+k2/2)-b*(x(i)+k2/2).^3+x1(i+1));
k4 = h*(a*(x(i)+k3)-b*(x(i)+k3).^3+x1(i+1));
x(i+1) = x(i)+(1/6)*(k1+2*k2+2*k3+k4);
end
xstage3 = x;
xstage3(1:200)=[];
xstage3 =xstage3-mean(xstage3);
xstage3 =xstage3/max(abs(xstage3));
%稀疏处理
%rec_X2 = func_omp_denoise(xstage3);
X0 = xstage3;
X1 = [X0;X0;X0;X0;X0;X0;X0;X0];
Vnoise = 0.1;
X1 = double(X1);
X1_std = std2(X1);
[RR,CC] = size(X1);
N = 32;
C = 1/(2*Vnoise^2*(1+Vnoise^2/X1_std^2));
step = 4;
X2 = X1;
X2 = imresize(X2,4);
[RR,CC] = size(X2);
%字典
K = 32*32;
dictmatrix = zeros(N,sqrt(K));
for k=0:sqrt(K)-1
V = cos((0:1:N-1)*k*pi/sqrt(K));
if k>0
V=V-mean(V);
end
dictmatrix(:,k+1)=V/norm(V);
end;
dictmatrix2 = kron(dictmatrix,dictmatrix);
dictmatrix2 = dictmatrix2 * diag(1./sqrt(sum(dictmatrix2.*dictmatrix2)));
X3 = zeros(N*N, ceil(1/step*(RR-N+1))*ceil(1/step*(CC-N+1)));
cnt = 0;
for is = 1:step:RR-N+1
for js = 1:step:CC-N+1
cnt = cnt + 1;
tmps = X2(is:is+N-1, js:js+N-1);
X3(:, cnt) = tmps(:);
end
end
%重构
rec_dictmatrix = zeros(size(dictmatrix2, 2), cnt);
for is = 1:cnt
rec_dictmatrix(:,is) = func_omp(dictmatrix2, X3(:,is), Vnoise);
end
rec_X = dictmatrix2 * rec_dictmatrix;
%重组
[rec_X2, W] = func_Recon(rec_X, step, RR, CC, N);
rec_X2 = rec_X2./W;
%最后的平滑处理,
Y2 = rec_X2(1,:);
Y3 = Y2;
KK = 512;
for is = 1:length(Y2)
if is <= KK
Y3(is) = mean(Y2(1:is));
else
Y3(is) = mean(Y2(is-KK:is));
end
end
Y3(1:KK/2)=[];
FFTlen = length(Y3);%处理数据长度, 也即FFT的长度,用来实时反馈频率估计值
%FFT
yfft = fft(Y3);
%FFT频谱特征获得
yfft2 = fftshift(abs(yfft));
%FFT频谱中提取频率参数调整,将频率估计值反馈到输入的数据中
FF = [0:FFTlen/2]/FFTlen*Fs;
yfft3 = yfft2(FFTlen/2:end);
[Vmax,Imax] = max(yfft3);
Fest = FF(Imax);%得到频率估计值,根据论文中介绍的自适应技术将频率估计结果反馈给
%保存处理后的数据
Xsave1= [Xsave1,Inputs'];
Xsave2= [Xsave2,Y3];
end
Xsave1 = Xsave1/max(abs(Xsave1));
Xsave2 = Xsave2/max(abs(Xsave2));
%对比处理前后的信号的频谱
yfft1 = fft(Xsave1);
yfft1 = fftshift(abs(yfft1));FFTlen=length(yfft1);
FF1 = [-FFTlen/2+1:FFTlen/2]/FFTlen*Fs;
yfft2 = fft(Xsave2);
yfft2 = fftshift(abs(yfft2));FFTlen=length(yfft2);
FF2 = [-FFTlen/2+1:FFTlen/2]/FFTlen*Fs;
figure;
subplot(211);
plot(Xsave1);title('处理前的噪声信号');
xlim([0,1.5e5]);
subplot(212);
plot(FF1,yfft1);title('信号频谱');
ylim([0,2000]);
figure;
subplot(211);
plot(Xsave2);title('处理后的信号');
xlim([0,1.5e5]);
subplot(212);
plot(FF2,yfft2);title('信号频谱');
% ylim([0,20000]);
仿真结果如下:
A28-75
以上是关于随机共振基于随机共振的高灵敏度GPS信号捕获算法的主要内容,如果未能解决你的问题,请参考以下文章
信号检测基于matlab双稳态随机共振的参数寻优算法含Matlab源码 1700期
数字信号处理基于matlab蚁群算法优化随机共振检测含Matlab源码 2045期
数字信号处理基于matlab蚁群算法优化随机共振检测含Matlab源码 2045期
随机共振基于随机共振法的低信噪比周期性信号滤波和提取matlab仿真