小然1234
2018-11-28, 12:12
从网上找了关于FSK和GFSK 的程序,可是显示的图像没有什么区别,网上说GFSK比FSK占用的带宽变窄了,请问这个占用带宽如何看呢?下边是GFSK的程序
function GFSKmain(g,f1,f2,fs,snr)
%GFSK调制解调
%g为0和1的数字序列,f1为0的调制频率。f2为1的调制频率,fs为采样频率,snr为信噪比
%调用举例:GFSKmain(suiji(10),20,30,1000,10);
%注:suiji(n)可以产生n个随机的0,1序列
if nargin<5 %如果参数小于5,则默认参数运行 GFSKmain([1 0 1 1 0],20,30,1000,10)
g=[1 0 1 1 0];f1=20;f2=300;fs=1000;snr=10;
end
t=linspace(0,1,fs);%0到1等分成fs个数
mod=[];bit=[];
%键控法实现输入信号FSK调制
for n=1:length(g);
if g(n)==0;
c=cos(2*pi*f1*t); %输入信号为0则对应载波频率为f1
se=zeros(1,fs); %在figure中用矩形显示信号
else g(n)==1;
c=cos(2*pi*f2*t); %输入信号为1则对应载波频率为f2
se=ones(1,fs); %在figure中用矩形显示信号
end
mod=[mod c]; %产生已调信号
bit=[bit se]; %产生矩形波调制信号
end
%将单极性波形转换为双极性波形
for i=1:fs*length(g);
if bit(i)==0;
bit1(i)=-1;
else
bit1(i)=bit(i);
end
end
gsignal=glpfsignal(bit1,fs); %双极性波形通过高斯低通滤波器
for i=1:fs*length(g); %卷积后gsignal序列后增加了fs个0值,取gsignal信号的前fs*length(g)个采样点
gsignal1(i)=gsignal(i);
end
%实现信号的GFSK调制
mod1=gsignal1.*mod;
% 用 Welch 法估计序列的功率谱密度;
figure(6)
nfft=256; %快速傅立叶变换的点数
window=hamming(500); %海明窗
noverlap=30; %各分段间不重叠的点数
range='onesided'; %单边谱
[Pxx,f] = pwelch(mod1,window,noverlap,nfft,fs,range);
plot_Pxx=10*log10(Pxx);
plot(f,plot_Pxx,'r') ;grid on;
title('Welch 法估计GFSK功率谱密度')
xlabel('f/Hz');ylabel('p(f)/dB');
figure(1)
subplot(3,1,1);plot(bit,'LineWidth',1.5);grid on; %调制信号波形,线宽1.5,显示网格
title('二进制数字信号');
axis([0 fs*length(g) -2.5 2.5]);%定义横竖坐标范围f
subplot(3,1,2);plot(gsignal1,'LineWidth',1.5);grid on; %已调信号波形,线宽1.5,显示网格
title('通过高斯低通滤波器的二进制信号');
axis([0 fs*length(g) -2.5 2.5]);
subplot(3,1,3);plot(mod1,'LineWidth',1.5);grid on; %已调信号波形,线宽1.5,显示网格
title('FSK已调信号');
axis([0 fs*length(g) -2.5 2.5]);
signal=gussian(mod1,snr); %加入高斯噪声
configueSignal=demoGFSK(signal,f1,f2,fs); %信号解调
function GFSKmain(g,f1,f2,fs,snr)
%GFSK调制解调
%g为0和1的数字序列,f1为0的调制频率。f2为1的调制频率,fs为采样频率,snr为信噪比
%调用举例:GFSKmain(suiji(10),20,30,1000,10);
%注:suiji(n)可以产生n个随机的0,1序列
if nargin<5 %如果参数小于5,则默认参数运行 GFSKmain([1 0 1 1 0],20,30,1000,10)
g=[1 0 1 1 0];f1=20;f2=300;fs=1000;snr=10;
end
t=linspace(0,1,fs);%0到1等分成fs个数
mod=[];bit=[];
%键控法实现输入信号FSK调制
for n=1:length(g);
if g(n)==0;
c=cos(2*pi*f1*t); %输入信号为0则对应载波频率为f1
se=zeros(1,fs); %在figure中用矩形显示信号
else g(n)==1;
c=cos(2*pi*f2*t); %输入信号为1则对应载波频率为f2
se=ones(1,fs); %在figure中用矩形显示信号
end
mod=[mod c]; %产生已调信号
bit=[bit se]; %产生矩形波调制信号
end
%将单极性波形转换为双极性波形
for i=1:fs*length(g);
if bit(i)==0;
bit1(i)=-1;
else
bit1(i)=bit(i);
end
end
gsignal=glpfsignal(bit1,fs); %双极性波形通过高斯低通滤波器
for i=1:fs*length(g); %卷积后gsignal序列后增加了fs个0值,取gsignal信号的前fs*length(g)个采样点
gsignal1(i)=gsignal(i);
end
%实现信号的GFSK调制
mod1=gsignal1.*mod;
% 用 Welch 法估计序列的功率谱密度;
figure(6)
nfft=256; %快速傅立叶变换的点数
window=hamming(500); %海明窗
noverlap=30; %各分段间不重叠的点数
range='onesided'; %单边谱
[Pxx,f] = pwelch(mod1,window,noverlap,nfft,fs,range);
plot_Pxx=10*log10(Pxx);
plot(f,plot_Pxx,'r') ;grid on;
title('Welch 法估计GFSK功率谱密度')
xlabel('f/Hz');ylabel('p(f)/dB');
figure(1)
subplot(3,1,1);plot(bit,'LineWidth',1.5);grid on; %调制信号波形,线宽1.5,显示网格
title('二进制数字信号');
axis([0 fs*length(g) -2.5 2.5]);%定义横竖坐标范围f
subplot(3,1,2);plot(gsignal1,'LineWidth',1.5);grid on; %已调信号波形,线宽1.5,显示网格
title('通过高斯低通滤波器的二进制信号');
axis([0 fs*length(g) -2.5 2.5]);
subplot(3,1,3);plot(mod1,'LineWidth',1.5);grid on; %已调信号波形,线宽1.5,显示网格
title('FSK已调信号');
axis([0 fs*length(g) -2.5 2.5]);
signal=gussian(mod1,snr); %加入高斯噪声
configueSignal=demoGFSK(signal,f1,f2,fs); %信号解调