matlab 中的傅里叶变换与低通滤波器的使用(针对数字信号)

it2023-10-31  63

matlab 中的傅里叶变换与低通滤波器的使用(针对数字信号) 主要是最近用到,做一个学习记录,友情大佬指正! 先贴出完整代码:

data = csvread('LOC5.csv'); %load data data = data(1:10000,1); data_1 = data(3001:8000); fs = 1000000; %Sampling rate N = 4096; %choice data to transform spec_1 = fft(data_1,N); %FFT figure(1); subplot(221); plot(data_1); n = 0:N-1; f = n*fs/N; %计算真实频率 subplot(222); plot(f(1:N/2),abs(spec_1(1:N/2))); lowpass = LowPass12000; filter_output_1 = filter(lowpass,data_1); %lowpass filter filter_spec_1 = fft(filter_output_1,N); %spectrum that data have pass lowpass filter subplot(223); plot(filter_output_1); subplot(224); plot(f(1:N/2),abs(filter_spec_1(1:N/2)));

傅里叶变换部分:

Fs是从模拟信号转换成数字信号的采样频率; N进行傅里叶变换的长度(一般是2的次方);

低通滤波器部分:

1.先使用fdatool命令设计滤波器,将设置转换.m文件(具体操作图如下) ① ②进行参数设计(可以自己考虑滤波器的种类) ③参数设计好以后,依次点击file->generate MATLAB coda -> Filter Design Function

2.调用 lowpass = LowPass12000;%(文件名 LowPass12000.m) filter_output_1 = filter(lowpass,data_1); %lowpass filter filter_spec_1 = fft(filter_output_1,N); %spectrum that data have pass lowpass filter

最终执行结结果:

图一:待处理信号 图二:待处理信号频谱 图一:滤波后的信号 图二:滤波后的信号频谱 补充: FFT变换后的复数模 - 幅度 假设原始信号的峰值为A,那么FFT的结果的每个点(除了第一个点直流分量之外)的模值就是A 的N/2倍。而第一个点就是直流分量,它的模值就是直流分量的N倍。

最新回复(0)