t = linspace(0, 1, 1000); m = sin(10*pi*t) + sin(30*pi*t); % 载波信号 fc = 1000; % Hz c = cos(2*pi*fc*t); % DSB信号 dsb = m .* c; % 上边带调制 lpf = fir1(100, fc/(2*pi)); m_lp = filter(lpf, 1, m); usb = m_lp .* cos(2*pi*fc*t); % 下边带调制 hpf = fir1(100, fc/(2*pi), 'high'); m_hp = filter(hpf, 1, m); lsb = m_hp .* sin(2*pi*fc*t); % 时域波形图 figure; subplot(4,1,1); plot(t, m); title('基带信号'); subplot(4,1,2); plot(t, dsb); title('DSB信号'); subplot(4,1,3); plot(t, usb); title('上边带调制信号'); subplot(4,1,4); plot(t, lsb); title('下边带调制信号'); % 幅度频谱图 figure; subplot(4,1,1); plot(abs(fft(m))); title('基带信号'); subplot(4,1,2); plot(abs(fft(dsb))); title('DSB信号'); subplot(4,1,3); plot(abs(fft(usb))); title('上边带调制信号'); subplot(4,1,4); plot(abs(fft(lsb))); title('下边带调制信号');这段代码显示错误使用 FIR1 需要的 Wn 应为包含所有值 < 1 的数组。 出错 fir1>validateargs (line 208) validateattributes(Wn,{'numeric'},{'real','finite','positive','>',0,'<',1},'FIR1','Wn'); 出错 fir1>parseoptargs (line 147) [Ftype,Wind,Scale] = validateargs(Wn,Ftype,Wind,Scale); 出错 fir1 (line 98) [Ftype,Wind,SCALING] = parseoptargs(Wn,varargin{:}); 出错 qq1 (line 13) lpf = fir1(100, fc/(2*pi));请修改
时间: 2024-03-24 07:41:13 浏览: 76
光栅系数:计算 sin(n*pi*x)/sin(pi*x)-matlab开发
这个错误提示是因为fir1函数的第一个参数Wn需要是一个包含所有值小于1的数组。在这个代码中,fc=1000,而100/(2*pi*1000)=0.0159,因此Wn的值超出了1的范围,导致了错误。可以尝试将100改小一些,或者将截止频率fc改大一些,以保证Wn的值在合理的范围内。例如,把100改为20,即可解决这个问题。修改后的代码如下:
```matlab
% 基带信号
t = linspace(0, 1, 1000);
m = sin(10*pi*t) + sin(30*pi*t);
% 载波信号
fc = 1000; % Hz
c = cos(2*pi*fc*t);
% DSB信号
dsb = m .* c;
% 上边带调制
lpf = fir1(100, 20/(2*pi)); % 将100改为20
m_lp = filter(lpf, 1, m);
usb = m_lp .* cos(2*pi*fc*t);
% 下边带调制
hpf = fir1(100, 20/(2*pi), 'high'); % 将100改为20
m_hp = filter(hpf, 1, m);
lsb = m_hp .* sin(2*pi*fc*t);
% 时域波形图
figure;
subplot(4,1,1); plot(t, m); title('基带信号');
subplot(4,1,2); plot(t, dsb); title('DSB信号');
subplot(4,1,3); plot(t, usb); title('上边带调制信号');
subplot(4,1,4); plot(t, lsb); title('下边带调制信号');
% 幅度频谱图
figure;
subplot(4,1,1); plot(abs(fft(m))); title('基带信号');
subplot(4,1,2); plot(abs(fft(dsb))); title('DSB信号');
subplot(4,1,3); plot(abs(fft(usb))); title('上边带调制信号');
subplot(4,1,4); plot(abs(fft(lsb))); title('下边带调制信号');
```
注意,这里只是举例说明,实际使用时需要根据具体情况选择合适的截止频率。
阅读全文