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解调 恢复的信号代码
时间: 2023-12-08 15:06:33 浏览: 72
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即为解调后恢复的数据。
相关问题
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); 接着写出后续代码
%设计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 s = OTFS_modulation(N,M,x) %% OTFS Modulation: 1. ISFFT, 2. Heisenberg transform X = fft(ifft(x).').'/sqrt(M/N); %%%ISFFT,其中.'表示转置, s_mat = ifft(X.')*sqrt(M); % Heisenberg transform s = s_mat(:);%(:)表示将矩阵重构为列向量: end
这段代码实现了OTFS调制中的ISFFT和Heisenberg变换,具体如下:
1. 首先使用ifft函数对x进行IFFT变换,得到一个大小为N*M的矩阵,其中每一列都代表一个OFDM符号。
2. 然后使用.'将IFFT后的矩阵进行转置,使得每一行代表一个OFDM符号。
3. 接着使用fft函数对转置后的矩阵进行FFT变换,得到一个大小为N*M的矩阵X,其中每一行代表一个时域样本。
4. 对X进行归一化,即除以sqrt(M/N)。
5. 然后使用.'再次将X进行转置,使得每一列代表一个时域样本。
6. 使用ifft函数对转置后的矩阵进行IFFT变换,得到一个大小为M*N的矩阵s_mat,其中每一行代表一个时域样本,每一列代表一个子载波。
7. 对s_mat进行Heisenberg变换,即乘以sqrt(M),得到一个大小为M*N的矩阵s,其中每一列代表一个时域样本,每一行代表一个子载波。
8. 最后使用(:)将s矩阵重构为列向量s,即OTFS调制后的输出信号。
综上,该函数实现了OTFS调制的基本步骤,将输入的复包络信号x通过ISFFT和Heisenberg变换映射到时频域上,得到输出信号s。
阅读全文