Matlab-对wav音频文件SSB调制及解调

发布时间 2023-07-10 23:33:01作者: 朱小勇

二、正交调制

1.读取wav音乐文件

% 读取音频文件
filename = 'jay.wav';
[sound_data, fs] = audioread(filename);  % 9507502x2 44100
sound_data_1 =  sound_data(:, 1);
sound_data_1 = sound_data_1';             % 转置

sound_data有两列,因为此音乐文件有两个通道,音频采样率为44100;

这里只使用其中一个通道数据;

将多行数据转置为单行数据,方便后续调制

2.调制

% 调制参数
carrier_freq = 10e3;  % 载波频率
% modulation_index = 1; % 调制指数 信号的幅度/载波的幅度
% dc = 1;               % 直流偏置
% sound_data_1_i = dc + modulation_index*sound_data_1_i;
% sound_data_1_q = dc + modulation_index*sound_data_1_q;

% 创建载波信号
t = (0:length(sound_data_1)-1) / fs;
carrier_i = cos(2*pi*carrier_freq*t);
carrier_q = sin(2*pi*carrier_freq*t);

% 进行正交调制
modulated_signal_i = sound_data_1_i .* carrier_i;
modulated_signal_q = sound_data_1_q .* carrier_q;
modulated_signal = modulated_signal_i+modulated_signal_q;

关于一些参数:

调制指数:也叫调制深度,定义为调制信号振幅与载波振幅之间的比例。调制指数决定了调制信号对载波振幅的影响程度。

直流偏置:AM调制时需要将基带信号往上搬移的幅值,保证信号所有采样点都在正轴

3.包络检波解调

%%%%%%%%%%%%%%1.使用接口解调,包络检波%%%%%%%%%%%%%
% 解调恢复原始信号
demodulated_signal = amdemod(modulated_signal, carrier_freq, fs, 0, 0);
% 播放解调后的音频
sound(demodulated_signal, fs);

 

4.相干解调

%%%%%%%%%%%%%%相干解调%%%%%%%%%%%%%
% demodulated_signal = modulated_signal .* carrier_i;  
demodulated_signal = modulated_signal .* carrier_q;
% 设计低通滤波器
[b, a] = butter(6, carrier_freq/(fs/2)); % 设计6阶低通滤波器
% 低通滤波
filtered = filter(b, a, demodulated_signal); 
subplot(2, 1, 1);
plot(modulated_signal);
subplot(2, 1, 2);
plot(filtered);
sound(filtered, fs);  % fs为采样率