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结构的理解自己编写的代码。若存在疑问,欢迎评论交流。

 

好的,我可以为您提供一些关于2ASK和2FSK调制Matlab仿真的指导。 首先,您需要了解2ASK和2FSK调制的原理,以便能够编写Matlab代码进行仿真。2ASK调制是基于数字信号的振幅变化来传输信息的一种调制方式,而2FSK调制则是利用数字信号的频率变化来传输信息的一种调制方式。 下面是一个基本的2ASK调制Matlab代码示例: ```matlab % 生成2ASK调制信号的Matlab代码 fs = 1000; % 采样频率 fc = 100; % 载波频率 Am = 1; % 调制信号的幅度 Ac = 2; % 载波信号的幅度 fm = 10; % 调制信号的频率 t = 0:1/fs:1; % 信号的时间范围 m = Am*sin(2*pi*fm*t); % 调制信号 c = Ac*sin(2*pi*fc*t); % 载波信号 s = (m>=0).*c + (m<0).*(-c); % 2ASK调制信号 plot(t,s); ``` 上述代码中,首先定义了采样频率、载波频率、调制信号幅度、载波信号幅度、调制信号频率和信号的时间范围等参数。然后使用sin函数生成调制信号和载波信号,最后将调制信号与载波信号进行2ASK调制得到最终的调制信号,并使用plot函数进行绘图。 下面是一个基本的2FSK调制Matlab代码示例: ```matlab % 生成2FSK调制信号的Matlab代码 fs = 1000; % 采样频率 fc1 = 100; % 第一个载波频率 fc2 = 200; % 第二个载波频率 Am = 1; % 调制信号的幅度 fm = 10; % 调制信号的频率 t = 0:1/fs:1; % 信号的时间范围 m = Am*sin(2*pi*fm*t); % 调制信号 s1 = sin(2*pi*fc1*t); % 第一个载波信号 s2 = sin(2*pi*fc2*t); % 第二个载波信号 s = (m>=0).*s1 + (m<0).*s2; % 2FSK调制信号 plot(t,s); ``` 上述代码中,首先定义了采样频率、第一个载波频率、第二个载波频率、调制信号幅度、调制信号频率和信号的时间范围等参数。然后使用sin函数生成调制信号和两个不同频率的载波信号,最后根据调制信号的正负性选择不同的载波信号进行2FSK调制得到最终的调制信号,并使用plot函数进行绘图。 以上是基本的2ASK和2FSK调制Matlab代码示例,您可以根据需要进行相应的修改和扩展,以实现您的仿真需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值