MATALB GUI 通信原理

模拟信号调制解调

本文以DSB调制为主,因为AM、SSB调制都与DSB调制有关。GUI界面代码就不贴了,有很多博主已经写了GUI界面怎么制作文章,动动手指就可以找到。
以下代码已全部运行,确保没有错误,不误导各位,同时欢迎大家一起讨论。

GUI界面如下:
在这里插入图片描述

DSB调制信号Callback回调函数MATLAB程序如下:

function DSB_Modulation_Callback(~, ~, handles)
axes(handles.axes4)
global fc;%载波信号的频率
global fm;%调制信号的频率
global Am;%调制信号的幅值
global DSB_Modulation_Num;%DSB调制的采样值
N = 1000;%采样点
f = 100;    %初始化采样频率
%%根据载波频率的不同,调整采样频率
if fc > 1000
    f = 200000;
else if (500 < fc) && (fc <= 1000)
        f = 100000;
    else if (100 < fc) && (fc <= 500)
        f = 10000;
        else 
            f = 1000;
        end
    end
end
n = 0:N-1;
t = n/f;    %采样时间间隔
mt = Am * cos(2*pi*fm*t);%调制信号的表达式
DSB_Modulation_Num = mt.*cos(2*pi*fc*t);%DSB调制的采样值
plot(t,DSB_Modulation_Num);%画出DSB调整时域波形图
hold on
plot(t,mt,'r--');%画出包络波形
plot(t,-mt,'r--');%画出包络波形
hold off
axis([0,N/f,-Am,+Am])%设置坐标轴范围
axes(handles.axes5)
DSB_Modulation_fft = fft(DSB_Modulation_Num,N);%傅里叶变换
DSB_Modulation_P = abs(DSB_Modulation_fft).^2/N;%用周期法求频谱
New_X = n*f/N;%计算傅里叶变换的坐标
%%将频谱进行搬移,使其分布在坐标轴两侧
temp(1,N/2) = 0;
for i = 1:N/2
    temp(i) = New_X(i);
    New_X(i) = New_X(i+N/2);
    New_X(i+N/2) = temp(i);
end
for i = 1:N
    New_X(i) = New_X(i)-f/2;
end
plot(New_X,DSB_Modulation_P);%画出频谱波形图
axis([-5*fc,5*fc,0,max(abs(DSB_Modulation_fft))])%设置坐标轴范围

DSB解调信号Callback回调函数MATLAB程序如下:

function DSB_Demodulation_Callback(~, ~, handles)
axes(handles.axes4)
global fc;%载波信号的频率
global fm;%调制信号的频率
global Am;%调制信号的幅值
global DSB_Modulation_Num;%DSB调制的采样值
global Modulation_Num;%调制信号的采样值
global t_Modulation;%调制信号的采样点时刻
N = 1000;%采样点
f = 100;    %初始化采样频率
%%根据载波频率的不同,调整采样频率
if fc > 1000
    f = 200000;
else if (500 < fc) && (fc <= 1000)
        f = 100000;
    else if (100 < fc) && (fc <= 500)
        f = 10000;
        else 
            f = 1000;
        end
    end
end

n = 0:N-1;
t = n/f;    %采样时间间隔
wp = 2*(0.5*fm-300)/f;%通带频率
ws = 2*(0.5*fm+300)/f;%阻带频率
wdel = ws-wp;%带宽
wn = 0.5*(wp+ws);%截止频率
D = ceil(6.6*pi/wdel);%计算滤波器阶数
window = hamming(D+1);
%相干解调之后的数值
DSB_Demodulation_Num = DSB_Modulation_Num .* cos(2*pi*fc*t_Modulation);
LPF = fir1(D,wn,window);%用hamming窗法生成低通滤波器(LPF)
DSB_Demodulation_LPF = filter(LPF,1,DSB_Demodulation_Num);%通过滤波器
DSB_Demodulation_Temp = 2*DSB_Demodulation_LPF;%恢复调制信号的幅值
T(1,:) = t(1,10:length(t)); 
DSB_Demodulation_Out(1,:) = DSB_Demodulation_Temp(1,10:length(DSB_Demodulation_Temp));
plot(T,DSB_Demodulation_Out,'g')%画出相干解调后的调制信号输出波形
hold on
plot(t_Modulation,Modulation_Num,'color','r')
hold off
axis([0,N/f,-Am,Am])%设置坐标轴的范围
axes(handles.axes5)
DSB_Demodulation_fft = fft(DSB_Demodulation_Temp);%傅里叶变换
DSB_Demodulation_P = abs(DSB_Demodulation_fft).^2/N;%用周期法求频谱
New_X = n*f/N;%计算傅里叶变换的坐标
%%将频谱进行搬移,使其分布在坐标轴两侧
temp(1,N/2) = 0;
for i = 1:N/2
    temp(i) = New_X(i);
    New_X(i) = New_X(i+N/2);
    New_X(i+N/2) = temp(i);
end

for i = 1:N
    New_X(i) = New_X(i)-f/2;
end

plot(New_X,DSB_Demodulation_P);%画出频谱波形
axis([-10*fm,10*fm,0,max(abs(DSB_Demodulation_fft))])%设置坐标轴范围

模拟信号调制与解调的原理还是相对简单的,对于有编程能力的,如果不限时间,应该是可以完成的

测试输入数据为:载波信号频率为100Hz、载波信号直流分量为4A、调制信号频率为10Hz、调制信号直流分量为2A。

献上效果图。

调制信号
在这里插入图片描述
载波信号
在这里插入图片描述
DSB调制信号
在这里插入图片描述
DSB解调信号
在这里插入图片描述
由图分析得,调制时,AM调制信号幅值为6,DSB调制信号幅值为2,SSB调制信号幅值为1;解调时采用相干解调法,AM解调信号、DSB解调信号、SSB解调信号输出均为调制信号,信号幅值为2,解调信号有微小延时。

(ending)
Keeping move!
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值