频率为150hz的正弦波做426点FFT的matlab程序
时间: 2024-01-21 21:17:06 浏览: 32
以下是频率为150hz的正弦波做426点FFT的MATLAB程序:
```
% 设置采样率和采样点数
fs = 42600; % 采样率
n = 426; % 采样点数
% 生成150hz正弦波
f = 150; % 频率为150hz
t = 0:1/fs:(n-1)/fs; % 时间向量
x = sin(2*pi*f*t); % 正弦波信号
% 进行FFT变换
X = fft(x,n); % n点FFT变换
% 计算幅值谱
magX = abs(X);
% 计算频率向量
f = (0:n-1)*(fs/n);
% 画出幅值谱
plot(f,magX);
xlabel('频率 (Hz)');
ylabel('幅值');
title('150Hz正弦波的幅值谱');
```
这个程序会生成一个幅值谱图,可以看到在150Hz处有一个峰值。
相关问题
使用matlab:数据中包含3个不同频率正弦波,1个特定频率的方波,以及高斯白噪声,采样率为30000HZ, 使用“filterDesigner”toolbox设计FIR滤波器(4个滤波器),分别提取其中3个不同频率正弦 波,1个频率的方波。正弦波的频率分别为110Hz,2009Hz,5015Hz,分别画出滤波之后的3个不同频率正弦波,1个频率的方波的时域波形和fft频谱
好的,我会根据您的要求进行回答。以下是解决方案:
1. 首先使用Matlab中的“filterDesigner”工具箱设计4个FIR滤波器,分别用于提取110Hz、2009Hz、5015Hz的正弦波和1个特定频率的方波。在“filterDesigner”中,选择“FIR”滤波器类型,选择“Bandpass”滤波器响应类型,并设置相应的频率范围和通带、阻带参数。最后,导出每个滤波器的系数。
2. 在Matlab中,读入包含3个不同频率正弦波、1个特定频率方波和高斯白噪声的数据,并将数据进行归一化处理。
3. 使用Matlab中的“filter”函数,将每个滤波器的系数应用于原始数据,分别提取出3个不同频率正弦波和1个频率的方波。具体实现代码如下:
```matlab
% 读入数据
data = load('data.mat');
x = data.x;
% 归一化处理
x = x / max(abs(x));
% 导入滤波器系数
h110 = data.h110;
h2009 = data.h2009;
h5015 = data.h5015;
hsq = data.hsq;
% 应用滤波器
y110 = filter(h110, 1, x);
y2009 = filter(h2009, 1, x);
y5015 = filter(h5015, 1, x);
ysq = filter(hsq, 1, x);
% 提取正弦波和方波
fs = 30000;
t = (0:length(x)-1) / fs;
sine110 = sin(2*pi*110*t);
sine2009 = sin(2*pi*2009*t);
sine5015 = sin(2*pi*5015*t);
square = square(2*pi*1000*t);
sine110_filtered = y110 .* sine110;
sine2009_filtered = y2009 .* sine2009;
sine5015_filtered = y5015 .* sine5015;
square_filtered = ysq .* square;
```
4. 绘制每个信号的时域波形和FFT频谱,代码如下:
```matlab
% 绘制110Hz正弦波的时域波形和FFT频谱
figure;
subplot(2,1,1);
plot(t, sine110_filtered);
title('110Hz Sine Wave (Filtered)');
xlabel('Time (s)');
ylabel('Amplitude');
subplot(2,1,2);
N = length(sine110_filtered);
f = (-N/2:N/2-1) * fs / N;
Y = fftshift(fft(sine110_filtered)/N);
plot(f, abs(Y));
title('110Hz Sine Wave FFT (Filtered)');
xlabel('Frequency (Hz)');
ylabel('Magnitude');
% 绘制2009Hz正弦波的时域波形和FFT频谱
figure;
subplot(2,1,1);
plot(t, sine2009_filtered);
title('2009Hz Sine Wave (Filtered)');
xlabel('Time (s)');
ylabel('Amplitude');
subplot(2,1,2);
N = length(sine2009_filtered);
f = (-N/2:N/2-1) * fs / N;
Y = fftshift(fft(sine2009_filtered)/N);
plot(f, abs(Y));
title('2009Hz Sine Wave FFT (Filtered)');
xlabel('Frequency (Hz)');
ylabel('Magnitude');
% 绘制5015Hz正弦波的时域波形和FFT频谱
figure;
subplot(2,1,1);
plot(t, sine5015_filtered);
title('5015Hz Sine Wave (Filtered)');
xlabel('Time (s)');
ylabel('Amplitude');
subplot(2,1,2);
N = length(sine5015_filtered);
f = (-N/2:N/2-1) * fs / N;
Y = fftshift(fft(sine5015_filtered)/N);
plot(f, abs(Y));
title('5015Hz Sine Wave FFT (Filtered)');
xlabel('Frequency (Hz)');
ylabel('Magnitude');
% 绘制方波的时域波形和FFT频谱
figure;
subplot(2,1,1);
plot(t, square_filtered);
title('Square Wave (Filtered)');
xlabel('Time (s)');
ylabel('Amplitude');
subplot(2,1,2);
N = length(square_filtered);
f = (-N/2:N/2-1) * fs / N;
Y = fftshift(fft(square_filtered)/N);
plot(f, abs(Y));
title('Square Wave FFT (Filtered)');
xlabel('Frequency (Hz)');
ylabel('Magnitude');
```
以上就是实现您要求的所有功能的Matlab代码和结果展示。
利用matlab中的快速傅里叶变换函数FFT,编写程序,计算正弦波的傅里叶变换,绘制频谱图和相位图
好的,根据您的要求,我可以为您回答这个问题。
首先,我们需要生成一段正弦波,用于进行傅里叶变换。可以使用 Matlab 中的 sine 函数来实现。假设我们生成了一个频率为 f 的正弦波,采样率为 Fs,时长为 T,那么代码可以如下:
t = 0:1/Fs:T; % 生成时间序列
x = sin(2*pi*f*t); % 生成正弦波
接着,我们可以使用 FFT 函数进行傅里叶变换,并得到频谱图和相位图。代码如下:
y = fft(x); % 进行傅里叶变换
P2 = abs(y/T); % 取模并除以时长
P1 = P2(1:T/2+1); % 取一半,且仅保留正频率
P1(2:end-1) = 2*P1(2:end-1); % 乘以2
f = Fs*(0:(T/2))/T; % 生成频率序列
subplot(2,1,1);
plot(f,P1); % 绘制频谱图
title('频谱图');
xlabel('频率/Hz');
ylabel('幅值');
subplot(2,1,2);
phase = atan2(imag(y), real(y)); % 获取相位
plot(f,phase); % 绘制相位图
title('相位图');
xlabel('频率/Hz');
ylabel('相位/rad');
这样,就可以得到正弦波的傅里叶变换,并绘制出频谱图和相位图了。注意,绘制出的频谱图是以 Hz 为单位的,相位图是以 rad 为单位的。
希望这个回答能够帮助到您。