panyi1013 发表于 2022-6-11 20:46:21

fir按DSP教程导入MATLAB报FIR1出错

fs=1000; %设置采样频率 1k
N=1024; %采样点数
n=0:N-1;
t=0:1/fs:1-1/fs; %时间序列
f=n*fs/N; %频率序列
Signal_Original=sin(2*pi*50*t); %信号 50Hz 正弦波
Signal_Noise=sin(2*pi*200*t); %噪声 200Hz 正弦波
Mix_Signal=Signal_Original+Signal_Noise; %将信号 Signal_Original 和 Signal_Original 合成一个信号进行采样
subplot(221);
plot(t, Mix_Signal); %绘制信号 Mix_Signal 的波形
xlabel('时间');
ylabel('幅值');
title('原始信号');
grid on;
subplot(222);
y=fft(Mix_Signal, N); %对信号 Mix_Signal 做 FFT
plot(f,abs(y));
xlabel('频率/Hz');
ylabel('振幅');
title('原始信号 FFT');
grid on;
b = fir1(30,125); %30 阶 FIR 低通滤波器,截止频率 125Hz------------------------------注原来是0.25
%y2= filter(b, 1, x);
y2=filtfilt(b,1,x); %经过 FIR 滤波器后得到的信号
Ps=sum(Signal_Original.^2); %信号的总功率
Pu=sum((y2-Signal_Original).^2); %剩余噪声的功率
SNR=10*log10(Ps/Pu); %信噪比
y3=fft(y2, N); %经过 FIR 滤波器后得到的信号做 FFT
subplot(223);
plot(f,abs(y3));
xlabel('频率/Hz');
ylabel('振幅');
title('滤波后信号 FFT');
grid on;
=freqz(b,1,512); %通过 fir1 设计的 FIR 系统的频率响应
subplot(224);
plot(F/pi,abs(H)); %绘制幅频响应
xlabel('归一化频率');
title(['Order=',int2str(30),' SNR=',num2str(SNR)]);
grid on;
出错 fir1 (line 22)
b = fir1(30,125); %30 阶 FIR 低通滤波器,截止频率 125Hz


panyi1013 发表于 2022-6-11 22:38:20

找到原因了 不能把文件名命名为FIR1 不然报错 但在y2=filtfilt(b,1,x); 这句又报错了。

panyi1013 发表于 2022-6-11 22:43:34

注意y2=filtfilt(b,1,x)x应当是Mix_Signal
改成y2=filtfilt(b,1,Mix_Signal)就OK 了
页: [1]
查看完整版本: fir按DSP教程导入MATLAB报FIR1出错