通信系统建模与仿真----作业五

任务内容:

实施AM振幅调制和解调的MATLAB仿真:

在MATLAB中编写程序,以模拟振幅调制(AM)和解调(AM)过程。要求调制信号由三个或更多不同幅度和频率的正弦波信号合成而成。任务包括绘制以下图形:

  1. 绘制调制信号的时域波形图和频谱图。
  2. 绘制载波信号的时域波形图和频谱图。
  3. 绘制已调波信号的时域波形图和频谱图。

使用同步检波进行已调波信号的解调:

通过同步检波方法对已调波信号进行解调。在同一图中绘制以下图形:

  1. 绘制原调制信号的时域波形。
  2. 绘制解调后的信号的时域波形。
  3. 绘制原调制信号和解调后的信号的频谱图。

最后,比较原调制信号和解调后的信号的异同之处。

function am_modulation_simulation(carrier_amplitude, carrier_frequency, modulation_index, signal1_amplitude, signal1_frequency, signal2_amplitude, signal2_frequency, signal3_amplitude, signal3_frequency)

% 计算时间轴
lowest_signal_frequency = min([signal1_frequency, signal2_frequency, signal3_frequency]);
time_axis = 0:1/(10*carrier_frequency):6/lowest_signal_frequency;

% 生成三个正弦信号的组合
signal1 = signal1_amplitude * cos(2*pi*signal1_frequency*time_axis);
signal2 = signal2_amplitude * cos(2*pi*signal2_frequency*time_axis);
signal3 = signal3_amplitude * cos(2*pi*signal3_frequency*time_axis);
composite_signal = signal1 + signal2 + signal3;

% 生成载波信号
carrier_signal = carrier_amplitude * cos(2*pi*carrier_frequency*time_axis);

% 调制信号
modulating_signal = (modulation_index * signal1_amplitude / carrier_amplitude) * cos(2*pi*signal1_frequency*time_axis) + ...
                    (modulation_index * signal2_amplitude / carrier_amplitude) * cos(2*pi*signal2_frequency*time_axis) + ...
                    (modulation_index * signal3_amplitude / carrier_amplitude) * cos(2*pi*signal3_frequency*time_axis);
                    
am_signal = carrier_amplitude * (1 + modulating_signal) .* cos(2*pi*carrier_frequency*time_axis);

% 绘制时域图
figure;
subplot(3,1,1)
plot(time_axis, composite_signal, 'r'); grid on;
ylabel('调制信号');
xlabel('时间');

subplot(3,1,2)
plot(time_axis, carrier_signal, 'r'); grid on;
ylabel('载波信号');
xlabel('时间');

subplot(3,1,3)
plot(time_axis, am_signal, 'r'); grid on;
ylabel('已调波信号');
xlabel('时间');
sgtitle('时域图')

% 计算频谱
composite_spectrum = fftshift(fft(composite_signal));
carrier_spectrum = fftshift(fft(carrier_signal));
am_spectrum = fftshift(fft(am_signal));
frequency_axis = linspace(-carrier_frequency/2, carrier_frequency/2, length(time_axis));

% 为频谱图设定边界
m = fix(length(time_axis) * 3/8);
n = fix(length(time_axis) * 5/8);

% 绘制频谱图
figure;
subplot(3,1,1); plot(frequency_axis(m:n), abs(composite_spectrum(m:n))); grid on;
ylabel('调制信号频谱');

subplot(3,1,2); plot(frequency_axis(m:n), abs(carrier_spectrum(m:n))); grid on;
ylabel('载波信号频谱');

subplot(3,1,3); plot(frequency_axis(m:n), abs(am_spectrum(m:n))); grid on;
ylabel('已调波信号频谱');
sgtitle('频谱图')

% 解调AM信号
demod_signal = am_signal .* (2 * cos(2*pi*carrier_frequency*time_axis));

% 设计低通滤波器以移除高频内容
lpf_order = 100; 
highest_signal_frequency = max([signal1_frequency, signal2_frequency, signal3_frequency]);
cutoff_frequency = highest_signal_frequency * 1.5;
filter_coefficients = fir1(lpf_order, cutoff_frequency / (carrier_frequency * 5));
filtered_signal = filter(filter_coefficients, 1, demod_signal);

% 绘制原始和解调后的信号的时域图
figure;
subplot(2,1,1)
plot(time_axis, composite_signal, 'r'); grid on;
ylabel('原始信号');

subplot(2,1,2)
plot(time_axis, filtered_signal, 'b'); grid on;
ylabel('解调信号');
sgtitle('原始信号与解调信号时域图')

% 绘制原始和解调后的信号的频谱图
original_spectrum = fftshift(fft(composite_signal));
demodulated_spectrum = fftshift(fft(filtered_signal));

figure;
subplot(2,1,1); plot(frequency_axis(m:n), abs(original_spectrum(m:n))); grid on;
ylabel('原始信号');

subplot(2,1,2); plot(frequency_axis(m:n), abs(demodulated_spectrum(m:n))); grid on;
ylabel('解调信号');
sgtitle('原始信号与解调信号频谱图')
end

波形图与频谱图:自己下matlab自己截

结论:自己编

运行方法:在matlab中,

括号内使用逗号隔开,输入carrier_amplitude, carrier_frequency, modulation_index, signal1_amplitude, signal1_frequency, signal2_amplitude, signal2_frequency, signal3_amplitude, signal3_frequency的参数,自己编

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值