⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demodqpsk.m

📁 C 程序 球面方位角算法: azimuth.cpp CRC校验快速算法: CRC_Table.cpp 解扰码算法: scrambler.cpp Matlab 程序 信号带宽测量: Ba
💻 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 + -