matlab中bpf怎么设置,为啥找不到 'bpf' 的完全匹配项(区分大小写)?

本文通过MATLAB代码实现QPSK(四相相移键控)与OQPSK(正交四相相移键控)的调制过程,并比较了两种信号在经过非线性电路后的功率谱密度。实验中生成了100段N_num个码字的波形,取其功率谱密度的平均以获得更平滑的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

%QPSK & OQPSK

clear all;

close all;

M=4;

Ts=1;

fc=10;

N_sample=16;

N_num=100;

dt=1/fc/N_sample;

t=0:dt:N_num*Ts-dt;

T=dt*length(t);

py1f=zeros(1,length(t));   %功率谱密度1

py2f=zeros(1,length(t));   %功率谱密度2

for PL=1:100  %输入100段N_num个码字的波形,为了使功率谱密度看起来更加平滑,

%可以取这100段信号功率谱密度的平均

d1=sign(randn(1,N_num));

d2=sign(randn(1,N_num));

gt=ones(1,fc*N_sample);

%QPSK调制

s1=sigexpand(d1,fc*N_sample);

s2=sigexpand(d2,fc*N_sample);

b1=conv(s1,gt);

b2=conv(s2,gt);

s1=b1(1:length(s1));

s2=b2(1:length(s2));

st_qpsk=s1.*cos(2*pi*fc*t)-s2.*sin(2*pi*fc*t);

s2_delay=[-ones(1,N_sample*fc/2) s2(1:end-N_sample*fc/2)];

st_oqpsk=s1.*cos(2*pi*fc*t)-s2_delay.*sin(2*pi*fc*t);

%经过带通后,在经过非线性电路

[~, y1f]=T2F(t,st_qpsk);

[f, y2f]=T2F(t,st_oqpsk);

[~, y1]=bpf(f,y1f,fc-1/Ts,fc+1/Ts);

[t, y2]=bpf(f,y2f,fc-1/Ts,fc+1/Ts);

subplot(221);

plot(t,y1);xlabel('t');ylabel('QPSK波形');

axis([5 15 -1.6 1.6]);title('经过带通后的波形');

subplot(222);

plot(t,y2);xlabel('t');ylabel('OQPSK波形');

axis([5 15 -1.6 1.6]);title('经过带通后的波形');

%经过非线性电路

y1=1.5*tanh(2*y1);

y2=1.5*tanh(2*y2);

[~, y1f]=T2F(t,y1);

[f, y2f]=T2F(t,y2);

py1f=py1f+abs(y1f).^2/T;   %QPSK不同段信号功率谱密度相加

py2f=py2f+abs(y2f).^2/T;   %OQPSK不同段信号功率谱密度相加

end

py1f=py1f/100;                  %QPSK100段功率谱密度平均

py2f=py2f/100;                  %OQPSK100段功率谱密度平均

subplot(223);

plot(f,10*log10(py1f));xlabel('f');ylabel('QPSK功率谱密度(dB/Hz)');

title('经过非线性电路后的功率谱密度');axis([-15 15 -30 10]);

subplot(224);

plot(f,10*log10(py2f));xlabel('f');ylabel('OQPSK功率谱密度(dB/Hz)');

title('经过非线性电路后的功率谱密度');axis([-15 15 -30 10]);

figure(2)

x=-2:0.1:2;

y=1.5*tanh(2*x);

plot(x,y);title('非线性电路的输入输入函数')

function[t,out]=BPF(f,Sf,fc,B)

df=f(2)-f(1);

%T=1/df;

N=length(f);

NC=floor(N/2);

Nfc=floor(fc/df);

NB2=floor(B/df/2);

%dt=floor(T/N);

%t=[0:N-1]*dt;

bpfH=zeros(1,N);

N1=[NC-Nfc+[-NB2:NB2],NC+Nfc+[-NB2:NB2]];

bpfH(N1)=1;

Yf=bpfH.*Sf;

[t,out]=IFFT_SHIFT(f,Yf);

一运行就出这个

>> oqpsk

找不到 'bpf' 的完全匹配项(区分大小写)。

最接近的匹配项为: BPF(在 C:\Users\lenovo\Documents\MATLAB\BPF.m 中)

出错 oqpsk (line 40)

[~, y1]=bpf(f,y1f,fc-1/Ts,fc+1/Ts);

为啥呢 求大神解答

clear,clc CR = 1.2; %限幅比:限幅点平与OFDM信号RMS之比 b=2; % 每一QPSK符号的比特数 N=128; % FFT大小 Ncp=32; % CP长度 fs=1e6; % 采样频率 L=8; % 过采样因子(以生成L倍的过采样离散时间信号) Tsym=1/(fs/N); % 采样频率 Ts=1/(fs*L); % 采样周期 fc=2e6; wc=2*pi*fc; % 载波频率 t=[0:Ts:2*Tsym-Ts]/Tsym; t0=t((N/2-Ncp)*L); f=[0:fs/(N*2):L*fs-fs/(N*2)]-L*fs/2; Fs=8; % 滤波器采样频率 Norder=104; % 采样阶数 dens=20; % 密度因子 FF=[0 1.4 1.5 2.5 2.6 Fs/2]; % 阻带/通带/阻带频率边缘向量 WW=[10 1 10]; % 加权向量 h = firpm(Norder,FF/(Fs/2),[0 0 1 1 0 0],WW,{dens}); % BPF系数 % 生成二进制数据流 b_bits = randi([0 1], 2*N, 1); % 2*N 比特 %X = mapper(b,N); X(1) = 0; % QPSK调制 X = qammod(b_bits, 4, 'InputType', 'bit', 'UnitAveragePower', true).';X(1) = 0; % QPSK调制 %x=IFFT_oversampling(X,N,L); % IFFT和过采样 X_oversampled = [X(1:N/2), zeros(1, N*(L-1)), X(N/2+1:end)]; % 频域补零 X_oversampled = fftshift(X_oversampled); % 调整频谱顺序(假设原信号是中心对称的) x = ifft(X_oversampled, N*L, 'symmetric') * sqrt(N*L); % 执行 IFFT 并调整幅度 x_b=add_CP(x,Ncp*L); % 添加CP x_b_os=[zeros(1,(N/2-Ncp)*L), x_b, zeros(1,N*L/2)]; % 过采样 %x_p = upconv_fin(2*fc,x_b_os,t); x_p = sqrt(2)*real(x_b_os.*exp(j*2*wc*t)); % 从基带到通频带 %norm(x_p-x_p1) x_p_c = clipping(x_p,CR); %X_p_c_f = filtering(h,x_p_c); X_p_c_f= fft(filter(h,1,x_p_c)); %norm(X_p_c_f-X_p_c_f1) %X_p_c_f = BPF_using_FFT(x_p_c,[1.5 2.5],8); x_p_c_f = ifft(X_p_c_f); %x_b_c_f = dwconv_fin(2*fc,x_p_c_f,t); x_b_c_f = sqrt(2)*x_p_c_f.*exp(-j*2*wc*t); % 从通频带到基带 请解释上述用MATLAB写的各行代码的具体意思,也就是解释每一行代码。
最新发布
03-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值