MATLAB 对信号进行butter带通滤波

发送三个波,波特率2G,中心频率分别是2G 6G和10G,现在做一个带通的滤波器滤出10G的波,4阶带通开始8G,截止10G,采样率64G

[B,A]=butter(4,[8e9/(SampleRate/2) 12e9/(SampleRate/2)]);
SpectrumAnalyzer(RxWfmTemp,'fs',64)
freqz(B,A)
RxWfmTemp=filter(B,A,RxWfmTemp);

 

 

close all;
clear;

%% parameter
RollOff = 0.1;
N_T = 100;
SampleRate = 64e9;
BaudRate = 2e9;
UpRate = SampleRate / BaudRate;
Len = 8192;
TrainLen = 2048;

rand('seed', 15);
TxBit = randi([0 1],1, Len);
TxSym = qammod(TxBit.', 2, 'InputType', 'Bit').'; %BPSK 

%% upsampling & RRC
RRCFilt = rcosdesign(RollOff, N_T, UpRate, 'sqrt');
TxWfm=upfirdn(TxSym,RRCFilt,UpRate,1);

%% Frequency offset emulation
FreOffReal1 = 2*1e9;    % unknown to the receiver Hz
RxWfm1 = TxWfm.*exp(1i*2*pi*FreOffReal1*[1:length(TxWfm)]/BaudRate/UpRate);
FreOffReal2 = 6*1e9;    % unknown to the receiver Hz
RxWfm2 = TxWfm.*exp(1i*2*pi*FreOffReal2*[1:length(TxWfm)]/BaudRate/UpRate);
FreOffReal3 = 10*1e9;    % unknown to the receiver Hz
RxWfm3 = TxWfm.*exp(1i*2*pi*FreOffReal3*[1:length(TxWfm)]/BaudRate/UpRate);

RxWfm_Orin = RxWfm1+RxWfm2+RxWfm3;
signalF = fftshift(fft(RxWfm_Orin));
fs=(-length(RxWfm_Orin)/2+1:length(RxWfm_Orin)/2)*SampleRate/length(RxWfm_Orin);
figure(1)
plot(fs,10*log10(abs(signalF)));
grid on
title('滤波前')

%% filter
RxWfmTemp = RxWfm_Orin;
[B,A]=butter(4,[8e9/(SampleRate/2) 12e9/(SampleRate/2)]);
SpectrumAnalyzer(RxWfmTemp,'fs',64)
freqz(B,A)
RxWfmTemp=filter(B,A,RxWfmTemp);
signalF = fftshift(fft(RxWfmTemp));
fs=(-length(RxWfm_Orin)/2+1:length(RxWfm_Orin)/2)*SampleRate/length(RxWfm_Orin);
figure(2)
plot(fs,10*log10(abs(signalF)));
grid on
title('滤波后')

但是这个解调是错的,之后再改

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MATLAB滤波代码的编写主要涉及到以下几个步骤: 1. 确定滤波器的类型和特性:常有无限冲激响应(IIR)和有限冲激响应(FIR)两种类型的滤波器。根据需求选择合适的滤波器类型,并确定其滤波器的和阻频率范围。 2. 设计滤波器:使用MATLAB提供的信号处理工具箱中的函数来设计滤波器。对于IIR滤波器,可以使用"butter"、"cheby1"或"ellip"等函数进行设计;对于FIR滤波器,可以使用"fir1"或"fir2"等函数进行设计。过指定和阻频率,以及滤波器阶数或窗函数类型等参数来设计滤波器。 3. 滤波信号:将待滤波信号输入到设计好的滤波器中进行滤波。使用MATLAB中的"filter"函数,将滤波器的系数矩阵和待滤波信号作为输入,得到滤波后的信号。 4. 可选的后处理:根据需要可以对滤波后的信号进行后处理,如添加窗函数、归一化等操作。 下面是一个具体的MATLAB滤波代码示例,以使用IIR滤波器为例: ```matlab % 设定滤波器参数 fs = 1000; % 采样率 fc1 = 50; % 起始频率 fc2 = 200; % 结束频率 order = 4; % 滤波器阶数 % 设计滤波器 [b, a] = butter(order, [fc1, fc2]*2/fs, 'bandpass'); % 待滤波信号 t = 0:1/fs:1-1/fs; x = sin(2*pi*100*t) + sin(2*pi*300*t) + sin(2*pi*500*t); % 滤波信号 y = filter(b, a, x); % 绘制滤波前后的信号波形 figure; subplot(2,1,1); plot(t, x); title('原始信号'); subplot(2,1,2); plot(t, y); title('滤波后的信号'); ``` 上述代码中,使用了"butter"函数设计了一个4阶的IIR滤波器,其范围为50Hz到200Hz。待滤波信号为合成的100Hz、300Hz和500Hz三个正弦信号的叠加,过"filter"函数进行滤波操作,最后绘制了滤波前后的信号波形。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值