找高手用c语言帮写一个qpsk调制解调的程序,QPSK调制解调完整程序配有自己的注释...

《QPSK调制解调完整程序配有自己的注释》由会员分享,可在线阅读,更多相关《QPSK调制解调完整程序配有自己的注释(6页珍藏版)》请在人人文库网上搜索。

1、QPSK调制解调完整程序(配有注释)clc;clear all;%假定接收端已经实现载波同步,位同步(盲信号解调重点要解决的问题:载波同步(costas环(未见到相关代码),位同步(Gardner算法(未见相关代码),帧同步)% carrier frequencyfor modulation and demodulationfc=5e6;%QPSK transmitterdata=5000; %码数率为5MHZ %原码个数rand_data=randn(1,5000);fori=1:dataif rand_data(i)=0.5rand_data(i)=1;elserand_data(i)=0。

2、;endend%seriel to parallel %同时单极性码转为双极性码fori=1:dataif rem(i,2)=1ifrand_data(i)=1I(i)=1;I(i+1)=1;elseI(i)=-1;I(i+1)=-1;endelseif rand_data(i)=1Q(i-1)=1;Q(i)=1;elseQ(i-1)=-1;Q(i)=-1;endendend% zero insertion ,此过程称为成形。成形的意思就是实现由消息到波形的转换,以便发射,脉冲成形应该是在基带调制之后。zero=5; %samplingrate25M HZ,明白了,zero为过采样率。它等于 。

3、采样率fs/码速率。fori=1:zero*data % 采样点数目=过采样率*原码数目if rem(i,zero)=1Izero(i)=I(fix(i-1)/zero)+1);Qzero(i)=Q(fix(i-1)/zero)+1);elseIzero(i)=0;Qzero(i)=0;endend%pulse shape filter, 接着,将进行低通滤波,因为 随着传输速率的增大,基带脉冲的频谱将变宽%如果不滤波(如升余弦滤波)进行低通滤波,后面加载频的时候可能会出现困难。%平方根升余弦滤波器% psf=rcosfir(rf,n_t,rate,fs,sqrt) rate:过采样率,rf:。

4、滚降因子,n_t:滤波器阶数,fs:采样率%用在调制或发送之前,用在解调或接受之后,用来降低过采样符号流带宽并不引发ISI(码间串扰)NT=50;N=2*zero*NT; % =500fs=25e6;rf=0.1;psf=rcosfir(rf,NT,zero,fs,sqrt);% psf大小为500Ipulse=conv(Izero,psf);Qpulse=conv(Qzero,psf);%为什么数字信号传输也要过采样,成形滤波?%答:过采样的数字信号处理起来对低通滤波器的要求相对较低,如果不过采样,滤波的时候滤波器需要很陡峭,指标会很严格%成形滤波的作用是保证采样点不失真。如果没有它,那信号。

5、在经过带限信道后,眼图张不开,ISI非常严重。成形滤波的位置在基带调制之后。%因为经成形滤波后,信号的信息已经有所损失,这也是为避免ISI付出的代价。换句话说,成形滤波的位置在载波调制之前,仅挨着载波调制。%即:(发送端)插值(采样)-成形-滤波(LPF)-加载频(载波调制)-加噪声至(接收端)乘本振-低通-定时抽取-判决。%modulationfor i=1:zero*data+N %采样点数目改变 (因为卷积的缘故)t(i)=(i-1)/(fs);%这里因为假设载频与码速率大小相等,所以用载频fc乘以过采样率=采样率。Imod(i)=Ipulse(i)*sqrt(2)*cos(2*pi*f。

6、c*t(i);Qmod(i)=Qpulse(i)*(-sqrt(2)*sin(2*pi*fc*t(i);endsum=Imod+Qmod;%QPSKreceiver%demodulationfor i=1:zero*data+NIdem(i)=sum(i)*sqrt(2)*cos(2*pi*fc*t(i);Qdem(i)=sum(i)*(-sqrt(2)*sin(2*pi*fc*t(i);end%matchedfiltermtf=rcosfir(rf,NT,zero,fs,sqrt);Imat=conv(Idem,mtf);Qmat=conv(Qdem,mtf);%data selection。

7、fori=1:zero*dataIsel(i)=Imat(i+N);Qsel(i)=Qmat(i+N);end%sampler %提取码元for i=1:dataIsam(i)=Isel(i-1)*zero+1);Qsam(i)=Qsel(i-1)*zero+1);end%decisionthresholdthreshold=0.2;fori=1:dataif Isam(i)=thresholdIfinal(i)=1;elseIfinal(i)=-1;endif Qsam(i)=thresholdQfinal(i)=1;elseQfinal(i)=-1;endend%parallel to s。

8、erialfor i=1:dataif rem (i,2)=1if Ifinal(i)=1final(i)=1;elsefinal(i)=0;endelseifQfinal(i)=1final(i)=1;elsefinal(i)=0;endendend% 绘图figure(1)plot(20*log(abs(fft(rand_data);axis(0data-40100);grid on;title(spectrumof input binary data);figure(2)subplot(221);plot(20*log(abs(fft(I);axis(0 data -40 140);gr。

9、idon;title(spectrum of I-channel data);subplot(222);plot(20*log(abs(fft(Q);axis(0data -40140);gridon;title(spectrum of Q-channel data);subplot(223);plot(20*log(abs(fft(Izero);axis(0 zero*data-20140);gridon;title(spectrum of I-channel after zero insertion);subplot(224);plot(20*log(abs(fft(Qzero);axis。

10、(0zero*data -20 140);gridon;title(spectrum of Q-channel after zero insertion);figure(3);subplot(221);plot(psf);axis(200 300 -0.2 0.6);title(time domain response of pulse shaping filter);gridon;subplot(222);plot(20*log(abs(fft(psf);axis(0N -350 50);grid on;title(transferfunctionof pulseshaping filter。

11、);subplot(223);plot(20*log(abs(fft(Ipulse);axis(0zero*data+N-250 150);grid on;title(spectrum of I-channel afterimpulse shaping filter);subplot(224);plot(20*log(abs(fft(Qpulse);axis(0zero*data+N -250150);gridon;title(spectrum of Q-channelafter pluse shapingfilter);figure(4)subplot(211);plot(20*log(ab。

12、s(fft(Imod);axis(0zero*data+N-250 150);gridon ;title(spectrum of I-channelafter modulation);subplot(212);plot(20*log(abs(fft(Qmod);axis(0zero*data+N-250 150);gridon;title(spectrumofQ-channel after modulation);figure(5)subplot(221);plot(20*log(abs(fft(Idem);axis(0 zero*data-200150);grid on;title(spec。

13、trumof I-channel afterdemodulation);subplot(222);plot(20*log(abs(fft(Qdem);axis(0zero*data+N-200150 );gridon;title(spectrum of Q-channel after demodulation);subplot(223);plot(20*log(abs(fft(Imat);axis(0zero*data-400200);gridon;title(spectrumof I-channelaftermatched filter);subplot(224);plot(20*log(a。

14、bs(fft(Qmat);axis(0zero*data-400200);gridon;title(spectrum ofQ-channel after matched filter);figure(6)subplot(221);plot(20*log(abs(fft(Isam);axis(0 data-40150);gridon;title(spectrum of I-channel after sampler);subplot(222);plot(20*log(abs(fft(Qsam);axis(0data -40150 );gridon;title(spectrum of Q-chan。

15、nel aftersampler);subplot(223);plot(20*log(abs(fft(Ifinal);axis(0 data-40150);grid on;title(spectrum ofI-channel afterdecision threshold);subplot(224);plot(20*log(abs(fft(Qfinal);axis(0 data-40150);grid on;title(spectrum ofQ-channel afterdecision threshold);figure(7)plot(Isel,Qsel);axis(-1.6 1.6-1.61.6);gridon;title(constellationofmatchedfilteroutput);figure(8)plot(Isam,Qsam,X);axis(-1.21.2 -1.21.2);grid on;title(constellationofsampler);figure(9)plot(20*log(abs(fft(final);axis(0data0100);gridon;title(aspectrumoffinalreceivedbinarydata。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的QPSK调制解调的MATLAB代码示例: ```matlab % QPSK调制函数 function signal = qpsk_modulation(bits) % 将输入比特流按2个比特一组进行分组 bit_pairs = reshape(bits, 2, []); % 将每组2个比特转换为一个QPSK符号,使用调制映射表 symbol_indices = bi2de(bit_pairs', 'left-msb') + 1; modulation_table = [1+1i, -1+1i, -1-1i, 1-1i] / sqrt(2); symbols = modulation_table(symbol_indices); % 将符号序列串联为信号向量 signal = symbols(:); end % QPSK解调函数 function bits = qpsk_demodulation(signal) % 将信号向量按4个符号一组进行分组 symbols = reshape(signal, 4, []); % 将每组4个QPSK符号解调为2个比特,使用解调映射表 demodulation_table = [0 0; 0 1; 1 1; 1 0]; symbol_indices = zeros(1, size(symbols, 2)); for i = 1:size(symbols, 2) distances = abs(symbols(:,i) - modulation_table); [~, index] = min(distances); symbol_indices(i) = index - 1; end bit_pairs = demodulation_table(symbol_indices+1, :); % 将比特对转换为比特流 bits = bit_pairs(:)'; end % 示例 bits = [0 1 1 0 1 0 0 1]; signal = qpsk_modulation(bits); demodulated_bits = qpsk_demodulation(signal); disp("原始比特流:"); disp(bits); disp("调制后信号:"); disp(signal); disp("解调后比特流:"); disp(demodulated_bits); ``` 该代码中,`qpsk_modulation`函数将输入的比特流进行QPSK调制,即将每2个二进制比特转换为一个QPSK符号。`qpsk_demodulation`函数实现QPSK解调,即将接收到的QPSK符号解调为二进制比特。 示例中,我们将比特流`[0 1 1 0 1 0 0 1]`进行QPSK调制,得到调制信号`[0.7071+0.7071i -0.7071+0.7071i -0.7071-0.7071i 0.7071-0.7071i]`,然后进行解调操作,得到`[0 1 1 0 1 0 0 1]`,与原始比特流一致。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值