matlab的AM、FM、ASK、FSK调制

摘要:网络中有很多关于在matlab中进行AM、FM、ASK、FSK调制的仿真。本文仅仅从FPGA开发角度,进行算法的编写并在matlab上进行验证。

ASK调制

        首先,生成随机二进制码,并将二进制码进行拓展,保证二进制码的点数和正弦信号的点数相同。

        其次,使用cos点数生成10倍码元速率的正弦波,需要注意cos函数中部分变量要与二进制码中的变量相对应。

        最后,将两个数组进行点乘,即可得到ASK的时域图,进行fft可观察ASK的频域图。

代码如下:(注:本文代码从一个文件中截取,可能会有变量报错,此时在整个程序中找到相关变量即可)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ASK产生%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
M=8;                      	%产生码元数,一共4位码,重复两次    
L=100;                           %每码元复制L次,为每码元的采样点数
Ts=5e-7;           %每个码元的宽度,即码元的持续时间
Rb=1/Ts;           %码元速率,2M
dt=Ts/L;                        %采样间隔,200MHz
TotalT=M*Ts;                     %总时间
t=0:dt:TotalT-dt;                     %时间
%产生单极性波形
wave=randi([0,1],1,M);           %产生二进制随机码,M为码元个数
fz=ones(1,L);                %定义复制的次数L,L为每码元的采样点数
x1=wave(fz,:);    %复制的第1行复制L次
dnrz=reshape(x1,1,L*M);    %产生单极性不归零矩形脉冲波形
figure(1)
subplot(2,2,1)
plot(t,dnrz)
xlabel('时间');ylabel('幅度 ');title('单极性不归零矩形脉冲时域')

fc=10*Rb;            %载波频率是码元速率的10倍,20M       
carrier=cos(2*pi*fc*t); 
subplot(2,2,2)
plot(t,carrier) 
xlabel('时间');ylabel('幅度 ');title('载波时域')

ask2=dnrz.*carrier;   %2ASK的模拟调制
subplot(2,2,3)
plot(t,ask2) 
xlabel('时间');ylabel('幅度 ');title('已调2ASK时域')
%已调ASK信号频谱
T=t(end);%时间
df=1/T;%频谱分辨率
N=length(ask2);%采样长度
f=(-N/2:N/2-1)*df;%频率范围
fre_ask2=fftshift(abs(fft(ask2)));%快速傅里叶变换
subplot(2,2,4)
plot(f,fre_ask2)
xlabel('频率');ylabel('幅度 ');title('已调2ASK频域');xlim([0,4e7]);

运行结果如下:

可以看出,fft的结果符合通信原理中所学理论的频谱。若需要更精细的频谱,可将代码fre_ask2=fftshift(abs(fft(ask2)))改成 fre_ask2=fftshift(abs(fft(ask2,1024*1024)))

 AM调制

        首先,我们通过课本知道,AM信号的公式为:

        其次,使用cos生成载波信号和声音信号。

        最后,依次进行运算(代码中有注释):m*Av(t),m*Av(t)+A,(m*Av(t)+A)*Acoswt/A,经过简单的变换即可得到A(1+mv(t))coswt。有关AM理论知识可以通过网络检索其他文章学习。

其中,Av(t)是声音信号,m是调制指数,Acoswt是载波信号。

代码如下:(注:本文代码从一个文件中截取,可能会有变量报错,此时在整个程序中找到相关变量即可)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%AM信号产生%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%s(t)=(m*v(t)+1)*A*coswt
carrier=255*cos(2*pi*fc*t); %载波信号,最大为255,模拟AD数据
voice_f=fc*0.1;%调制信号频率,2M
voice_sig=255*cos(2*pi*voice_f*t); %调制信号
depth_con=0.5;%设置度为0.5
am_temp1=voice_sig.*depth_con;%此处是mv(t)
am_temp2=am_temp1+255;%此处是mAv(t)+A
am_sig=am_temp2.*carrier/255;%此处是(m*Av(t)+A)*Acoswt,除255用于防止数据溢出
%已调AM信号频谱
T=t(end);%时间
df=1/T;%频谱分辨率
N=length(am_sig);%采样长度
f=(-N/2:N/2-1)*df;%频率范围
fre_am=fftshift(abs(fft(am_sig)));%快速傅里叶变换
figure(2)
subplot(2,2,1)
plot(t,voice_sig)
xlabel('时间');ylabel('幅度 ');title('调制信号时域')
subplot(2,2,2)
plot(t,carrier)
xlabel('时间');ylabel('幅度 ');title('载波信号时域')
subplot(2,2,3)
plot(t,am_sig)
xlabel('时间');ylabel('幅度 ');title('已调AM信号时域')
subplot(2,2,4)
plot(f,fre_am)
xlabel('频率');ylabel('幅度 ');title('已调AM频域');xlim([0,4e7])

运行结果如下:

可以看出,fft的结果符合通信原理中所学理论的频谱。若需要更精细的频谱,可将代码fre_am=fftshift(abs(fft(am_sig)))改成fre_am=fftshift(abs(fft(am_sig,1024*1024)))

 FSK和FM调制原理

       如下程序均在离散信号的角度来理解的,所以不涉及到具体的频率。

        此处的FM调制不是根据公式推导而形成。根据原理可以理解成如下框图。在这里插入图片描述

         其中的压控振荡器(VCO)在我们这里是直接数字频率合成技术(DDS),因为这样更方便应用FPGA产生FM和FSK信号。(DDS在FPGA中的IP核是另一种期间NCO,两者原理类似)

        matlab编写DDS的原理与代码如下网址:

matlab DDS

        这里对程序中重点关注的部分进行讲解,需要关注的变量是sin_rom_fsk,n_fsk,w_fsk,w_r_fsk,rom_addr_fsk。

        sin_rom_fsk是一个用于存储正弦波数据的数组,可以理解成ROM表;n_fsk是幅度分辨率的位数+相位分辨率位数的合位数的最大值,代表着正弦信号的时间分辨率;w_fsk代表的是频率控制字,数字越大,频率越大;w_r_fsk是相位累加器的结果存储出,可以通过定义w_r_fsk的最大值,定义相位分辨率的最大位数,位数越多,分辨率越高;rom_addr_fsk是对ROM表寻数的地址,由相位累加器结果控制,其中的rom_addr_fsk = round(w_r_fsk /2^6)代码的2^6代表有6位是幅度分辨率。

        此处的核心代码是相位累加器部分:w_r_fsk = w_r_fsk + w_fsk。由上可知,通过控制w_fsk即可控制产生的正弦波的频率,所以FSK和ASK的调制均是通过控制该变量实现。

 FSK调制原理

        与ASK一样,先生成随机序列,但是为保持与ROM表产生的正弦信号的采样点一致,所以此处的采样点数为L_fsk=len_fsk/M_fsk; 而并非如ASK中的采样点数为定值。

        将随机序列放入ROM表寻址代码中的频率控制中,w_r_fsk = w_r_fsk + w_fsk*(dnrz_fsk(i)*0.5+0.5);(其中的dnrz_fsk为随机序列),即可实现FSK

代码如下:(注:本文代码从一个文件中截取,可能会有变量报错,此时在整个程序中找到相关变量即可)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%FSK信号产生%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
f_out_fsk  = 4e6; %输出频率
fs_fsk   =  16e6 ;%采样率 
fm_fsk   = 16e3; %音频的采样率
n_fsk   = 0:1/1024:1023/1024;  %1024个点,10位
sin_rom_fsk = sin(2*pi*n_fsk);
%用10位去存储一个周期的征正弦波
w_fsk=f_out_fsk*2^16/fs_fsk; %1Mhz 载波的频率控制字
len_fsk = length(sin_rom_fsk)*fs_fsk/f_out_fsk; %数据长度
w_r_fsk = 0;  %
rom_addr_fsk = 0;
sin_1m_fsk = zeros(1,len_fsk);
M_fsk=32;                      	%产生码元数,一共4位码,重复两次    
L_fsk=len_fsk/M_fsk;                           %每码元复制L次,为每码元的采样点数
Ts_fsk=5e-7;           %每个码元的宽度,即码元的持续时间
Rb_fsk=1/Ts_fsk;           %码元速率,2M
dt_fsk=Ts_fsk/L_fsk;                        %采样间隔,200MHz
TotalT_fsk=M_fsk*Ts_fsk;                     %总时间
t_fsk=0:dt_fsk:TotalT_fsk-dt_fsk;                     %时间
%产生单极性波形
wave_fsk=randi([0,1],1,M_fsk);           %产生二进制随机码,M为码元个数
fz_fsk=ones(1,L_fsk);                %定义复制的次数L,L为每码元的采样点数
x1_fsk=wave_fsk(fz_fsk,:);    %复制的第1行复制L次
dnrz_fsk=reshape(x1_fsk,1,L_fsk*M_fsk);    %产生单极性不归零矩形脉冲波形
for i = 1:len_fsk
    w_r_fsk = w_r_fsk + w_fsk;
    if(w_r_fsk > 2^16)
        w_r_fsk =  w_r_fsk - 2^16;
    end
    rom_addr_fsk = round(w_r_fsk /2^6);%10位来存储其rom的地址,相当于一个正弦波的周期被分成了2^10次方份
    if rom_addr_fsk == 0
        rom_addr_fsk = 1;
    end
	sin_carry(i) =  sin_rom_fsk(rom_addr_fsk);
end
w_r_fsk=0;
for i = 1:len_fsk
    w_r_fsk = w_r_fsk + w_fsk*(dnrz_fsk(i)*0.5+0.5);
    if(w_r_fsk > 2^16)
        w_r_fsk =  w_r_fsk - 2^16;
    end
    rom_addr_fsk = round(w_r_fsk /2^6);%10位来存储其rom的地址,相当于一个正弦波的周期被分成了2^10次方份
    if rom_addr_fsk == 0
        rom_addr_fsk = 1;
    end
	sin_1m(i) =  sin_rom_fsk(rom_addr_fsk);
end
figure(3);
subplot(2,2,1)
plot(dnrz_fsk(1:300)), xlabel('点数'),title('码元的前300个点');%给出一个周期的正弦波
subplot(2,2,2)
plot(sin_carry(1:300)), xlabel('点数'),title('载波信号的前300个点');%给出一个周期的正弦波
subplot(2,2,3)
plot(sin_1m(1:300)), xlabel('点数'),title('FSK的前300个点');
hold on 
plot(dnrz_fsk(1:300),'linewidth',3);
fre_sin_1m=fftshift(abs(fft(sin_1m)));%快速傅里叶变换
subplot(2,2,4)
plot(fre_sin_1m), xlabel('点数'),title('FSK频谱');xlim([500,3500]);

运行结果如下:

可以看出,fft的结果符合通信原理中所学理论的频谱。若需要更精细的频谱,可将代码fre_sin_1m=fftshift(abs(fft(sin_1m)))改成fre_sin_1m=fftshift(abs(fft(sin_1m,1024*1024)))

 

  FM调制原理

        与FSK的调制过程基本一致,只是需要注意此处的声音信号不能单纯通过cos函数产生,为保持采样点与步进的一致,同样通过DDS的方式产生声音信号。

        此处对调制信号的频率控制与FSK略有不同,代码为:w_r = w_r + round(w*(voice_sig(i)+0.5));其中,voice_sig是声音信号。

        在运行结果过程中,若频率控制字精度不够,则可能导致寄生调幅(幅度是变化的),所以此处的代码的频率控制字部分的变量略有改动,提高了频率控制分辨率。

代码如下:(注:本文代码从一个文件中截取,可能会有变量报错,此时在整个程序中找到相关变量即可)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%FM信号产生%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
f_out  = 4e6; %输出频率
fs =  16e6 ;%采样率 
fm = 16e3; %音频的采样率
n = 0:1/16384:16383/16384;  %16384个点,20位(位数越多,频率分辨率越大,越不容易出现寄生调幅)
sin_rom = sin(2*pi*n);
%用10位去存储一个周期的征正弦波
w=f_out*2^16/fs; %1Mhz 载波的频率控制字
len = length(sin_rom)*fs/f_out; %数据长度
w_r = 0;  %频率控制字增加步进
rom_addr = 0;
sin_1m = zeros(1,len);

voice_sig = zeros(1,len);
w_r=0;
for i = 1:len
    w_r = w_r + w*0.1;
    if(w_r > 2^20)
        w_r =  w_r - 2^20;
    end
    rom_addr = round(w_r /2^6);%14(20-6)位来存储其rom的地址,相当于一个正弦波的周期被分成了2^10次方份
    if rom_addr == 0
        rom_addr = 1;
    end
	voice_sig(i) =  sin_rom(rom_addr);
end
voice_sig=(voice_sig+1)*0.25;
w_r = 0;
for i = 1:len
    w_r = w_r + round(w*(voice_sig(i)+0.5));
    if(w_r > 2^20)
        w_r =  w_r - 2^20;
    end
    rom_addr = round(w_r /2^6);%14(20-6)位来存储其rom的地址,相当于一个正弦波的周期被分成了2^10次方份
    if rom_addr == 0
        rom_addr = 1;
    end
	sin_1m(i) =  sin_rom(rom_addr);
end
figure(4);
subplot(2,2,1)
plot(voice_sig(1:1000)), xlabel('点数'),title('声音信号前300个点');%给出一个周期的正弦波
subplot(2,2,2)
plot(sin_carry(1:300)), xlabel('点数'),title('载波信号的前300个点');%给出一个周期的正弦波
subplot(2,2,3)
plot(sin_1m(1:1000)), xlabel('点数'),title('FM的前300个点');
hold on 
plot(voice_sig(1:1000))
fre_sin_1m=fftshift(abs(fft(sin_1m)));%快速傅里叶变换
subplot(2,2,4)
plot(fre_sin_1m), xlabel('点数'),title('FM频谱'),xlim([3e4,3.5e4]);

运行结果如下:

可以看出,fft的结果符合通信原理中所学理论的频谱。若需要更精细的频谱,可将代码fre_sin_1m=fftshift(abs(fft(sin_1m)))改成fre_sin_1m=fftshift(abs(fft(sin_1m。1024*1024)))

       整个程序完整代码如下:


clear all; 
close all;
clc;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ASK产生%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
M=8;                      	%产生码元数,一共4位码,重复两次    
L=100;                           %每码元复制L次,为每码元的采样点数
Ts=5e-7;           %每个码元的宽度,即码元的持续时间
Rb=1/Ts;           %码元速率,2M
dt=Ts/L;                        %采样间隔,200MHz
TotalT=M*Ts;                     %总时间
t=0:dt:TotalT-dt;                     %时间
%产生单极性波形
wave=randi([0,1],1,M);           %产生二进制随机码,M为码元个数
fz=ones(1,L);                %定义复制的次数L,L为每码元的采样点数
x1=wave(fz,:);    %复制的第1行复制L次
dnrz=reshape(x1,1,L*M);    %产生单极性不归零矩形脉冲波形
figure(1)
subplot(2,2,1)
plot(t,dnrz)
xlabel('时间');ylabel('幅度 ');title('单极性不归零矩形脉冲时域')

fc=10*Rb;            %载波频率是码元速率的10倍,20M       
carrier=cos(2*pi*fc*t); 
subplot(2,2,2)
plot(t,carrier) 
xlabel('时间');ylabel('幅度 ');title('载波时域')

ask2=dnrz.*carrier;   %2ASK的模拟调制
subplot(2,2,3)
plot(t,ask2) 
xlabel('时间');ylabel('幅度 ');title('已调2ASK时域')
%已调ASK信号频谱
T=t(end);%时间
df=1/T;%频谱分辨率
N=length(ask2);%采样长度
f=(-N/2:N/2-1)*df;%频率范围
fre_ask2=fftshift(abs(fft(ask2)));%快速傅里叶变换
subplot(2,2,4)
plot(f,fre_ask2)
xlabel('频率');ylabel('幅度 ');title('已调2ASK频域');xlim([0,4e7]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%AM信号产生%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%s(t)=(m*v(t)+1)*A*coswt
carrier=255*cos(2*pi*fc*t); %载波信号,最大为255,模拟AD数据
voice_f=fc*0.1;%调制信号频率,2M
voice_sig=255*cos(2*pi*voice_f*t); %调制信号
depth_con=0.5;%设置度为0.5
am_temp1=voice_sig.*depth_con;%此处是mv(t)
am_temp2=am_temp1+255;%此处是mAv(t)+A
am_sig=am_temp2.*carrier/255;%此处是(m*Av(t)+A)*Acoswt,除255用于防止数据溢出
%已调AM信号频谱
T=t(end);%时间
df=1/T;%频谱分辨率
N=length(am_sig);%采样长度
f=(-N/2:N/2-1)*df;%频率范围
fre_am=fftshift(abs(fft(am_sig)));%快速傅里叶变换
figure(2)
subplot(2,2,1)
plot(t,voice_sig)
xlabel('时间');ylabel('幅度 ');title('调制信号时域')
subplot(2,2,2)
plot(t,carrier)
xlabel('时间');ylabel('幅度 ');title('载波信号时域')
subplot(2,2,3)
plot(t,am_sig)
xlabel('时间');ylabel('幅度 ');title('已调AM信号时域')
subplot(2,2,4)
plot(f,fre_am)
xlabel('频率');ylabel('幅度 ');title('已调AM频域');xlim([0,4e7])

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%FSK信号产生%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
f_out_fsk  = 4e6; %输出频率
fs_fsk   =  16e6 ;%采样率 
fm_fsk   = 16e3; %音频的采样率
n_fsk   = 0:1/1024:1023/1024;  %1024个点,10位
sin_rom_fsk = sin(2*pi*n_fsk);
%用10位去存储一个周期的征正弦波
w_fsk=f_out_fsk*2^16/fs_fsk; %1Mhz 载波的频率控制字
len_fsk = length(sin_rom_fsk)*fs_fsk/f_out_fsk; %数据长度
w_r_fsk = 0;  %
rom_addr_fsk = 0;
sin_1m_fsk = zeros(1,len_fsk);
M_fsk=32;                      	%产生码元数,一共4位码,重复两次    
L_fsk=len_fsk/M_fsk;                           %每码元复制L次,为每码元的采样点数
Ts_fsk=5e-7;           %每个码元的宽度,即码元的持续时间
Rb_fsk=1/Ts_fsk;           %码元速率,2M
dt_fsk=Ts_fsk/L_fsk;                        %采样间隔,200MHz
TotalT_fsk=M_fsk*Ts_fsk;                     %总时间
t_fsk=0:dt_fsk:TotalT_fsk-dt_fsk;                     %时间
%产生单极性波形
wave_fsk=randi([0,1],1,M_fsk);           %产生二进制随机码,M为码元个数
fz_fsk=ones(1,L_fsk);                %定义复制的次数L,L为每码元的采样点数
x1_fsk=wave_fsk(fz_fsk,:);    %复制的第1行复制L次
dnrz_fsk=reshape(x1_fsk,1,L_fsk*M_fsk);    %产生单极性不归零矩形脉冲波形
for i = 1:len_fsk
    w_r_fsk = w_r_fsk + w_fsk;
    if(w_r_fsk > 2^16)
        w_r_fsk =  w_r_fsk - 2^16;
    end
    rom_addr_fsk = round(w_r_fsk /2^6);%10位来存储其rom的地址,相当于一个正弦波的周期被分成了2^10次方份
    if rom_addr_fsk == 0
        rom_addr_fsk = 1;
    end
	sin_carry(i) =  sin_rom_fsk(rom_addr_fsk);
end
w_r_fsk=0;
for i = 1:len_fsk
    w_r_fsk = w_r_fsk + w_fsk*(dnrz_fsk(i)*0.5+0.5);
    if(w_r_fsk > 2^16)
        w_r_fsk =  w_r_fsk - 2^16;
    end
    rom_addr_fsk = round(w_r_fsk /2^6);%10位来存储其rom的地址,相当于一个正弦波的周期被分成了2^10次方份
    if rom_addr_fsk == 0
        rom_addr_fsk = 1;
    end
	sin_1m(i) =  sin_rom_fsk(rom_addr_fsk);
end
figure(3);
subplot(2,2,1)
plot(dnrz_fsk(1:300)), xlabel('点数'),title('码元的前300个点');%给出一个周期的正弦波
subplot(2,2,2)
plot(sin_carry(1:300)), xlabel('点数'),title('载波信号的前300个点');%给出一个周期的正弦波
subplot(2,2,3)
plot(sin_1m(1:300)), xlabel('点数'),title('FSK的前300个点');
hold on 
plot(dnrz_fsk(1:300),'linewidth',3);
fre_sin_1m=fftshift(abs(fft(sin_1m)));%快速傅里叶变换
subplot(2,2,4)
plot(fre_sin_1m), xlabel('点数'),title('FSK频谱');xlim([500,3500]);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%FM信号产生%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
f_out  = 4e6; %输出频率
fs =  16e6 ;%采样率 
fm = 16e3; %音频的采样率
n = 0:1/16384:16383/16384;  %16384个点,20位(位数越多,频率分辨率越大,越不容易出现寄生调幅)
sin_rom = sin(2*pi*n);
%用10位去存储一个周期的征正弦波
w=f_out*2^16/fs; %1Mhz 载波的频率控制字
len = length(sin_rom)*fs/f_out; %数据长度
w_r = 0;  %频率控制字增加步进
rom_addr = 0;
sin_1m = zeros(1,len);

voice_sig = zeros(1,len);
w_r=0;
for i = 1:len
    w_r = w_r + w*0.1;
    if(w_r > 2^20)
        w_r =  w_r - 2^20;
    end
    rom_addr = round(w_r /2^6);%14(20-6)位来存储其rom的地址,相当于一个正弦波的周期被分成了2^10次方份
    if rom_addr == 0
        rom_addr = 1;
    end
	voice_sig(i) =  sin_rom(rom_addr);
end
voice_sig=(voice_sig+1)*0.25;
w_r = 0;
for i = 1:len
    w_r = w_r + round(w*(voice_sig(i)+0.5));
    if(w_r > 2^20)
        w_r =  w_r - 2^20;
    end
    rom_addr = round(w_r /2^6);%14(20-6)位来存储其rom的地址,相当于一个正弦波的周期被分成了2^10次方份
    if rom_addr == 0
        rom_addr = 1;
    end
	sin_1m(i) =  sin_rom(rom_addr);
end
figure(4);
subplot(2,2,1)
plot(voice_sig(1:1000)), xlabel('点数'),title('声音信号前300个点');%给出一个周期的正弦波
subplot(2,2,2)
plot(sin_carry(1:300)), xlabel('点数'),title('载波信号的前300个点');%给出一个周期的正弦波
subplot(2,2,3)
plot(sin_1m(1:1000)), xlabel('点数'),title('FM的前300个点');
hold on 
plot(voice_sig(1:1000))
fre_sin_1m=fftshift(abs(fft(sin_1m)));%快速傅里叶变换
subplot(2,2,4)
plot(fre_sin_1m), xlabel('点数'),title('FM频谱'),xlim([3e4,3.5e4]);

         以上内容对于具体的信号频率、载波频率不是很关心,因为这只是用来验证算法的仿真实验,所以若对频率有要求,可能还需要修改代码。

        本文的AM、ASK内容为借鉴他人,加上自己理解修改的内容。FM、FSK为基于对FPGA结构的理解自己编写的代码。若存在疑问,欢迎评论交流。

 

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.1、设计内容 用Matlab编程仿真2FSK调制和相干解调系统 1.2、设计要求 (1)信源为八位二进制随机信号,比特率为50bit/s,载波频率f1=200Hz,f2=100Hz; (2)画出信源,2FSK已调信号,解调器乘以相干载波后的信号,经过低通滤波器后的信号和抽样判决后的信号波形; (3)撰写专业课程设计报告。 2、设计原理分析 2.1、2FSK介绍 数字频率调制又称频移键控(FSK),二进制频移键控记作2FSK。数字频移键控是用载波的频率来传送数字消息,即用所传送的数字消息控制载波的频率。2FSK信号便是符号“1”对应于载频f1,而符号“0”对应于载频f2(与f1不同的另一载频)的已调波形,而且f1与f2之间的改变是瞬间完成的。 其表达式为: 典型波形如下图所示。由图可见,2FSK信号可以看作两个不同载频的ASK信号的叠加。因此2FSK信号的时域表达式又可以写成: 2.2、 2FSK调制原理 2FSK调制就是使用两个不同的频率的载波信号来传输一个二进制信息序列。可以用二进制“1”来对应于载频f1,而“0”用来对应于另一相载频w2的已调波形,而这个可以用受矩形脉冲序列控制的开关电路对两个不同的独立的频率源f1、f2进行选择通。本次课程设计采用的是前面一种方法。如下原理图: 图1 调制原理框图 2.3、 2FSK解调原理 2FSK的解调方式有两种:相干解调方式和非相干解调方式,本次课程设计采用的是相干解调法,利用载波与已调信号进行相乘后滤波输出得到,在2FSK中要两个载波,所以解调也要两个载波,分别与已调信号相乘后利用低通,最后相加即可得到我们的滤波输出,再用抽样信号进行抽样判决器即可,其原理如下: 图2 相干解调原理框图 3、仿真参数设置说明 3.1、仿真参数设置 信源:八位二进制随机信号 载波频率:fc=900 信号频率:f1=100;f2=200 比特率:Rb= Rb=fm*log2_M=50 bit/s 3.2、仿真程序设计说明 详细设计步骤: 1.信号产生:二进制随机序列和两列频率不等的载波 1)利用matlab函数产生8个二进制随机数,也就是我们的基波调制信号a。 2)产生两列基带信号st1和st2,并画出其波形。 2.信号调制:产生2FSK信号和加入高斯噪声后的2FSK信号 1)用基带信号st1、st2和载波信号s1和s2,产生2fsk信号,具体做法是用以st1与 s1相乘,st2 与s2相乘,再将两列信号相加。 2) 2fsk信号相加得到加入噪声后的sn信号。 3.解调 (1)对于两列让sn通过两个低通滤波器,并画出经过带通滤波器后的波形。 (2)输入抽样脉冲,将两列波st1和st2通过抽样判决器,画出其波形st,并与之前调制后的波形sn做对比,并由Figure3得出比特率为50 bit/s。 4、仿真结果和分析 4.1、仿真结果 4.1.1.产生的基带信号 4.1.2.产生的载波信号 4.1.3.2FSK调制过程

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值