📄 demodqpsk.m
字号:
% QPSK 解调
% 输入:输入输出文件名(16位量化)、采样率fs、码元速率rate、同步起始位置 start, 解调数据长度size, 输出解调结果bit
close all; clear all; clc;
start =94; % 采样文件中的码元同步位置,以字节为单位
fid = fopen('E:\qpsk_1.wav','r');
fout = fopen('E:\test.txt','w');
fs=1000000; rate=2000; size=10000;
Cyc=fs/rate;
status = fseek(fid,start,'bof');
[src,count] = fread(fid,size,'int16');
my_count = fix(count/2);
src = src';
for i = 1:my_count-1
src1(i) = src(2*i);
src2(i) = src(2*i+1);
end;
star_num = floor(my_count/Cyc)-1; %含码元数量
for i = 1:star_num
out_x(i) = src1(Cyc*i); %偶数(后一个)
out_y(i) = src2(Cyc*i); %奇数(前一个)
end;
din = complex(out_x,out_y);
dout = abs(din);
theta = angle(din)*180/pi;
scatterplot(din,1,0,'b.');
[titlestring errmsg]=sprintf('start = %d)',start);
title(titlestring);
grid on;
total = 0.0;
for i = 1:(star_num - 1)
dif(i) = theta(i+1) - theta(i);
if dif(i) < 0
dif(i) = dif(i) + 360;
end;
out_dif(i) = dif(i);
dif(i) = mod(dif(i),45);
if dif(i) > 22
dif(i) = dif(i) - 45;
end;
total = total + dif(i);
out(i) = theta(i+1) - theta(i);
if out(i) < 0
out(i) = out(i) + 360;
end;
if out(i) < 90
bit(2*i) = '0';
bit(2*i+1) = '0';
end;
if out(i) >= 90 & out(i) < 180
bit(2*i) = '0';
bit(2*i+1) = '1';
end;
if out(i) >= 180 & out(i) < 270
bit(2*i) = '1';
bit(2*i+1) = '1';
end;
if out(i) >= 270
bit(2*i) = '1';
bit(2*i+1) = '0';
end;
end;
dout
out_dif;
total = total/(star_num - 1)
theta;
bit
out;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -