任务内容:
实施AM振幅调制和解调的MATLAB仿真:
在MATLAB中编写程序,以模拟振幅调制(AM)和解调(AM)过程。要求调制信号由三个或更多不同幅度和频率的正弦波信号合成而成。任务包括绘制以下图形:
- 绘制调制信号的时域波形图和频谱图。
- 绘制载波信号的时域波形图和频谱图。
- 绘制已调波信号的时域波形图和频谱图。
使用同步检波进行已调波信号的解调:
通过同步检波方法对已调波信号进行解调。在同一图中绘制以下图形:
- 绘制原调制信号的时域波形。
- 绘制解调后的信号的时域波形。
- 绘制原调制信号和解调后的信号的频谱图。
最后,比较原调制信号和解调后的信号的异同之处。
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的参数,自己编