Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
初级会员
注册日期: 2018-11-28
年龄: 31
帖子: 1
声望力: 0 ![]() |
![]()
从网上找了关于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); %信号解调 |
![]() |
![]() |