matlab如何实现2fsk载波提取
时间: 2023-09-02 21:09:00 浏览: 71
在MATLAB中实现2FSK载波提取可以使用移动平均滤波器和Goertzel算法。具体步骤如下:
1. 对2FSK信号进行采样并得到离散信号。
2. 将采样后的离散信号进行移动平均滤波,去除高频噪声。
3. 对滤波后的信号进行Goertzel算法处理,得到两个频率的幅度值。
4. 比较两个频率的幅度值,确定是哪个频率的信号。
以下是MATLAB代码实现示例:
```matlab
% 采样频率
fs = 10000;
% 两个频率
f1 = 1000;
f2 = 2000;
% 时间长度
t = 0:1/fs:1;
% 生成2FSK信号
s1 = sin(2*pi*f1*t);
s2 = sin(2*pi*f2*t);
signal = [s1 s2 s1 s2];
% 添加高频噪声
signal_noise = signal + 0.1*randn(1,length(signal));
% 移动平均滤波器
windowSize = 10;
b = (1/windowSize)*ones(1,windowSize);
a = 1;
signal_filtered = filter(b,a,signal_noise);
% Goertzel算法
N = length(signal_filtered);
k1 = round((N*f1)/fs);
k2 = round((N*f2)/fs);
freqs = [f1 f2];
for i = 1:length(freqs)
w = 2*pi*freqs(i)/fs;
c = cos(w);
Q1 = 0;
Q2 = 0;
for j = 1:N
Q0 = c*Q1 - Q2 + signal_filtered(j);
Q2 = Q1;
Q1 = Q0;
end
amplitude(i) = sqrt(Q1^2 + Q2^2 - c*Q1*Q2);
end
% 判断是哪个频率的信号
if amplitude(1) > amplitude(2)
fprintf('信号为%fHz\n',f1);
else
fprintf('信号为%fHz\n',f2);
end
```
其中,采样频率和两个频率可以根据实际需求进行修改。