BPSK带宽频率估计

%-------------------------------------------------------%
%BPSK信号产生,500个点,100个bit
%对BPSK信号进行带宽估计,重心法频率估计
%-------------------------------------------------------%
clear;

m=100;                      %m个bit
r=5;                            %一个bit长度为5
s=randsrc(m,1);       %随机产生m个bit,+1/-1
s=rectpulse(s,r);       %基带信号产生,每个bit含有5个点
subplot(221);
plot(s);
axis([1 length(s) -1.5 1.5]);title('基带信号');

fc=0.300;                       %载波为0.3,归一化频率
SNR=10;
x=s.*exp(2*1i*pi*fc*(1:length(s))');%x=s.*{cos(2*pi*fc*t)+j*sin(2*pi*fc*t)},t=1:length(s)
noise=sqrt(1/10^(SNR/10)/2)*(randn(size(x))+1i*randn(size(x)));%通过过采样方式加入噪声
x=x+noise;%带噪声的
subplot(222);
plot(linspace(0,1,length(x)),abs(fft(x)));title('FFT');

[Pxx1, f1]=pwelch(x,hamming(100),100/2,length(x),1);%功率谱密度计算
Pxx1=20*log10(Pxx1);%转为分贝
subplot(223);
plot(linspace(0,1,length(x)),Pxx1);title('功率谱');%转为dB

%带宽寻找
maxdata=max(Pxx1);
Threshold=maxdata-3;
bandldx=find(Pxx1>Threshold);%寻找门限以上的点
bandldx2=bandldx./length(Pxx1);%归一化坐标
bw=max(bandldx2)-min(bandldx2);%计算带宽

%重心法频率估计带宽内,频率乘以幅值求和除以总幅值
a=0;b=0;
for i = bandldx(1):max(bandldx)
    a=a+f1(i)*Pxx1(i);
    b=b+Pxx1(i);
end
f_estimate=a/b;
fprintf('Bandwidth=%f  Fre=%f\n',bw,f_estimate);



猜你喜欢

转载自blog.csdn.net/u011441044/article/details/80635581