function x=modulation2ask(a,fc,r) n=2000; i=linspace(0,1,n);% 生成0到1之间的n个等间距采样点 x1=sin(2*pi*i*fc/r);% 生成载波信号 an=length(a); x0=zeros(size(an*n)); % 生成长度为an*n的全零向量 for j=1:an if a(j) y=x1; else y=x0; end x(1,(j-1)*n+1:j*n)=y;% 将生成的信号拼接起来 end nn=(1:length(x))/n;% 生成时间序列 plot(nn,x);grid on;xlabel('2ASK已调制信号'); %设计2ASK相干解调程序如下: deat=x; for j=1:an deat(1,(j-1)*n+1:j*n)=x(1,(j-1)*n+1:j*n).*x1; end subplot(233); plot(nn,deat);grid;xlabel('2ASK解调 1-与载波相乘'); deat=deat-mean(deat); 接着写出后续代码
时间: 2023-12-08 19:06:46 浏览: 428
%设计2ASK相干解调程序如下:
deat1=filter([1 1 1]/3,1,deat);% 生成移动平均滤波器
deat1=deat1(2:end);% 去掉前两个滤波器的无效值
subplot(236); plot(nn,deat1);grid on;xlabel('2ASK解调 2-移动平均滤波');
dem=zeros(1,an);% 生成长度为an的全零向量
for j=1:an
s=sum(deat1((j-1)*n+1:j*n));% 对每一个调制信号段进行积分
if s>0.5*n % 由于在解调时信号进行了归一化,所以这里的阈值为0.5*n
dem(j)=1;
end
end
subplot(235);stem(dem);grid on;xlabel('解调后的二进制信号');
相关问题
function x=modulation2ask(a,fc,r) n=2000; i=linspace(0,1,n); x1=sin(2*pi*i*fc/r); an=length(a); x0=zeros(size(an*n)); for j=1:an if a(j) y=x1; else y=x0; end x(1,(j-1)*n+1:j*n)=y; end nn=(1:length(x))/n; plot(nn,x);grid on;xlabel('2ASK已调制信号'); title('20211260562胡盈盈'); deat=x; for j=1:an deat(1,(j-1)*n+1:j*n)=x(1,(j-1)*n+1:j*n).*x1; end subplot(233); plot(nn,deat);grid;xlabel('2ASK解调 1-与载波相乘'); 接着写2ASK解调 2-低通滤波;2ASK解调 恢复的信号代码
2ASK解调 2-低通滤波的代码如下:
fcut = fc*2; % 设置低通滤波器截止频率为载波频率的2倍
[b,a] = butter(6, fcut/(r*n/2), 'low'); % 计算6阶巴特沃斯低通滤波器系数
y = filter(b,a,deat); % 对解调信号进行滤波
2ASK解调 恢复的信号代码如下:
x_rec = zeros(1,an); % 初始化恢复的数据
for j = 1:an
x_rec(j) = mean(y((j-1)*n+1:j*n))/mean(x1); % 计算每个符号的平均值,并除以载波幅值
end
其中,x_rec即为解调后恢复的数据。
clc; clear; close all; % 定义参数 fc = 2e3; % 载波频率 fs = 64 * fc; % 采样频率 T = 8 / fc; % 基带信号周期 Ts = 1 / (2 * fc); % 输入信号周期 B = 0.5 / T; % 基带带宽 BbTb = 0.5; % 3dB带宽 % 生成数字序列和基带信号 data = [0 0 1 0 1 0 1 0]; baseband = generate_baseband(data, fs, T); % GMSK调制 modulated_signal = gmsk_modulation(baseband, fc, fs, B, BbTb); % 绘制调制后的波形 figure(1); t = 0:1/fs:length(modulated_signal)/fs-1/fs; plot(t, modulated_signal); xlabel('时间/s'); ylabel('幅度'); title('GMSK调制波形00101010'); % 生成基带信号的函数 % 输入参数: % data: 数字序列 % fs: 采样频率 % T: 基带信号周期 % 输出参数: % baseband: 基带信号 function baseband = generate_baseband(data, fs, T) baseband = zeros(1, length(data) * fs * T); for i = 1:length(data) if data(i) == 0 baseband((i-1)*fs*T+1:i*fs*T) = -1; else baseband((i-1)*fs*T+1:i*fs*T) = 1; end end end % GMSK调制的函数 % 输入参数: % baseband: 基带信号 % fc: 载波频率 % fs: 采样频率 % B: 基带带宽 % BbTb: 3dB带宽 % 输出参数: % modulated_signal: 调制信号 function modulated_signal = gmsk_modulation(baseband, fc, fs, B, BbTb) kf = B / (2*pi); % 调制指数 bt = 0:1/fs:length(baseband)/fs-1/fs; % 基带信号时间序列 gaussian = gausspuls(bt, B/(2*pi*BbTb), 2.5); % 高斯滤波器 baseband_f = filter(gaussian, 1, baseband); % 进行滤波 cumulative_freq = cumsum(baseband_f) / fs * kf; % 计算累积频偏 t = 0:1/fs:length(baseband_f)/fs-1/fs; % 调制信号时间序列 phasor = exp(1j*(2*pi*fc*t + 2*pi*cumulative_freq)); % 产生载波相位 modulated_signal = real(baseband_f .* phasor); % 进行相乘运算,得到调制信号 end % 自定义高斯滤波器函数 % 输入参数: % t: 时间序列 % B: 带宽 % alpha: 音频信号系数 % 输出参数: % g: 高斯函数 function gaussian = gausspuls(t, B, alpha) gaussian = (2 * pi * B * t) .^ alpha .* exp(-(2 * pi * B * t) .^ 2 / (2 * log(2))); end
这是一个 MATLAB 代码,实现了 GMSK 调制。代码中定义了载波频率、采样频率、基带信号周期等参数,并通过 generate_baseband 函数生成了基带信号。接着,通过 gmsk_modulation 函数对基带信号进行 GMSK 调制,得到调制信号。最后,绘制了调制后的波形。代码中还定义了一个自定义高斯滤波器函数 gausspuls。
阅读全文