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
<think>好的,用户希望逐行解释一段MATLAB代码的功能,需要详细说明每行代码的作用和含义。首先,我需要确认用户提供的具体代码,但用户这次并没有给出代码示例。不过根据用户之前的引用内容,他们提到了车辆运动学模型的模拟和遗传算法的MATLAB代码解析。可能用户手头有一段类似的代码需要解释。 接下来,我应该回忆系统级指令中的要求:行内数学公式用$...$,独立公式用$$...$$,确保LaTeX正确,中文回答,生成相关问题,引用标识。用户提供的示例是关于快速排序的,但当前问题涉及MATLAB代码解释,需要参考用户提供的引用内容。 引用[1]中的例子是车辆运动学模型的循环,引用[2]是关于遗传算法和模块创建的。用户可能希望类似的结构,即逐行注释代码,并解释功能。例如,模拟循环、参数初始化、数学公式的应用等。 需要注意,用户可能需要代码示例的结构,比如函数定义、参数初始化、循环结构、数学运算、图形绘制等部分的分段解释。例如,在车辆运动学模型中,可能有时间步长的循环,状态变量的更新,微分方程的应用等。 然后,根据引用[1]的注释方法,应该概括每行代码的意图和逻辑,而不是逐字翻译代码。比如,解释for循环的作用是迭代时间步长,计算位置和速度的变化,应用运动学方程等。 同时,需要确保数学公式的正确LaTeX格式,例如车辆模型中的速度公式$v = v + a \cdot dt$,或者遗传算法中的适应度函数$f(x) = x^2$。 生成的相关问题可能涉及代码优化、参数调整、不同算法的应用比较等,比如如何修改参数以提高模拟精度,或者遗传算法的选择策略有哪些。 最后,检查是否符合所有格式要求,引用标识是否正确添加,例如在提到参数初始化或绘图函数时引用对应的注释例子。确保回答结构清晰,分步骤解释代码,并自然地融入引用标记。</think>以下是一个MATLAB代码逐行解释的示例框架(假设需要解析的代码是车辆运动学模型): ```matlab % 初始化参数 dt = 0.1; % 时间步长设置为0.1秒[^1] num_steps = 100; % 总迭代次数设为100步 x = 0; % 初始横向位置归零 y = 0; % 初始纵向位置归零 theta = pi/4; % 初始航向角设为45度(弧度制) v = 5; % 初始速度设为5m/s ``` ```matlab % 主循环模拟运动轨迹 for i = 1:num_steps % 遍历每个时间步长 dx = v * cos(theta) * dt; % 计算横向位移微分:$\Delta x = v\cos(\theta)\Delta t$ dy = v * sin(theta) * dt; % 计算纵向位移微分:$\Delta y = v\sin(\theta)\Delta t$ x = x + dx; % 更新横向位置:$x_{k+1} = x_k + \Delta x$ y = y + dy; % 更新纵向位置:$y_{k+1} = y_k + \Delta y$ theta = theta + 0.1*dt; % 模拟航向角变化:$\theta_{k+1} = \theta_k + \omega\Delta t$ end ``` ```matlab % 可视化结果 plot(x, y, 'b-'); % 绘制车辆运动轨迹(蓝色实线) xlabel('X位置'); % 设置横坐标标签 ylabel('Y位置'); % 设置纵坐标标签 title('车辆运动轨迹模拟'); % 添加图形标题 grid on; % 启用网格线 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值