matlab中输入信号x(n)为归一化频率分别是f1=0.04,f2=0.3的正弦信号相加而成,N=50,内插因子为5,抽取因子为3,给出按有理因子5/3作采样频率转换的输入输出波形的matlab代码
时间: 2024-10-23 15:16:48 浏览: 59
在MATLAB中,你可以使用`freqz`函数生成一个由两个正弦信号相加的离散时间信号,然后通过`upsample`函数对信号进行内插,`resample`函数进行频率抽样。以下是相应的代码示例:
```matlab
% 参数设置
fs = 1; % 原始采样率 (假设是1 Hz)
N = 50; % 信号长度
f1 = 0.04; % 第一个频率成分
f2 = 0.3; % 第二个频率成分
% 创建信号
t = (0:N-1)'/fs;
x = sin(2*pi*f1*t) + sin(2*pi*f2*t); % 正弦信号相加
% 内插因子
L = 5;
% 内插信号
x_interpolated = upsample(x, L);
% 抽取因子
M = 3;
% 抽样频率转换
fs_new = fs * L / M; % 新的采样率
x_downsampled = resample(x_interpolated, M:length(x_interpolated)); % 抽样并裁剪
% 绘制原始和处理后的波形
figure;
subplot(2,1,1);
plot(t, x, 'b', 'LineWidth', 1.5);
title('Original Signal (fs = 1)');
xlabel('Time (s)');
ylabel('Amplitude');
subplot(2,1,2);
t_downsampled = (0:(length(x_downsampled)-1))/fs_new;
plot(t_downsampled, x_downsampled, 'g', 'LineWidth', 1.5);
title(['Upsampled and Downsampled Signal (fs_new = ' num2str(fs_new) ', L/M = ' num2str(L/M) ')']);
xlabel('Time (s) after upsampling and downsampling');
ylabel('Amplitude');
阅读全文