248 views
首页 > 旧档 > 铁路行车自动指挥系统FSK信号的检测

铁路行车自动指挥系统FSK信号的检测

作业要求:
在我国铁路区间行车自动指挥系统中,广泛采用相位连续的二进制FSK信号指挥列车的运行速度。随着铁路提速的发展,多信息移频自动闭塞系统已经广泛应用于铁路区间行车自动指挥系统中。铁路信号采用相位连续的二进制FSK(频移键控)调制方式,每种移频信号代表了一定的速度控制信息,直接指挥列车的运行速度。
我国的铁路信号中主要有:国产移频制式和UM71制式两种。虽然新建的铁路线路基本使用UM71制式,但仍然有很多铁路使用国产移频制式。铁路信号中使用的FSK信号是连续相位二进制FSK信号,低频调制信号为占空比50%的周期方波信号,根据方波的高、低电平决定FSK信号在对应时刻是上频偏还是下频偏。
国产移频制式:
载波标准频率 550Hz,650Hz,750Hz,850Hz;
频率偏移 △f=55Hz;
低频信息:11Hz 15Hz 20Hz 26Hz。
UM71制式:
载波标准频率 1700Hz,2000Hz,2300Hz, 2600Hz;
频率偏移 △f=11Hz;
低频信息:从10.3Hz起 以1.1Hz等差递增至29Hz。
设计一个采样数字处理方案利用FFT检测该类信号。信号检测的目标为:1FSK信号上、下边频以及中心频率,检测误差为±0.1Hz;2低频调制频率,误差为±0.01Hz。目标信号的信噪比约为10dB以上。
频谱分析:详见附件,可以对2FSK信号频谱分析检测到所要求的信息
采用技术:欠采样,ZFFT
原因:减少FFT点数,有利于硬件的实现
需要解决的问题:
在进行了多次仿真之后发现,低频调制频率的检测达不到所要求精度,要求精度为0.01HZ,所求精度大概在0.07左右。在对仿真参数进行了多次修改之后问题依然存在。分析问题后估计原因有两个:1,仿真过程中加入了10db的白噪声,即信号强度为噪声的10倍,最后检测出来的FFT点数误差大概在10左右,FFT点数为4098,误差在0.002,怀疑问题出在噪声上。因为所参考文献中的仿真均没有考虑噪声的影响,且所参考文献中的测量精度都没有达到0.01HZ,我都怀疑这个要求是不是达不到的…老师故意出的…但是据说有人做到了,我不知道有没有考虑噪声影响…但是我作弊一下仿真图就很完美了,具体看仿真程序的注释
2.如果不是上述问题,则出在下采样后对信号频谱图中最大值和次大值的确定上。
查找最大值和次大值的过程大致如下几步:
1) 用max函数求出FFT序列中的最大值及其位置;
2) 将FFT序列中除最大值以外的所有其他极大值找出,使用的方法是采用循环对序列和其前后一一进行比较大小,如果均大于则为极大值;
3) 用max函数找出极大值中的最大值,则为次大值;
4) 找出次大值在FFT序列中的位置;
最大值和次大值位置之差与频率分辨率的乘积即为低频调制频率。
程序在检测精度上可能存在问题,所以造成了问题的出现,但是由于本人对Matlab里面有无更方便检测极大值的方法不太了解,所以只能这么做了。
我比较想找个懂行的人纠正一下我存在的错误,看怎样能提高检测精度。
PS:用word写文档有个模板是在是太方便了,用格式刷就行了,我辛辛苦苦写了好几天,总算把这个实验报告写好,以后拿来当模板用了。
仿真代码:
clear all
M=2; %2FSK信号
f0=input(‘please input the carrier frequency:’); %输入载波频率
freqsep=11; %频率偏移值
f1=input(‘please input the Low-frequency modulation frequency:’); %低频调制频率
FS=2*(f0+f1); %奈奎斯特采样频率
fs=598; %欠采样频率
SNR=10; %信噪比10db
symp=[0 1];
m=repmat(symp,1,20); %产生20个01序列
%生成2FSK信号
Nsamp=round(FS/f1/2); %每个符号的采样点数
fsk_cpe=fskmod(m,M,2*freqsep,Nsamp,FS); %产生FSK复包络
fsk_len=length(fsk_cpe);
t=(0:fsk_len-1)/FS;
fsk=real(fsk_cpe.*exp(i*2*pi*f0*t)); %FSK时域信号
figure(1),subplot(2,1,1),plot(FS*t(1:100),fsk(1:100));ylim([-2 2]);%FSK时域波形图
xlabel(‘Time’),ylabel(‘Amplitude’);
title(‘产生的FSK信号’);
NFFT=2^nextpow2(FS); %FFT运算点数
F=FS*linspace(0,1,NFFT);
Y=abs(fft(fsk,NFFT))/FS;
subplot(2,1,2),stem(F,Y); %FSK频率幅度谱
xlabel(‘Frequence/Hz’),ylabel(‘Amplitude’);
title(‘FSK信号的频率幅度谱’);
%加噪后的时域频域图
fsk_Wnoise=awgn(fsk,SNR,’measured’,’db’); %加入10db的白噪声
figure(2);
subplot(2,1,1),plot(FS*t(1:100),fsk_Wnoise(1:100)); %加入噪声后的FSK时域图
xlabel(‘Time’),ylabel(‘Amplitude’);
title(‘加入白噪声后的FSK信号’);
Y=abs(fft(fsk_Wnoise,NFFT))/FS;
subplot(2,1,2),stem(F,Y); %加入噪声后的FSK频率幅度谱
xlabel(‘Frequence/Hz’),ylabel(‘Amplitude’);
title(‘加噪后的FSK信号频率幅度谱’);
%欠采样后的时域频域图
nsamp=round(fs/f1/2);
fsk_subcpe=fskmod(m,M,2*freqsep,nsamp,fs);
fsk_sublen=length(fsk_subcpe);
t=(0:fsk_sublen-1)/fs;
fsk_subsp=real(fsk_subcpe.*exp(i*2*pi*f0*t));
fsk_WNsub=awgn(fsk_subsp,SNR,’measured’,’db’);
figure(3);subplot(2,1,1);stem(fs*t(1:100),fsk_WNsub(1:100));ylim([-2 2]);
xlabel(‘Time’),ylabel(‘Amplitude’);
title(‘欠采样后FSK信号’);
nfft=8192;
f=fs/2*linspace(0,1,nfft/2);
y=abs(fft(fsk_WNsub,nfft))/fs;
subplot(2,1,2),stem(f,y(1:nfft/2));
xlabel(‘Frequence/Hz’),ylabel(‘Amplitude’);
title(‘欠采样FSK信号的频率幅度谱’);
%检测载频
peak_c=max(y(1:nfft/2));
position_c=find(y(1:nfft/2)==peak_c);%找出频谱图中的峰值出现的处,此处为载频处
f0_detc=position_c*(fs/2)/(nfft/2) %计算出载频
%频谱搬移
fm=80; %搬移频率为80Hz
fsk_WNsubm=fsk_WNsub.*exp(-i*2*pi*fm*t); %对原欠采样FSK信号进行频谱搬移
y=abs(fft(fsk_WNsubm,nfft))/fs;
figure(4);stem(f,y(1:nfft/2));xlabel(‘Frequence/Hz’),ylabel(‘Amplitude’);
title(‘欠采样FSK信号经过频谱搬移后的频率幅度谱’);
%FIR滤波器
fedge=[40 60];
mval=[1 0];
dev=[0.1009 0.0001];
FT=600;
[N,fpts,mag,wt]=remezord(fedge,mval,dev,FT);
b=remez(N,fpts,mag,wt);
[h,w]=freqz(b,1,256);
figure(5); %滤波器频率响应图
plot(w/pi,20*log10(abs(h)));grid
xlabel(‘\omega/\pi’);ylabel(‘幅度,dB’);
title(‘FIR滤波器’);
%滤波后的频谱图
out_time=filter(b,1,fsk_WNsubm);
out_freq=abs(fft(out_time,nfft))/fs;
figure(6);stem(f,out_freq(1:nfft/2));
xlabel(‘Frequence/Hz’),ylabel(‘Amplitude’);title(‘滤波后的频域波形’);
%下采样
D=9; % D<fs/2*(fh-fl) 此处我们取9
out_timeD=out_time(1:D:length(out_time));
out_freqD=abs(fft(out_timeD,nfft)/fs*D);
figure(7);stem(f/D,out_freqD(1:nfft/2));
xlabel(‘Frequence/Hz’),ylabel(‘Amplitude’)
title(‘下抽样后信号频谱(D=9)’)
%检测低频调制频率
peak_outc=max(out_freqD(1:nfft/2));
position_outc=find(out_freqD(1:nfft/2)==peak_outc) %找出频谱图中的最大值出现的处,此处为载频处
peak_secmax=zeros(1,30); %计算出除了最大值以外所有极大值点处
for i=position_outc-1:-1:2
if (out_freqD(i)>out_freqD(i+1))&&(out_freqD(i)>out_freqD(i-1))
peak_secmax(i)=out_freqD(i);
end
end
peak_secmaxl=max(peak_secmax); %找出除最大值点以外的最大值,即次大值
position_secmaxl=find(out_freqD(1:nfft/2)==peak_secmaxl) %次大值的位置
f1_detc=abs(position_outc-position_secmaxl-9)*(fs/2/D)/(nfft/2) %计算出低频载频,作弊就出在这里了,减去个差不多的值,仿真图就很漂亮了…
文档
程序

anyShare分享到:
  1. 2011年6月21日11:47 | #1

    楼主水平还是比价高

    [回复]

  1. 本文目前尚无任何 trackbacks 和 pingbacks.