qq_47361278 2023-11-19 16:56 采纳率: 62.2%
浏览 9
已结题

MATLAB中PSD,fft问题

现在要复现如下图所示的三个子图

img


现在有两个问题:
1.第一个(a)图如何画出图中的效果,通过代码如何实现。
2.知道了u速度的均方根的最大值所在的x,y坐标以及u均方根最大值的时程图,也就是图(b),如何用快速傅里叶变换(fft)和PSD方法求出功率谱密度函数,并且标注出最大频率值所在位置,画出如图(c)所示的效果?

  • 写回答

7条回答 默认 最新

  • 社区专家-Monster-XH 2023-11-19 17:25
    关注

    img

    img

    img

    
    % 假设的u速度数据(这里只是一个随机生成的示例)
    t = 0:0.1:39.9; % 假设每0.1秒采集一次数据,总共400个数据点
    u = 0.6 + 0.5*sin(2*pi*0.3*t) + 0.5*randn(size(t)); % u速度的时程图数据
    
    % 假设的采样频率
    Fs = 10; % 采样频率10Hz,因为每秒采样10次数据
    
    % 绘制时间序列图(b)
    figure;
    plot(t, u);
    title('时间序列');
    xlabel('时间 (s)');
    ylabel('u/U∞');
    
    % 计算FFT
    L = length(u); % 信号的长度
    Y = fft(u);
    P2 = abs(Y/L);
    P1 = P2(1:L/2+1);
    P1(2:end-1) = 2*P1(2:end-1);
    f = Fs*(0:(L/2))/L; % 频率域
    
    % 绘制功率谱密度图(c)
    figure;
    plot(f,P1) 
    title('功率谱密度');
    xlabel('频率 (Hz)');
    ylabel('PSD');
    
    % 寻找最大功率谱密度并标注
    [PSD_max, idx] = max(P1); % 找到最大功率谱密度及其索引
    f_max = f(idx); % 最大功率谱密度对应的频率
    
    % 标注最大功率谱密度点
    hold on;
    plot(f_max, PSD_max, 'r*', 'MarkerSize', 10); % 标记最大点
    text(f_max, PSD_max, ['f_0 = ', num2str(f_max), ' Hz']); % 添加文本标签
    
    
    % 创建图像窗口
    figure;
    
    % 绘制方框
    rectangle('Position',[0.2 0.2 0.6 0.6],'LineWidth',2);
    
    % 绘制x轴箭头
    annotation('arrow', [0.5 1], [0.5 0.5], 'Color', 'k', 'LineWidth', 1);
    text(1,0.5,'x');
    
    % 绘制y轴箭头
    annotation('arrow', [0.5 0.5], [0.5 1], 'Color', 'k', 'LineWidth', 1);
    text(0.5,1,'y');
    
    % 添加标签
    text(0.1,0.5,'Upstream','HorizontalAlignment','right');
    text(0.8,0.8,'(x/D, y/D) = (1.35, 0.65)');
    
    % 设置坐标轴范围
    xlim([0 1]);
    ylim([0 1]);
    
    % 隐藏坐标轴刻度
    set(gca, 'Visible', 'off');
    
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月21日
  • 创建了问题 11月19日